When a command number was decoded through ioctl_decode_command_number(), there was no check for conflicts with other potential ioctls numbers.
For example: ioctl(fd, MCE_GET_RECORD_LEN, &i); output: ioctl(3, MIXER_READ(1), 0x7ffddce74a58) = 0 instead of: ioctl(3, MIXER_READ(1) or MCE_GET_RECORD_LEN, 0x7ffee435ce08) = 0 * ioctl.c (SYS_FUNC(ioctl)): fix ioctl command number decoding in case of conflicts * tests/ioctl.c: add case for conflicts Signed-off-by: Gabriel Laskar <gabr...@lse.epita.fr> --- v2: * changed the test to be able to handle iop == NULL && ret != NULL * add suggested test ioctl.c | 19 ++++++++++--------- tests/ioctl.c | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ioctl.c b/ioctl.c index 284828a..adce986 100644 --- a/ioctl.c +++ b/ioctl.c @@ -277,15 +277,16 @@ SYS_FUNC(ioctl) if (entering(tcp)) { printfd(tcp, tcp->u_arg[0]); tprints(", "); - if (!ioctl_decode_command_number(tcp)) { - iop = ioctl_lookup(tcp->u_arg[1]); - if (iop) { - tprints(iop->symbol); - while ((iop = ioctl_next_match(iop))) - tprintf(" or %s", iop->symbol); - } else { - ioctl_print_code(tcp->u_arg[1]); - } + ret = ioctl_decode_command_number(tcp); + iop = ioctl_lookup(tcp->u_arg[1]); + if (iop) { + if (ret) + tprints(" or "); + tprints(iop->symbol); + while ((iop = ioctl_next_match(iop))) + tprintf(" or %s", iop->symbol); + } else if (!ret) { + ioctl_print_code(tcp->u_arg[1]); } ret = ioctl_decode(tcp); } else { diff --git a/tests/ioctl.c b/tests/ioctl.c index d2807f5..5f52797 100644 --- a/tests/ioctl.c +++ b/tests/ioctl.c @@ -38,6 +38,7 @@ main(void ) ioctl(-1, HIDIOCGVERSION, &data) != -1 || ioctl(-1, HIDIOCGPHYS(8), &data) != -1 || ioctl(-1, EVIOCGBIT(EV_KEY, 8), &data) != -1 || + ioctl(-1, _IOW('M', 14, int), &data) != -1 || ioctl(-1, _IOR(0xde, 0xad, data), &data) != -1) return 77; -- 2.5.0 ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel