ioctl: print private SIOC* ioctl commands

* ioctl.c [!SIOCPROTOPRIVATE] (SIOCPROTOPRIVATE): New macro constant.
[!SIOCDEVPRIVATE] (SIOCDEVPRIVATE): Likewise.
[!SIOCIWFIRSTPRIV] (SIOCIWFIRSTPRIV): Likewise.
[!SIOCIWLASTPRIV] (SIOCIWLASTPRIV): Likewise.
(ioctl_decode_command_number) <SOCK_IOC_TYPE>: Handle protocol-private
and device-private ioctl command numbers.
<0x8B>: Handle device-private ioctl comamnd numbers.
* tests/ioctl.c: Add checks.
This commit is contained in:
Eugene Syromyatnikov 2018-09-24 03:55:01 +02:00
parent d7beb8d758
commit c8dc2208eb
2 changed files with 50 additions and 0 deletions

29
ioctl.c
View File

@ -205,6 +205,19 @@ hiddev_decode_number(const unsigned int code)
return 0;
}
#ifndef SIOCPROTOPRIVATE
# define SIOCPROTOPRIVATE 0x89E0
#endif
#ifndef SIOCDEVPRIVATE
# define SIOCDEVPRIVATE 0x89F0
#endif
#ifndef SIOCIWFIRSTPRIV
# define SIOCIWFIRSTPRIV 0x8BE0
#endif
#ifndef SIOCIWLASTPRIV
# define SIOCIWLASTPRIV 0x8BFF
#endif
static int
ioctl_decode_command_number(struct tcb *tcp)
{
@ -242,6 +255,22 @@ ioctl_decode_command_number(struct tcb *tcp)
return 1;
}
return 0;
case SOCK_IOC_TYPE:
if (code > SIOCPROTOPRIVATE && code <= SIOCPROTOPRIVATE + 15) {
tprintf("SIOCPROTOPRIVATE+%u", code - SIOCPROTOPRIVATE);
return 1;
}
if (code > SIOCDEVPRIVATE && code <= SIOCDEVPRIVATE + 15) {
tprintf("SIOCDEVPRIVATE+%u", code - SIOCDEVPRIVATE);
return 1;
}
return 0;
case 0x8B: /* 802.11 */
if (code > SIOCIWFIRSTPRIV && code < SIOCIWLASTPRIV) {
tprintf("SIOCIWFIRSTPRIV+%u", code - SIOCIWFIRSTPRIV);
return 1;
}
return 0;
default:
return 0;
}

View File

@ -85,6 +85,27 @@ main(void)
printf("ioctl(-1, EVIOCGBIT(EV_KEY, 8), %p)"
" = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, 0x89df, &data);
printf("ioctl(-1, _IOC(%s, SOCK_IOC_TYPE, 0xdf, 0), %p)"
" = -1 EBADF (%m)\n",
_IOC_NONE ? "0" : "_IOC_NONE", &data);
(void) ioctl(-1, 0x89ef, &data);
printf("ioctl(-1, SIOCPROTOPRIVATE+15, %p) = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, 0x89ff, &data);
printf("ioctl(-1, SIOCDEVPRIVATE+15, %p) = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, 0x8bdf, &data);
printf("ioctl(-1, _IOC(%s, 0x8b, 0xdf, 0), %p) = -1 EBADF (%m)\n",
_IOC_NONE ? "0" : "_IOC_NONE", &data);
(void) ioctl(-1, 0x8bfe, &data);
printf("ioctl(-1, SIOCIWFIRSTPRIV+30, %p) = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, 0x8bff, &data);
printf("ioctl(-1, SIOCIWLASTPRIV, %p) = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, _IOR('M', 13, int), &data);
# ifdef HAVE_STRUCT_MTD_WRITE_REQ
printf("ioctl(-1, MIXER_READ(13) or OTPSELECT, [MTD_OTP_OFF])"