]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: pktgen: fix access outside of user given buffer in pktgen_thread_write()
authorPeter Seiderer <ps.report@gmx.net>
Wed, 19 Feb 2025 08:45:27 +0000 (09:45 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Feb 2025 01:24:56 +0000 (17:24 -0800)
Honour the user given buffer size for the strn_len() calls (otherwise
strn_len() will access memory outside of the user given buffer).

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

index f6e35ba035c7ce941b485f4864f6e2e6f5337538..55064713223eca4cfc7354558064d45827ae237f 100644 (file)
@@ -1900,8 +1900,8 @@ static ssize_t pktgen_thread_write(struct file *file,
        i = len;
 
        /* Read variable name */
-
-       len = strn_len(&user_buffer[i], sizeof(name) - 1);
+       max = min(sizeof(name) - 1, count - i);
+       len = strn_len(&user_buffer[i], max);
        if (len < 0)
                return len;
 
@@ -1931,7 +1931,8 @@ static ssize_t pktgen_thread_write(struct file *file,
        if (!strcmp(name, "add_device")) {
                char f[32];
                memset(f, 0, 32);
-               len = strn_len(&user_buffer[i], sizeof(f) - 1);
+               max = min(sizeof(f) - 1, count - i);
+               len = strn_len(&user_buffer[i], max);
                if (len < 0) {
                        ret = len;
                        goto out;