]> git.baikalelectronics.ru Git - kernel.git/commitdiff
HID: hid-debug: clean up snprintf() checks in hid_resolv_usage()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 16 Sep 2021 13:21:54 +0000 (16:21 +0300)
committerJiri Kosina <jkosina@suse.cz>
Wed, 22 Sep 2021 09:49:17 +0000 (11:49 +0200)
The snprintf() limits are complicated and slightly wrong when it does:

max(0, HID_DEBUG_BUFSIZE - len - 1)

The "- 1" should not be there.  It means we can't use the last
byte of the buffer.  If we change the first snprintf() to scnprintf()
then we can remove the max().

At the start of the function the strlen(buf) is going always going to
be < HID_DEBUG_BUFSIZE so that is safe.  If it were > HID_DEBUG_BUFSIZE
then that would result in a WARN().

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-debug.c

index e6f18a181eb848f1c5f0ee07f698c5cdc0489f24..7a92e2a04a09d53a79fe48c203fe872b1e82c5bc 100644 (file)
@@ -487,8 +487,7 @@ char *hid_resolv_usage(unsigned usage, struct seq_file *f) {
 
        if (!f) {
                len = strlen(buf);
-               snprintf(buf+len, max(0, HID_DEBUG_BUFSIZE - len), ".");
-               len++;
+               len += scnprintf(buf + len, HID_DEBUG_BUFSIZE - len, ".");
        }
        else {
                seq_printf(f, ".");
@@ -499,7 +498,7 @@ char *hid_resolv_usage(unsigned usage, struct seq_file *f) {
                                if (p->usage == (usage & 0xffff)) {
                                        if (!f)
                                                snprintf(buf + len,
-                                                       max(0,HID_DEBUG_BUFSIZE - len - 1),
+                                                       HID_DEBUG_BUFSIZE - len,
                                                        "%s", p->description);
                                        else
                                                seq_printf(f,
@@ -510,8 +509,8 @@ char *hid_resolv_usage(unsigned usage, struct seq_file *f) {
                        break;
                }
        if (!f)
-               snprintf(buf + len, max(0, HID_DEBUG_BUFSIZE - len - 1),
-                               "%04x", usage & 0xffff);
+               snprintf(buf + len, HID_DEBUG_BUFSIZE - len, "%04x",
+                        usage & 0xffff);
        else
                seq_printf(f, "%04x", usage & 0xffff);
        return buf;