nvramtool: plug some memory leaks
Change-Id: I8f672b872862d3448ccd2cf28fd3c05b0108ff8b Found-by: Coverity Scan Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/6561 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
parent
42b1b8069c
commit
dd1aab95a6
@ -125,13 +125,16 @@ unsigned long long cmos_read(const cmos_entry_t * e)
|
|||||||
result = 0;
|
result = 0;
|
||||||
|
|
||||||
if (e->config == CMOS_ENTRY_STRING) {
|
if (e->config == CMOS_ENTRY_STRING) {
|
||||||
char *newstring = calloc(1, (length + 7) / 8);
|
int strsz = (length + 7) / 8;
|
||||||
|
char *newstring = alloca(strsz);
|
||||||
unsigned usize = (8 * sizeof(unsigned long long));
|
unsigned usize = (8 * sizeof(unsigned long long));
|
||||||
|
|
||||||
if (!newstring) {
|
if (!newstring) {
|
||||||
out_of_memory();
|
out_of_memory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(newstring, 0, strsz);
|
||||||
|
|
||||||
for (next_bit = 0, bits_left = length;
|
for (next_bit = 0, bits_left = length;
|
||||||
bits_left; next_bit += nr_bits, bits_left -= nr_bits) {
|
bits_left; next_bit += nr_bits, bits_left -= nr_bits) {
|
||||||
nr_bits = cmos_bit_op_strategy(bit + next_bit,
|
nr_bits = cmos_bit_op_strategy(bit + next_bit,
|
||||||
|
@ -95,7 +95,7 @@ int prepare_cmos_write(const cmos_entry_t * e, const char value_str[],
|
|||||||
const cmos_enum_t *q;
|
const cmos_enum_t *q;
|
||||||
unsigned long long out;
|
unsigned long long out;
|
||||||
const char *p;
|
const char *p;
|
||||||
char *memory;
|
char *memory = NULL;
|
||||||
int negative, result, found_one;
|
int negative, result, found_one;
|
||||||
|
|
||||||
if ((result = prepare_cmos_op_common(e)) != OK)
|
if ((result = prepare_cmos_op_common(e)) != OK)
|
||||||
@ -155,8 +155,10 @@ int prepare_cmos_write(const cmos_entry_t * e, const char value_str[],
|
|||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((e->length < (8 * sizeof(*value))) && (out >= (1ull << e->length)))
|
if ((e->length < (8 * sizeof(*value))) && (out >= (1ull << e->length))) {
|
||||||
|
if (memory) free(memory);
|
||||||
return CMOS_OP_VALUE_TOO_WIDE;
|
return CMOS_OP_VALUE_TOO_WIDE;
|
||||||
|
}
|
||||||
|
|
||||||
*value = out;
|
*value = out;
|
||||||
return OK;
|
return OK;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user