From e167006908542e3643870deadd79051b73730530 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Fri, 27 May 2016 00:41:14 +0000 Subject: [PATCH] evdev.c: fix decoding of struct input_absinfo * evdev.c (abs_ioctl): Use umove_or_printaddr. --- evdev.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/evdev.c b/evdev.c index 2775a718..a138edab 100644 --- a/evdev.c +++ b/evdev.c @@ -144,24 +144,34 @@ ff_effect_ioctl(struct tcb *tcp, long arg) static int abs_ioctl(struct tcb *tcp, long arg) { - struct input_absinfo absinfo; + tprints(", "); - if (!verbose(tcp) || umove(tcp, arg, &absinfo) < 0) - return 0; + struct input_absinfo absinfo; - tprintf(", {value=%" PRIu32 ", minimum=%" PRIu32, - absinfo.value, absinfo.minimum); - if (!abbrev(tcp)) { - tprintf(", maximum=%" PRIu32 ", fuzz=%" PRIu32, - absinfo.maximum, absinfo.fuzz); - tprintf(", flat=%" PRIu32, absinfo.flat); + if (!umove_or_printaddr(tcp, arg, &absinfo)) { + tprintf("{value=%u" + ", minimum=%u, ", + absinfo.value, + absinfo.minimum); + + if (!abbrev(tcp)) { + tprintf("maximum=%u" + ", fuzz=%u" + ", flat=%u", + absinfo.maximum, + absinfo.fuzz, + absinfo.flat); # ifdef HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION - tprintf(", resolution=%" PRIu32, absinfo.resolution); + tprintf(", resolution=%u", + absinfo.resolution); # endif + } else { + tprints("..."); + } + tprints("}"); - } else { - tprints(", ...}"); } + return 1; } -- 2.40.0