Browse Source

linux-user: fix matching ioctl numbers in print_ioctl

target_cmd in struct IOCTLEntry is a signed int.  Make sure the ioctl cmd
argument in the syscall is converted to int when matching, so that it
works correctly with an ioctl cmd that has bit 31 set.

Signed-off-by: Andreas Schwab <schwab@suse.de>
Reviewed-by: Helge Deller <deller@gmx.de>
Signed-off-by: Helge Deller <deller@gmx.de>
master^2
Andreas Schwab 2 months ago
committed by Helge Deller
parent
commit
e47b1ffff9
  1. 6
      linux-user/strace.c

6
linux-user/strace.c

@ -1021,12 +1021,12 @@ print_syscall_ret_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
int target_size;
for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
if (ie->target_cmd == arg1) {
if (ie->target_cmd == (int)arg1) {
break;
}
}
if (ie->target_cmd == arg1 &&
if (ie->target_cmd == (int)arg1 &&
(ie->access == IOC_R || ie->access == IOC_RW)) {
arg_type = ie->arg_type;
qemu_log(" (");
@ -4359,7 +4359,7 @@ print_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
int target_size;
for (ie = ioctl_entries; ie->target_cmd != 0; ie++) {
if (ie->target_cmd == arg1) {
if (ie->target_cmd == (int)arg1) {
break;
}
}

Loading…
Cancel
Save