fixup! ioctl: decode ioctl type

This commit is contained in:
Eugene Syromyatnikov 2018-09-24 03:54:15 +02:00
parent b4e5977fee
commit d7beb8d758
3 changed files with 61 additions and 7 deletions

13
ioctl.c
View File

@ -72,17 +72,24 @@ ioctl_next_match(const struct_ioctlent *iop)
static const char *
ioctl_type_str(uint8_t ioc_type)
{
static char buf[] = { '\'', ' ', '\'', '\0' };
static char buf[] = { '\'', '\\', '\'', '\'', '\0' };
const char *ret = xlookup(ioc_types, ioc_type);
if (ret)
return ret;
if (ioc_type >= ' ' && ioc_type < 0x7F) {
buf[1] = ioc_type;
if (ioc_type == '\\' || ioc_type == '\'') {
buf[1] = '\\';
buf[2] = ioc_type;
return buf;
}
if (ioc_type >= ' ' && ioc_type < 0x7F) {
buf[1] = '\'';
buf[2] = ioc_type;
return buf + 1;
}
return NULL;
}

View File

@ -102,6 +102,25 @@ main(void)
printf("ioctl(-1, _IOC(_IOC_READ, 0xde, 0xad, 0x8), %p)"
" = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, _IO(0x7f, 0xad), &data);
printf("ioctl(-1, _IOC(_IOC_NONE, APEX_IOCTL_BASE, 0xad, 0), %p)"
" = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, _IOWR(0x7e, 0xad, char[0xf00d]), &data);
printf("ioctl(-1"
", _IOC(_IOC_READ|_IOC_WRITE, '~', 0xad, %#x), %p)"
" = -1 EBADF (%m)\n", 0xf00d & _IOC_SIZEMASK, &data);
(void) ioctl(-1, _IOW('\'', 0xad, char[0xbad]), &data);
printf("ioctl(-1"
", _IOC(_IOC_WRITE, '\\'', 0xad, 0xbad), %p)"
" = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, _IOR('\\', 0xad, char), &data);
printf("ioctl(-1"
", _IOC(_IOC_READ, '\\\\', 0xad, 0x1), %p)"
" = -1 EBADF (%m)\n", &data);
puts("+++ exited with 0 +++");
return 0;
}

View File

@ -2,30 +2,48 @@
/* Those constants that correspond ASCII alphanumeric characters are commented
* out, as there are too much conflicts and it makes more sense to just print
* a character */
/* Each of these two ioctl types have exactly one ioctl command as of now */
/* HYPFS_IOCTL_MAGIC 0x10 */
/* SCLP_CTL_IOCTL_MAGIC 0x10 */
RDMA_IOCTL_MAGIC 0x1B
SNAPSHOT_IOC_MAGIC '3'
VFIO_TYPE ';'
PTP_CLK_MAGIC '='
SYNC_IOC_MAGIC '>'
/* AGPIOC_BASE 'A' */
/* APC_IOC 'A' */
/* CCISS_IOC_MAGIC 'B' */
/* CAP_IOCTL_BASE 'C' */
/* CS_IO_MAGIC 'C' */
/* DASD_IOCTL_LETTER 'D' */
/* FFB_IOCTL 'F' */
/* GIGASET_IOCTL 'G' */ /* 0x47 */
/* GRU_IOCTL_NUM 'G' */
/* ION_IOC_MAGIC 'I' */
/* AMDKFD_IOCTL_BASE 'K' */
/* MPT3_MAGIC_NUMBER 'L' */
/* NVM_IOCTL 'L' */
/* MB862XX_BASE 'M' */
/* MDI_IOCTL 'M' */
/* MTRR_IOCTL_BASE 'M' */
/* ND_IOCTL 'N' */
/* UBI_VOL_IOC_MAGIC 'O' */
/* RFKILL_IOC_MAGIC 'R' */
/* FW_MGMT_IOCTL_BASE 'S' */
/* SEV_IOC_TYPE 'S' */
/* UINPUT_IOCTL_BASE 'U' */
/* SW_SYNC_IOC_MAGIC 'W' */
/* WATCHDOG_IOCTL_BASE 'W' */
/* WMI_IOC 'W' */
/* PACKET_IOCTL_MAGIC 'X' */
/* HP_IOC_MAGIC 'Z' */
/* USBTMC_IOC_NR '[' */ /* 91 */
/* ADF_CTL_IOC_MAGIC 'a' */
/* DMA_BUF_BASE 'b' */
/* CHSC_IOCTL_MAGIC 'c' */
/* CLP_IOCTL_MAGIC 'c' */
/* CM_IOC_MAGIC 'c' */
/* RIO_CM_IOC_MAGIC 'c' */
/* DRM_IOCTL_BASE 'd' */
/* CIO 'd' */
@ -36,20 +54,25 @@ PTP_CLK_MAGIC '='
/* HSI_CHAR_MAGIC 'k' */
/* KYRO_IOC_MAGIC 'k' */
/* SPI_IOC_MAGIC 'k' */
/* MMTIMER_IOCTL_BASE 'm' */
/* RIO_MPORT_DRV_MAGIC 'm' */
/* MEGAIOC_MAGIC 'm' */
/* MGSL_MAGIC_IOC 'm' */
/* MMTIMER_IOCTL_BASE 'm' */
/* MPT_MAGIC_NUMBER 'm' */
/* RIO_MPORT_DRV_MAGIC 'm' */
/* NILFS_IOCTL_IDENT 'n' */
/* UBI_CTRL_IOC_MAGIC 'o' */
/* UBI_IOC_MAGIC 'o' */
/* PH_IOC_MAGIC 'p' */
/* PKEY_IOCTL_MAGIC 'p' */
/* PP_IOCTL 'p' */
/* D7S_IOC 'p' */
/* PI433_IOC_MAGIC 'r' */
/* RSXX_IOC_MAGIC 'r' */
/* ACPI_THERMAL_MAGIC 's' */
/* ZCRYPT_IOCTL_MAGIC 'z' */
APEX_IOCTL_BASE 0x7F
DECNET_IOCTL_BASE 0x89
SOCK_IOC_TYPE 0x89
/* DECNET_IOCTL_BASE 0x89 */
MON_IOC_MAGIC 0x92
AUTOFS_IOCTL 0x93
BTRFS_IOCTL_MAGIC 0x94
@ -60,16 +83,21 @@ GENWQE_IOC_CODE 0xA5
UFFDIO 0xAA
KVMIO 0xAE
VHOST_VIRTIO 0xAF
/* FSL_HV_IOCTL_TYPE 0xAF */
__BT_BMC_IOCTL_MAGIC 0xB1
__ASPEED_LPC_CTRL_IOCTL_MAGIC 0xB2
MMC_BLOCK_MAJOR 0xB3 /* 179 */
DFL_FPGA_MAGIC 0xB6
NSIO 0xB7
CODEMERCS_MAGIC_NUMBER 0xC0
VCHIQ_IOC_MAGIC 0xC4
CXL_MAGIC 0xCA
OCXL_MAGIC 0xCA
/* OCXL_MAGIC 0xCA */
VMC_BASE 0xCC
CIFS_IOCTL_MAGIC 0xCF
MWAVE_MINOR 0xDB /* 219 */
GASKET_IOCTL_BASE 0xDC
CROS_EC_DEV_IOC 0xEC
OTG_IOCTL_MAGIC 0xF0 /* FSL_OTG_MAJOR - 240 */
F2FS_IOCTL_MAGIC 0xF5
DM_IOCTL 0xFD