]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: pktgen: fix hex32_arg parsing for short reads
authorPeter Seiderer <ps.report@gmx.net>
Wed, 19 Feb 2025 08:45:23 +0000 (09:45 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Feb 2025 01:24:55 +0000 (17:24 -0800)
Fix hex32_arg parsing for short reads (here 7 hex digits instead of the
expected 8), shift result only on successful input parsing.

- before the patch

$ echo "mpls 0000123" > /proc/net/pktgen/lo\@0
$ grep mpls /proc/net/pktgen/lo\@0
     mpls: 00001230
Result: OK: mpls=00001230

- with patch applied

$ echo "mpls 0000123" > /proc/net/pktgen/lo\@0
$ grep mpls /proc/net/pktgen/lo\@0
     mpls: 00000123
Result: OK: mpls=00000123

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250219084527.20488-4-ps.report@gmx.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/pktgen.c

index 4f8ec6c9bed4a3eec7dfc42cb51dc7fe54c8f0c6..28dbbf70e1424b65c2fc07449068aae1e1b5453d 100644 (file)
@@ -753,14 +753,15 @@ static int hex32_arg(const char __user *user_buffer, unsigned long maxlen,
        for (; i < maxlen; i++) {
                int value;
                char c;
-               *num <<= 4;
                if (get_user(c, &user_buffer[i]))
                        return -EFAULT;
                value = hex_to_bin(c);
-               if (value >= 0)
+               if (value >= 0) {
+                       *num <<= 4;
                        *num |= value;
-               else
+               } else {
                        break;
+               }
        }
        return i;
 }