diff options
author | Stefan Reinauer <stepan@coresystems.de> | 2010-01-16 14:57:32 +0000 |
---|---|---|
committer | Stefan Reinauer <stepan@openbios.org> | 2010-01-16 14:57:32 +0000 |
commit | 42944c3989f27b14a66fa7c75a47c820c8d92119 (patch) | |
tree | 79025ecbbc57b3a3db1f6ea69fa43e49cab38d00 | |
parent | 12ee934cb398f28a29ceef455c98ff3fa2ad956f (diff) | |
download | coreboot-42944c3989f27b14a66fa7c75a47c820c8d92119.tar.xz |
nvramtool: Consider a string with non-printable characters a "bad value".
Otherwise nvramtool -a with random cmos contents can mess up your terminal.
Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5015 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r-- | util/nvramtool/nvramtool.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/util/nvramtool/nvramtool.c b/util/nvramtool/nvramtool.c index f26ca97e8a..89ddf31d71 100644 --- a/util/nvramtool/nvramtool.c +++ b/util/nvramtool/nvramtool.c @@ -672,6 +672,7 @@ static int list_cmos_entry(const cmos_entry_t * e, int show_name) { const cmos_enum_t *p; unsigned long long value; + char *w; /* sanity check CMOS entry */ switch (prepare_cmos_read(e)) { @@ -741,11 +742,26 @@ static int list_cmos_entry(const cmos_entry_t * e, int show_name) break; case CMOS_ENTRY_STRING: - if (show_name) - printf("%s = %s\n", e->name, - (char *)(unsigned long)value); - else - printf("%s\n", (char *)(unsigned long)value); + w = (char *)(unsigned long)value; + while (*w) { + if(!isprint(*w)) { + if (show_name) + printf("# Bad value -> %s\n", e->name); + else + printf("Bad value\n"); + break; + } + w++; + } + + if (!*w) { + + if (show_name) + printf("%s = %s\n", e->name, + (char *)(unsigned long)value); + else + printf("%s\n", (char *)(unsigned long)value); + } free((void *)(unsigned long)value); |