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

Signed-off-by: Gabriel Laskar <gabr...@lse.epita.fr>
---
 ioctl.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/ioctl.c b/ioctl.c
index 284828a..8741d70 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 {
+               ret = ioctl_decode_command_number(tcp);
+               iop = ioctl_lookup(tcp->u_arg[1]);
+               if (!iop && !ret) {
                                ioctl_print_code(tcp->u_arg[1]);
-                       }
+               } else {
+                       if (ret)
+                               tprints(" or ");
+                       tprints(iop->symbol);
+                       while ((iop = ioctl_next_match(iop)))
+                               tprintf(" or %s", iop->symbol);
                }
                ret = ioctl_decode(tcp);
        } else {
-- 
2.5.0


------------------------------------------------------------------------------
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to