diff options
Diffstat (limited to 'meta/recipes-bsp/grub/files/0004-kern-parser-Fix-resource-leak-if-argc-0.patch')
-rw-r--r-- | meta/recipes-bsp/grub/files/0004-kern-parser-Fix-resource-leak-if-argc-0.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/meta/recipes-bsp/grub/files/0004-kern-parser-Fix-resource-leak-if-argc-0.patch b/meta/recipes-bsp/grub/files/0004-kern-parser-Fix-resource-leak-if-argc-0.patch new file mode 100644 index 0000000000..933416605c --- /dev/null +++ b/meta/recipes-bsp/grub/files/0004-kern-parser-Fix-resource-leak-if-argc-0.patch | |||
@@ -0,0 +1,50 @@ | |||
1 | From 8861fa6226f7229105722ba669465e879b56ee2b Mon Sep 17 00:00:00 2001 | ||
2 | From: Darren Kenny <darren.kenny@oracle.com> | ||
3 | Date: Fri, 22 Jan 2021 12:32:41 +0000 | ||
4 | Subject: [PATCH] kern/parser: Fix resource leak if argc == 0 | ||
5 | |||
6 | After processing the command-line yet arriving at the point where we are | ||
7 | setting argv, we are allocating memory, even if argc == 0, which makes | ||
8 | no sense since we never put anything into the allocated argv. | ||
9 | |||
10 | The solution is to simply return that we've successfully processed the | ||
11 | arguments but that argc == 0, and also ensure that argv is NULL when | ||
12 | we're not allocating anything in it. | ||
13 | |||
14 | There are only 2 callers of this function, and both are handling a zero | ||
15 | value in argc assuming nothing is allocated in argv. | ||
16 | |||
17 | Fixes: CID 96680 | ||
18 | |||
19 | Signed-off-by: Darren Kenny <darren.kenny@oracle.com> | ||
20 | Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> | ||
21 | |||
22 | Upstream-Status: Backport [https://git.savannah.gnu.org/cgit/grub.git/commit/?id=d06161b035dde4769199ad65aa0a587a5920012b] | ||
23 | Signed-off-by: Marta Rybczynska <marta.rybczynska@huawei.com> | ||
24 | --- | ||
25 | grub-core/kern/parser.c | 5 +++++ | ||
26 | 1 file changed, 5 insertions(+) | ||
27 | |||
28 | diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c | ||
29 | index 619db31..d1cf061 100644 | ||
30 | --- a/grub-core/kern/parser.c | ||
31 | +++ b/grub-core/kern/parser.c | ||
32 | @@ -146,6 +146,7 @@ grub_parser_split_cmdline (const char *cmdline, | ||
33 | int i; | ||
34 | |||
35 | *argc = 0; | ||
36 | + *argv = NULL; | ||
37 | do | ||
38 | { | ||
39 | if (!rd || !*rd) | ||
40 | @@ -207,6 +208,10 @@ grub_parser_split_cmdline (const char *cmdline, | ||
41 | (*argc)++; | ||
42 | } | ||
43 | |||
44 | + /* If there are no args, then we're done. */ | ||
45 | + if (!*argc) | ||
46 | + return 0; | ||
47 | + | ||
48 | /* Reserve memory for the return values. */ | ||
49 | args = grub_malloc (bp - buffer); | ||
50 | if (!args) | ||