drivers/usb/hub/acpi.c: Don't use heap for ACPI name

Using malloc would increase the heap use each time this function is
called. Instead allocate a per struct device buffer inside the
chip_info struct.

Found by coverity scan, CID 1488815.

Change-Id: Ie24870b34338624b3bf3a6f420debdd24a68ffbd
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/64338
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Karthik Ramasubramanian <kramasub@google.com>
This commit is contained in:
Arthur Heymans 2022-05-13 17:30:47 +02:00 committed by Felix Held
parent 4d9748f87c
commit 5d8fe86db2
2 changed files with 10 additions and 5 deletions

View File

@ -8,8 +8,11 @@
static const char *usb_hub_acpi_name(const struct device *dev) static const char *usb_hub_acpi_name(const struct device *dev)
{ {
char *name;
const char *pattern; const char *pattern;
struct drivers_usb_hub_config *config = dev->chip_info;
if (config->acpi_name[0] != 0)
return config->acpi_name;
/* USB ACPI driver does not have acpi_name operation defined. Hence return /* USB ACPI driver does not have acpi_name operation defined. Hence return
the ACPI name for both the hub and any downstream facing ports. */ the ACPI name for both the hub and any downstream facing ports. */
@ -26,11 +29,10 @@ static const char *usb_hub_acpi_name(const struct device *dev)
return NULL; return NULL;
} }
name = malloc(ACPI_NAME_BUFFER_SIZE); snprintf(config->acpi_name, sizeof(config->acpi_name), pattern,
snprintf(name, ACPI_NAME_BUFFER_SIZE, pattern, dev->path.usb.port_id + 1); dev->path.usb.port_id + 1);
name[4] = '\0';
return name; return config->acpi_name;
} }
static void usb_hub_add_ports(const struct device *dev) static void usb_hub_add_ports(const struct device *dev)

View File

@ -3,10 +3,13 @@
#ifndef __DRIVERS_USB_HUB_CHIP_H__ #ifndef __DRIVERS_USB_HUB_CHIP_H__
#define __DRIVERS_USB_HUB_CHIP_H__ #define __DRIVERS_USB_HUB_CHIP_H__
#include <acpi/acpi.h>
struct drivers_usb_hub_config { struct drivers_usb_hub_config {
const char *name; const char *name;
const char *desc; const char *desc;
unsigned int port_count; /* Number of Super-speed or High-speed ports */ unsigned int port_count; /* Number of Super-speed or High-speed ports */
char acpi_name[ACPI_NAME_BUFFER_SIZE]; /* Set by the acpi_name ops */
}; };
#endif /* __DRIVERS_USB_HUB_CHIP_H__ */ #endif /* __DRIVERS_USB_HUB_CHIP_H__ */