]> granicus.if.org Git - strace/commitdiff
tests: add more checks of unknown ioctl command formatting
authorEugene Syromyatnikov <evgsyr@gmail.com>
Sun, 1 Jan 2017 18:59:12 +0000 (21:59 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 4 Jan 2017 13:22:19 +0000 (13:22 +0000)
* tests/ioctl.c (main): Additional check for unknown ioctl command
decoding.
* tests/ioctl_evdev.c (main): Likewise.
* tests/ioctl_dm.c: Include <linux/ioctl.h> for _IOC_SIZE and _IOC_NR.
(main) <dummy_dm_ioctl1, dummy_dm_ioctl2, dummy_dm_arg>: New constants.
Add more checks for unknown command formatting.

tests/ioctl.c
tests/ioctl_dm.c
tests/ioctl_evdev.c

index 6897890a0ed84613ab0af48cfa1eed5281b3b09e..92a3191d1d54945329c608279e89eb1041d38e88 100644 (file)
@@ -88,6 +88,10 @@ main(void )
        printf("ioctl(-1, MIXER_READ(13) or OTPSELECT, [MTD_OTP_OFF])"
               " = -1 EBADF (%m)\n");
 
+       (void) ioctl(-1, _IOC(_IOC_WRITE, 0xde, 0, 0), (kernel_ulong_t) -1ULL);
+       printf("ioctl(-1, _IOC(_IOC_WRITE, 0xde, 0, 0), %#lx)"
+              " = -1 EBADF (%m)\n", -1UL);
+
        (void) ioctl(-1, _IOR(0xde, 0xad, data), &data);
        printf("ioctl(-1, _IOC(_IOC_READ, 0xde, 0xad, 0x8), %p)"
               " = -1 EBADF (%m)\n", &data);
index f4e599623330613e80294607f20ded12e67369cb..08f036c6a2237e23d1ccb2d7cf34b59861efb71e 100644 (file)
@@ -39,6 +39,7 @@
 # include <stddef.h>
 # include <string.h>
 # include <sys/ioctl.h>
+# include <linux/ioctl.h>
 # include <linux/dm-ioctl.h>
 
 # ifndef VERBOSE
@@ -160,6 +161,12 @@ print_dm_target_spec(struct dm_target_spec *ptr, uint32_t id)
 int
 main(void)
 {
+       static kernel_ulong_t dummy_dm_ioctl1 =
+               _IOC(_IOC_READ, DM_IOCTL, 0, 0x1fff);
+       static kernel_ulong_t dummy_dm_ioctl2 =
+               _IOC(_IOC_READ|_IOC_WRITE, DM_IOCTL, 0xed, 0);
+       static kernel_ulong_t dummy_dm_arg =
+               (kernel_ulong_t) 0xbadc0dedda7a1057ULL;
        /* We can't check these properly for now */
        static struct args dummy_check_cmds_nodev[] = {
                { ARG_STR(DM_REMOVE_ALL),    false },
@@ -200,6 +207,16 @@ main(void)
               "-1 EBADF (%m)\n",
               DM_IOCTL, sizeof(int), dm_arg);
 
+       ioctl(-1, dummy_dm_ioctl1, 0);
+       printf("ioctl(-1, _IOC(_IOC_READ, %#x, 0, %#x), 0) = -1 EBADF (%m)\n",
+              DM_IOCTL, (unsigned int) _IOC_SIZE(dummy_dm_ioctl1));
+
+       ioctl(-1, dummy_dm_ioctl2, dummy_dm_arg);
+       printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE, %#x, %#x, 0), %#lx) = "
+              "-1 EBADF (%m)\n",
+              DM_IOCTL, (unsigned int) _IOC_NR(dummy_dm_ioctl2),
+              (unsigned long) dummy_dm_arg);
+
 
        /* DM_VERSION */
        /* Incorrect pointer */
index b21a962d541cdb101e021dd6e52123a0d4d41b66..74aac0d3a4efab11179d07e09538773ad8a6879d 100644 (file)
@@ -274,6 +274,10 @@ main(void)
        printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n",
               "_IOC(_IOC_READ|_IOC_WRITE, 0x45, 0xfe, 0xff)", lmagic);
 
+       ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE, 0x45, 0, 0), lmagic);
+       printf("ioctl(-1, %s, %#lx) = -1 EBADF (%m)\n",
+              "_IOC(_IOC_READ|_IOC_WRITE, 0x45, 0, 0)", lmagic);
+
        puts("+++ exited with 0 +++");
        return 0;
 }