From: Jan Janssen Date: Sun, 15 Oct 2023 09:32:32 +0000 (+0200) Subject: boot: Fix OOB reads in conf/osrel parsing X-Git-Tag: v255-rc1~239 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ce851ab991ecae805d42445de509652b9aadbd9;p=thirdparty%2Fsystemd.git boot: Fix OOB reads in conf/osrel parsing --- diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c index acb891a98e7..4144c0d4979 100644 --- a/src/boot/efi/efi-string.c +++ b/src/boot/efi/efi-string.c @@ -444,7 +444,7 @@ char *line_get_key_value(char *s, const char *sep, size_t *pos, char **ret_key, line[linelen] = '\0'; /* remove leading whitespace */ - while (strchr8(" \t", *line)) { + while (linelen > 0 && strchr8(" \t", *line)) { line++; linelen--; } diff --git a/src/boot/efi/test-efi-string.c b/src/boot/efi/test-efi-string.c index f7964e03787..b71a0c34025 100644 --- a/src/boot/efi/test-efi-string.c +++ b/src/boot/efi/test-efi-string.c @@ -520,7 +520,9 @@ TEST(line_get_key_value) { char *key, *value; assert_se(!line_get_key_value((char[]){ "" }, "=", &pos, &key, &value)); + assert_se(!line_get_key_value((char[]){ "\t" }, " \t", &pos, &key, &value)); + pos = 0; assert_se(line_get_key_value(s1, "=", &pos, &key, &value)); assert_se(streq8(key, "key")); assert_se(streq8(value, "value"));