git: 1a918f430d0d - stable/13 - hidmap: Implement forbidden flag for hidmap item.

Vladimir Kondratyev wulf at FreeBSD.org
Tue Sep 21 23:43:45 UTC 2021


The branch stable/13 has been updated by wulf:

URL: https://cgit.FreeBSD.org/src/commit/?id=1a918f430d0d82fd25eebccb4b47f13d6f9715e3

commit 1a918f430d0d82fd25eebccb4b47f13d6f9715e3
Author:     Vladimir Kondratyev <wulf at FreeBSD.org>
AuthorDate: 2021-09-02 19:31:51 +0000
Commit:     Vladimir Kondratyev <wulf at FreeBSD.org>
CommitDate: 2021-09-21 23:40:18 +0000

    hidmap: Implement forbidden flag for hidmap item.
    
    If HID usage is mapped to evdev event by hidmap item marked with this
    flag than entire driver attachment is blocked.
    
    (cherry picked from commit cded1fdb3763ba1f0f3663e605a5e63089dc8e22)
---
 sys/dev/hid/hidmap.c | 5 ++++-
 sys/dev/hid/hidmap.h | 3 ++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/sys/dev/hid/hidmap.c b/sys/dev/hid/hidmap.c
index 46e789fa7cec..c46930214323 100644
--- a/sys/dev/hid/hidmap.c
+++ b/sys/dev/hid/hidmap.c
@@ -481,7 +481,10 @@ hidmap_probe_hid_descr(void *d_ptr, hid_size_t d_len, uint8_t tlc_index,
 	/* Check that all mandatory usages are present in report descriptor */
 	if (items != 0) {
 		for (i = 0; i < nitems_map; i++) {
-			if (map[i].required && isclr(caps, i)) {
+			KASSERT(!(map[i].required && map[i].forbidden),
+			    ("both required & forbidden item flags are set"));
+			if ((map[i].required && isclr(caps, i)) ||
+			    (map[i].forbidden && isset(caps, i))) {
 				items = 0;
 				break;
 			}
diff --git a/sys/dev/hid/hidmap.h b/sys/dev/hid/hidmap.h
index 6ac23b3dc4ee..f5ce10069e1a 100644
--- a/sys/dev/hid/hidmap.h
+++ b/sys/dev/hid/hidmap.h
@@ -98,7 +98,8 @@ struct hidmap_item {
 	bool			has_cb:1;
 	bool			final_cb:1;
 	bool			invert_value:1;
-	u_int			reserved:10;
+	bool			forbidden:1;	/* Forbidden by driver */
+	u_int			reserved:9;
 };
 
 #define	HIDMAP_ANY(_page, _usage, _type, _code)				\


More information about the dev-commits-src-all mailing list