Blame SOURCES/0002-evdev-fix-decoding-of-EVIOCGBIT-0.patch

8e169c
From c658eb981bfc302aafe5be6e4118a9c0a3f1735e Mon Sep 17 00:00:00 2001
8e169c
From: Zhibin Li <08826794brmt@gmail.com>
8e169c
Date: Wed, 1 Aug 2018 17:53:57 +0800
8e169c
Subject: [PATCH 02/27] evdev: fix decoding of EVIOCGBIT(0, ...)
8e169c
8e169c
There is a comment in drivers/input/evdev.c which says:
8e169c
/* EV_SYN==0 is EV_CNT, _not_ SYN_CNT, see EVIOCGBIT */
8e169c
8e169c
That is, EVIOCGBIT(0, ...) should return a bit mask with supported
8e169c
event types instead of SYN_* event codes.
8e169c
8e169c
* defs.h (evdev_ev): New prototype.
8e169c
* evdev.c: Include "xlat/evdev_ev.h" and remove "xlat/evdev_sync.h".
8e169c
(bit_ioctl) <case EV_SYN>: Replace EV_SYN with 0, use evdev_ev
8e169c
with XT_SORTED in decode_bitset invocation instead.
8e169c
* ioctl.c: Do not include "xlat/evdev_ev.h".
8e169c
(evdev_decode_number): Print nr == 0x20 as "0" instead of "EV_SYN".
8e169c
* tests/ioctl_evdev.c (main): Use 0 instead of EV_SYN in EVIOCGBIT
8e169c
output.
8e169c
* xlat/evdev_sync.in: Remove.
8e169c
8e169c
Additional changes:
8e169c
	xlat/evdev_ev.h (auto-generated from xlat/evdev_ev.in)
8e169c
8e169c
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
8e169c
Fixes: v4.10~89 "Add decoding for evdev ioctls"
8e169c
---
8e169c
 defs.h              | 1 +
8e169c
 evdev.c             | 8 ++++----
8e169c
 ioctl.c             | 7 ++++---
8e169c
 tests/ioctl_evdev.c | 2 +-
8e169c
 xlat/evdev_sync.in  | 5 -----
8e169c
 5 files changed, 10 insertions(+), 13 deletions(-)
8e169c
 delete mode 100644 xlat/evdev_sync.in
8e169c
8e169c
Index: strace-4.24/defs.h
8e169c
===================================================================
8e169c
--- strace-4.24.orig/defs.h	2020-01-27 17:13:39.441001784 +0100
8e169c
+++ strace-4.24/defs.h	2020-01-27 17:14:03.150778494 +0100
8e169c
@@ -330,6 +330,7 @@
8e169c
 /** Number of elements in evdev_abs array without the terminating record. */
8e169c
 extern const size_t evdev_abs_size;
8e169c
 
8e169c
+extern const struct xlat evdev_ev[];
8e169c
 extern const struct xlat iffflags[];
8e169c
 extern const struct xlat ip_type_of_services[];
8e169c
 extern const struct xlat ipc_private[];
8e169c
Index: strace-4.24/evdev.c
8e169c
===================================================================
8e169c
--- strace-4.24.orig/evdev.c	2020-01-27 17:14:01.715792008 +0100
8e169c
+++ strace-4.24/evdev.c	2020-01-27 17:14:03.151778485 +0100
8e169c
@@ -30,6 +30,7 @@
8e169c
 #include "defs.h"
8e169c
 
8e169c
 #include "xlat/evdev_abs.h"
8e169c
+#include "xlat/evdev_ev.h"
8e169c
 
8e169c
 #ifdef HAVE_LINUX_INPUT_H
8e169c
 
8e169c
@@ -47,7 +48,6 @@
8e169c
 # include "xlat/evdev_relative_axes.h"
8e169c
 # include "xlat/evdev_snd.h"
8e169c
 # include "xlat/evdev_switch.h"
8e169c
-# include "xlat/evdev_sync.h"
8e169c
 
8e169c
 # ifndef SYN_MAX
8e169c
 #  define SYN_MAX 0xf
8e169c
@@ -258,9 +258,9 @@
8e169c
 	  const kernel_ulong_t arg)
8e169c
 {
8e169c
 	switch (ev_nr) {
8e169c
-		case EV_SYN:
8e169c
-			return decode_bitset(tcp, arg, evdev_sync,
8e169c
-					     SYN_MAX, "SYN_???", XT_INDEXED);
8e169c
+		case 0:
8e169c
+			return decode_bitset(tcp, arg, evdev_ev,
8e169c
+					     EV_MAX, "EV_???", XT_SORTED);
8e169c
 		case EV_KEY:
8e169c
 			return decode_bitset(tcp, arg, evdev_keycode,
8e169c
 					     KEY_MAX, "KEY_???", XT_INDEXED);
8e169c
Index: strace-4.24/ioctl.c
8e169c
===================================================================
8e169c
--- strace-4.24.orig/ioctl.c	2020-01-27 17:13:39.441001784 +0100
8e169c
+++ strace-4.24/ioctl.c	2020-01-27 17:14:03.152778475 +0100
8e169c
@@ -33,8 +33,6 @@
8e169c
 #include <linux/ioctl.h>
8e169c
 #include "xlat/ioctl_dirs.h"
8e169c
 
8e169c
-#include "xlat/evdev_ev.h"
8e169c
-
8e169c
 static int
8e169c
 compare(const void *a, const void *b)
8e169c
 {
8e169c
@@ -99,7 +97,10 @@
8e169c
 
8e169c
 	if (nr >= 0x20 && nr <= 0x20 + 0x1f) {
8e169c
 		tprints("EVIOCGBIT(");
8e169c
-		printxval(evdev_ev, nr - 0x20, "EV_???");
8e169c
+		if (nr == 0x20)
8e169c
+			tprintf("0");
8e169c
+		else
8e169c
+			printxval(evdev_ev, nr - 0x20, "EV_???");
8e169c
 		tprintf(", %u)", _IOC_SIZE(code));
8e169c
 		return 1;
8e169c
 	} else if (nr >= 0x40 && nr <= 0x40 + 0x3f) {
8e169c
Index: strace-4.24/tests/ioctl_evdev.c
8e169c
===================================================================
8e169c
--- strace-4.24.orig/tests/ioctl_evdev.c	2020-01-27 17:13:39.441001784 +0100
8e169c
+++ strace-4.24/tests/ioctl_evdev.c	2020-01-27 17:14:03.153778466 +0100
8e169c
@@ -138,7 +138,7 @@
8e169c
 	TEST_NULL_ARG_EX(EVIOCGABS(0x3f), "EVIOCGABS(0x3f /* ABS_??? */)");
8e169c
 	TEST_NULL_ARG_EX(EVIOCSABS(0x3f), "EVIOCSABS(0x3f /* ABS_??? */)");
8e169c
 
8e169c
-	TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0));
8e169c
+	TEST_NULL_ARG(EVIOCGBIT(0, 0));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3));
8e169c
Index: strace-4.24/xlat/evdev_sync.in
8e169c
===================================================================
8e169c
--- strace-4.24.orig/xlat/evdev_sync.in	2020-01-27 17:13:39.441001784 +0100
8e169c
+++ /dev/null	1970-01-01 00:00:00.000000000 +0000
8e169c
@@ -1,5 +0,0 @@
8e169c
-#value_indexed
8e169c
-SYN_REPORT	0
8e169c
-SYN_CONFIG	1
8e169c
-SYN_MT_REPORT	2
8e169c
-SYN_DROPPED	3
8e169c
Index: strace-4.24/xlat/evdev_ev.h
8e169c
===================================================================
8e169c
--- strace-4.24.orig/xlat/evdev_ev.h	2020-01-27 17:13:39.441001784 +0100
8e169c
+++ strace-4.24/xlat/evdev_ev.h	2020-01-27 17:14:03.155778447 +0100
8e169c
@@ -90,13 +90,8 @@
8e169c
 
8e169c
 #ifndef XLAT_MACROS_ONLY
8e169c
 
8e169c
-# ifdef IN_MPERS
8e169c
+# ifndef IN_MPERS
8e169c
 
8e169c
-#  error static const struct xlat evdev_ev in mpers mode
8e169c
-
8e169c
-# else
8e169c
-
8e169c
-static
8e169c
 const struct xlat evdev_ev[] = {
8e169c
  XLAT(EV_SYN),
8e169c
  XLAT(EV_KEY),
8e169c
Index: strace-4.24/tests-m32/ioctl_evdev.c
8e169c
===================================================================
8e169c
--- strace-4.24.orig/tests-m32/ioctl_evdev.c	2018-06-14 13:00:00.000000000 +0200
8e169c
+++ strace-4.24/tests-m32/ioctl_evdev.c	2020-01-27 17:14:28.812536821 +0100
8e169c
@@ -138,7 +138,7 @@
8e169c
 	TEST_NULL_ARG_EX(EVIOCGABS(0x3f), "EVIOCGABS(0x3f /* ABS_??? */)");
8e169c
 	TEST_NULL_ARG_EX(EVIOCSABS(0x3f), "EVIOCSABS(0x3f /* ABS_??? */)");
8e169c
 
8e169c
-	TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0));
8e169c
+	TEST_NULL_ARG(EVIOCGBIT(0, 0));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3));
8e169c
Index: strace-4.24/tests-mx32/ioctl_evdev.c
8e169c
===================================================================
8e169c
--- strace-4.24.orig/tests-mx32/ioctl_evdev.c	2018-06-14 13:00:00.000000000 +0200
8e169c
+++ strace-4.24/tests-mx32/ioctl_evdev.c	2020-01-27 17:14:31.013516093 +0100
8e169c
@@ -138,7 +138,7 @@
8e169c
 	TEST_NULL_ARG_EX(EVIOCGABS(0x3f), "EVIOCGABS(0x3f /* ABS_??? */)");
8e169c
 	TEST_NULL_ARG_EX(EVIOCSABS(0x3f), "EVIOCSABS(0x3f /* ABS_??? */)");
8e169c
 
8e169c
-	TEST_NULL_ARG(EVIOCGBIT(EV_SYN, 0));
8e169c
+	TEST_NULL_ARG(EVIOCGBIT(0, 0));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_KEY, 1));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_REL, 2));
8e169c
 	TEST_NULL_ARG(EVIOCGBIT(EV_ABS, 3));