]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
HID: rate-limit hid_warn to prevent log flooding
authorLi Chen <chenl311@chinatelecom.cn>
Fri, 20 Jun 2025 12:02:31 +0000 (20:02 +0800)
committerJiri Kosina <jkosina@suse.com>
Fri, 20 Jun 2025 13:34:36 +0000 (15:34 +0200)
Syzkaller can create many uhid devices that trigger
repeated warnings like:

  "hid-generic xxxx: unknown main item tag 0x0"

These messages can flood the system log, especially if a crash occurs
(e.g., with a slow UART console, leading to soft lockups). To mitigate
this, convert `hid_warn()` to use `dev_warn_ratelimited()`.

This helps reduce log noise and improves system stability under fuzzing
or faulty device scenarios.

Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-core.c
include/linux/hid.h

index 4a00bd4a4224b2e0c88443f007889f350ca4fac3..ef1f79951d9bdab343128b9050241a32954267ba 100644 (file)
@@ -659,9 +659,9 @@ static int hid_parser_main(struct hid_parser *parser, struct hid_item *item)
        default:
                if (item->tag >= HID_MAIN_ITEM_TAG_RESERVED_MIN &&
                        item->tag <= HID_MAIN_ITEM_TAG_RESERVED_MAX)
-                       hid_warn(parser->device, "reserved main item tag 0x%x\n", item->tag);
+                       hid_warn_ratelimited(parser->device, "reserved main item tag 0x%x\n", item->tag);
                else
-                       hid_warn(parser->device, "unknown main item tag 0x%x\n", item->tag);
+                       hid_warn_ratelimited(parser->device, "unknown main item tag 0x%x\n", item->tag);
                ret = 0;
        }
 
index 568a9d8c749bc5547ff78d5abe6db7bce2f62d2b..7f260e0e20498d5fe865c955b43a8bdec3c1af5b 100644 (file)
@@ -1239,6 +1239,8 @@ void hid_quirks_exit(__u16 bus);
        dev_notice(&(hid)->dev, fmt, ##__VA_ARGS__)
 #define hid_warn(hid, fmt, ...)                                \
        dev_warn(&(hid)->dev, fmt, ##__VA_ARGS__)
+#define hid_warn_ratelimited(hid, fmt, ...)                            \
+       dev_warn_ratelimited(&(hid)->dev, fmt, ##__VA_ARGS__)
 #define hid_info(hid, fmt, ...)                                \
        dev_info(&(hid)->dev, fmt, ##__VA_ARGS__)
 #define hid_dbg(hid, fmt, ...)                         \