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:
parent
e0e784a456
commit
e8905312f0
|
@ -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'
|
* 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
|
* and return this value. The I/O privilege level of the currently executing
|
||||||
* process must be set appropriately.
|
* 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)
|
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) {
|
if (e->config == CMOS_ENTRY_STRING) {
|
||||||
int strsz = (length + 7) / 8;
|
int strsz = (length + 7) / 8;
|
||||||
char *newstring = alloca(strsz);
|
char *newstring = malloc(strsz);
|
||||||
unsigned usize = (8 * sizeof(unsigned long long));
|
unsigned usize = (8 * sizeof(unsigned long long));
|
||||||
|
|
||||||
if (!newstring) {
|
if (!newstring) {
|
||||||
|
|
Loading…
Reference in New Issue