| From 3ba41621156681afcdbcd624e3191cbc65eb94f4 Mon Sep 17 00:00:00 2001 |
| From: Ben Hutchings <ben@decadent.org.uk> |
| Date: Sat, 23 Apr 2011 18:42:56 +0100 |
| Subject: kconfig: Avoid buffer underrun in choice input |
| |
| From: Ben Hutchings <ben@decadent.org.uk> |
| |
| commit 3ba41621156681afcdbcd624e3191cbc65eb94f4 upstream. |
| |
| Commit 40aee729b350 ('kconfig: fix default value for choice input') |
| fixed some cases where kconfig would select the wrong option from a |
| choice with a single valid option and thus enter an infinite loop. |
| |
| However, this broke the test for user input of the form 'N?', because |
| when kconfig selects the single valid option the input is zero-length |
| and the test will read the byte before the input buffer. If this |
| happens to contain '?' (as it will in a mips build on Debian unstable |
| today) then kconfig again enters an infinite loop. |
| |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| scripts/kconfig/conf.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/scripts/kconfig/conf.c |
| +++ b/scripts/kconfig/conf.c |
| @@ -330,7 +330,7 @@ static int conf_choice(struct menu *menu |
| } |
| if (!child) |
| continue; |
| - if (line[strlen(line) - 1] == '?') { |
| + if (line[0] && line[strlen(line) - 1] == '?') { |
| print_help(child); |
| continue; |
| } |