libbpf: Fix out-of-bound read
authorNandakumar Edamana <nandakumar@nandakumar.co.in>
Fri, 21 Feb 2025 21:01:11 +0000 (02:31 +0530)
committerAndrii Nakryiko <andrii@kernel.org>
Mon, 24 Feb 2025 21:58:41 +0000 (13:58 -0800)
In `set_kcfg_value_str`, an untrusted string is accessed with the assumption
that it will be at least two characters long due to the presence of checks for
opening and closing quotes. But the check for the closing quote
(value[len - 1] != '"') misses the fact that it could be checking the opening
quote itself in case of an invalid input that consists of just the opening
quote.

This commit adds an explicit check to make sure the string is at least two
characters long.

Signed-off-by: Nandakumar Edamana <nandakumar@nandakumar.co.in>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20250221210110.3182084-1-nandakumar@nandakumar.co.in
tools/lib/bpf/libbpf.c

index 6df258912e1ec81b7602ad92b5374d21fdb70c98..899e98225f3b6e730179029529bfb561a02c39f0 100644 (file)
@@ -2106,7 +2106,7 @@ static int set_kcfg_value_str(struct extern_desc *ext, char *ext_val,
        }
 
        len = strlen(value);
-       if (value[len - 1] != '"') {
+       if (len < 2 || value[len - 1] != '"') {
                pr_warn("extern (kcfg) '%s': invalid string config '%s'\n",
                        ext->name, value);
                return -EINVAL;