nvramtool: cmos_read(): Use malloc() instead of alloca()

Fixes crash occurring when 'nvramtool -a' tried to free a prematurely
freed pointer. (Tested on x60)

malloc() is correct because the pointer is accessed outside the calling
function. The pointer is freed in the parent function list_cmos_entry().

Change-Id: I1723f09740657f0f0d9e6954bd6d11c0a3820a42
Signed-off-by: Andrew Engelbrecht <sudoman@ninthfloor.org>
Reviewed-on: http://review.coreboot.org/7620
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Andrew Engelbrecht 2014-12-01 12:22:48 -05:00 committed by Patrick Georgi
parent e0e784a456
commit e8905312f0
1 changed files with 4 additions and 1 deletions

View File

@ -112,6 +112,9 @@ static inline void put_bits(unsigned char value, unsigned bit,
* Read value from nonvolatile RAM at position given by 'bit' and 'length'
* and return this value. The I/O privilege level of the currently executing
* process must be set appropriately.
*
* Returned value is either (unsigned long long), or malloc()'d (char *)
* cast to (unsigned long long)
****************************************************************************/
unsigned long long cmos_read(const cmos_entry_t * e)
{
@ -126,7 +129,7 @@ unsigned long long cmos_read(const cmos_entry_t * e)
if (e->config == CMOS_ENTRY_STRING) {
int strsz = (length + 7) / 8;
char *newstring = alloca(strsz);
char *newstring = malloc(strsz);
unsigned usize = (8 * sizeof(unsigned long long));
if (!newstring) {