arch/x86: Do not add properties to null DP packages
It doesn't make sense to add a property to a non-existent Device Property package. However, some of these functions will proceed anyway and allocate a new Device Property package, add the property to that, and then immediately leak the new package. This changes all the acpi_dp_add_* functions to ignore a null package. Change-Id: I664dcdbaa6b1b8a3aeb9a0126d622e2ffb736efd Signed-off-by: Jacob Garber <jgarber1@ualberta.ca> Found-by: Coverity CID 135745{6,7}, 138029{2-6} Reviewed-on: https://review.coreboot.org/c/coreboot/+/32971 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
b80d1324d3
commit
c30e59051f
1 changed files with 18 additions and 3 deletions
|
@ -740,6 +740,9 @@ size_t acpi_dp_add_property_list(struct acpi_dp *dp,
|
||||||
const struct acpi_dp *prop;
|
const struct acpi_dp *prop;
|
||||||
size_t i, properties_added = 0;
|
size_t i, properties_added = 0;
|
||||||
|
|
||||||
|
if (!dp || !property_list)
|
||||||
|
return 0;
|
||||||
|
|
||||||
for (i = 0; i < property_count; i++) {
|
for (i = 0; i < property_count; i++) {
|
||||||
prop = &property_list[i];
|
prop = &property_list[i];
|
||||||
|
|
||||||
|
@ -775,6 +778,9 @@ size_t acpi_dp_add_property_list(struct acpi_dp *dp,
|
||||||
struct acpi_dp *acpi_dp_add_integer(struct acpi_dp *dp, const char *name,
|
struct acpi_dp *acpi_dp_add_integer(struct acpi_dp *dp, const char *name,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
|
if (!dp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
struct acpi_dp *new = acpi_dp_new(dp, ACPI_DP_TYPE_INTEGER, name);
|
struct acpi_dp *new = acpi_dp_new(dp, ACPI_DP_TYPE_INTEGER, name);
|
||||||
|
|
||||||
if (new)
|
if (new)
|
||||||
|
@ -786,6 +792,9 @@ struct acpi_dp *acpi_dp_add_integer(struct acpi_dp *dp, const char *name,
|
||||||
struct acpi_dp *acpi_dp_add_string(struct acpi_dp *dp, const char *name,
|
struct acpi_dp *acpi_dp_add_string(struct acpi_dp *dp, const char *name,
|
||||||
const char *string)
|
const char *string)
|
||||||
{
|
{
|
||||||
|
if (!dp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
struct acpi_dp *new = acpi_dp_new(dp, ACPI_DP_TYPE_STRING, name);
|
struct acpi_dp *new = acpi_dp_new(dp, ACPI_DP_TYPE_STRING, name);
|
||||||
|
|
||||||
if (new)
|
if (new)
|
||||||
|
@ -797,6 +806,9 @@ struct acpi_dp *acpi_dp_add_string(struct acpi_dp *dp, const char *name,
|
||||||
struct acpi_dp *acpi_dp_add_reference(struct acpi_dp *dp, const char *name,
|
struct acpi_dp *acpi_dp_add_reference(struct acpi_dp *dp, const char *name,
|
||||||
const char *reference)
|
const char *reference)
|
||||||
{
|
{
|
||||||
|
if (!dp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
struct acpi_dp *new = acpi_dp_new(dp, ACPI_DP_TYPE_REFERENCE, name);
|
struct acpi_dp *new = acpi_dp_new(dp, ACPI_DP_TYPE_REFERENCE, name);
|
||||||
|
|
||||||
if (new)
|
if (new)
|
||||||
|
@ -810,7 +822,7 @@ struct acpi_dp *acpi_dp_add_child(struct acpi_dp *dp, const char *name,
|
||||||
{
|
{
|
||||||
struct acpi_dp *new;
|
struct acpi_dp *new;
|
||||||
|
|
||||||
if (!child || child->type != ACPI_DP_TYPE_TABLE)
|
if (!dp || !child || child->type != ACPI_DP_TYPE_TABLE)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
new = acpi_dp_new(dp, ACPI_DP_TYPE_CHILD, name);
|
new = acpi_dp_new(dp, ACPI_DP_TYPE_CHILD, name);
|
||||||
|
@ -826,7 +838,7 @@ struct acpi_dp *acpi_dp_add_array(struct acpi_dp *dp, struct acpi_dp *array)
|
||||||
{
|
{
|
||||||
struct acpi_dp *new;
|
struct acpi_dp *new;
|
||||||
|
|
||||||
if (!array || array->type != ACPI_DP_TYPE_TABLE)
|
if (!dp || !array || array->type != ACPI_DP_TYPE_TABLE)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
new = acpi_dp_new(dp, ACPI_DP_TYPE_ARRAY, array->name);
|
new = acpi_dp_new(dp, ACPI_DP_TYPE_ARRAY, array->name);
|
||||||
|
@ -842,7 +854,7 @@ struct acpi_dp *acpi_dp_add_integer_array(struct acpi_dp *dp, const char *name,
|
||||||
struct acpi_dp *dp_array;
|
struct acpi_dp *dp_array;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (len <= 0)
|
if (!dp || len <= 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
dp_array = acpi_dp_new_table(name);
|
dp_array = acpi_dp_new_table(name);
|
||||||
|
@ -862,6 +874,9 @@ struct acpi_dp *acpi_dp_add_gpio(struct acpi_dp *dp, const char *name,
|
||||||
const char *ref, int index, int pin,
|
const char *ref, int index, int pin,
|
||||||
int active_low)
|
int active_low)
|
||||||
{
|
{
|
||||||
|
if (!dp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
struct acpi_dp *gpio = acpi_dp_new_table(name);
|
struct acpi_dp *gpio = acpi_dp_new_table(name);
|
||||||
|
|
||||||
if (!gpio)
|
if (!gpio)
|
||||||
|
|
Loading…
Reference in a new issue