[U-Boot] [PATCH 1/3] dm: pci: Add a 'fall through' comment

For this class it is intended to set up the PCI device, so add a comment to indicate this. This avoids a coverity warning.
Reported-by: Tom Rini trini@konsulko.com
Signed-off-by: Simon Glass sjg@chromium.org ---
drivers/pci/pci_auto.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c index 842eafc..5cfa135 100644 --- a/drivers/pci/pci_auto.c +++ b/drivers/pci/pci_auto.c @@ -375,6 +375,7 @@ int dm_pciauto_config_device(struct udevice *dev)
case PCI_CLASS_PROCESSOR_POWERPC: /* an agent or end-point */ debug("PCI AutoConfig: Found PowerPC device\n"); + /* fall through */
default: dm_pciauto_setup_device(dev, 6, pci_mem, pci_prefetch, pci_io,

Adjust pci_rom_load() to return an indication of whether it allocated memory or not. Adjust the caller to free it. This fixes a memory leak when PCI_VGA_RAM_IMAGE_START is not used.
Reported-by: Tom Rini trini@konsulko.com Signed-off-by: Simon Glass sjg@chromium.org ---
drivers/pci/pci_rom.c | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-)
diff --git a/drivers/pci/pci_rom.c b/drivers/pci/pci_rom.c index 2cb81b66..8c83be6 100644 --- a/drivers/pci/pci_rom.c +++ b/drivers/pci/pci_rom.c @@ -129,14 +129,26 @@ static int pci_rom_probe(struct udevice *dev, struct pci_rom_header **hdrp) return 0; }
-int pci_rom_load(struct pci_rom_header *rom_header, - struct pci_rom_header **ram_headerp) +/** + * pci_rom_load() - Load a ROM image and return a pointer to it + * + * @rom_header: Pointer to ROM image + * @ram_headerp: Returns a pointer to the image in RAM + * @allocedp: Returns true if @ram_headerp was allocated and needs + * to be freed + * @return 0 if OK, -ve on error. Note that @allocedp is set up regardless of + * the error state. Even if this function returns an error, it may have + * allocated memory. + */ +static int pci_rom_load(struct pci_rom_header *rom_header, + struct pci_rom_header **ram_headerp, bool *allocedp) { struct pci_rom_data *rom_data; unsigned int rom_size; unsigned int image_size = 0; void *target;
+ *allocedp = false; do { /* Get next image, until we see an x86 version */ rom_header = (struct pci_rom_header *)((void *)rom_header + @@ -159,6 +171,7 @@ int pci_rom_load(struct pci_rom_header *rom_header, target = (void *)malloc(rom_size); if (!target) return -ENOMEM; + *allocedp = true; #endif if (target != rom_header) { ulong start = get_timer(0); @@ -255,7 +268,7 @@ int dm_pci_run_vga_bios(struct udevice *dev, int (*int15_handler)(void), struct pci_child_platdata *pplat = dev_get_parent_platdata(dev); struct pci_rom_header *rom, *ram; int vesa_mode = -1; - bool emulate; + bool emulate, alloced; int ret;
/* Only execute VGA ROMs */ @@ -272,12 +285,14 @@ int dm_pci_run_vga_bios(struct udevice *dev, int (*int15_handler)(void), if (ret) return ret;
- ret = pci_rom_load(rom, &ram); + ret = pci_rom_load(rom, &ram, &alloced); if (ret) - return ret; + goto err;
- if (!board_should_run_oprom(dev)) - return -ENXIO; + if (!board_should_run_oprom(dev)) { + ret = -ENXIO; + goto err; + }
#if defined(CONFIG_FRAMEBUFFER_SET_VESA_MODE) && \ defined(CONFIG_FRAMEBUFFER_VESA_MODE) @@ -291,7 +306,8 @@ int dm_pci_run_vga_bios(struct udevice *dev, int (*int15_handler)(void), #else if (!(exec_method & PCI_ROM_ALLOW_FALLBACK)) { printf("BIOS native execution is only available on x86\n"); - return -ENOSYS; + ret = -ENOSYS; + goto err; } emulate = true; #endif @@ -301,7 +317,8 @@ int dm_pci_run_vga_bios(struct udevice *dev, int (*int15_handler)(void), #else if (!(exec_method & PCI_ROM_ALLOW_FALLBACK)) { printf("BIOS emulation not available - see CONFIG_BIOSEMU\n"); - return -ENOSYS; + ret = -ENOSYS; + goto err; } emulate = false; #endif @@ -313,12 +330,12 @@ int dm_pci_run_vga_bios(struct udevice *dev, int (*int15_handler)(void),
ret = biosemu_setup(dm_pci_get_bdf(dev), &info); if (ret) - return ret; + goto err; biosemu_set_interrupt_handler(0x15, int15_handler); ret = biosemu_run(dm_pci_get_bdf(dev), (uchar *)ram, 1 << 16, info, true, vesa_mode, &mode_info); if (ret) - return ret; + goto err; #endif } else { #ifdef CONFIG_X86 @@ -329,6 +346,10 @@ int dm_pci_run_vga_bios(struct udevice *dev, int (*int15_handler)(void), #endif } debug("Final vesa mode %#x\n", mode_info.video_mode); + ret = 0;
- return 0; +err: + if (alloced) + free(ram); + return ret; }

On Fri, Jan 15, 2016 at 05:23:22AM -0700, Simon Glass wrote:
Adjust pci_rom_load() to return an indication of whether it allocated memory or not. Adjust the caller to free it. This fixes a memory leak when PCI_VGA_RAM_IMAGE_START is not used.
Reported-by: Tom Rini trini@konsulko.com Signed-off-by: Simon Glass sjg@chromium.org
Reported-by: Coverity (CID: 134194) Reviewed-by: Tom Rini trini@konsulko.com

On Fri, Jan 15, 2016 at 05:23:22AM -0700, Simon Glass wrote:
Adjust pci_rom_load() to return an indication of whether it allocated memory or not. Adjust the caller to free it. This fixes a memory leak when PCI_VGA_RAM_IMAGE_START is not used.
Reported-by: Coverity (CID: 134194) Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

Commit ecc30663 ("Fix board init code to respect the C runtime environment") breaks x86. This was mentioned on https://patchwork.ozlabs.org/patch/548644 but not addressed. Correct it so that x86 boards boot again.
Signed-off-by: Simon Glass sjg@chromium.org ---
common/init/board_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/init/board_init.c b/common/init/board_init.c index d98648e..d17bb29 100644 --- a/common/init/board_init.c +++ b/common/init/board_init.c @@ -128,7 +128,7 @@ void board_init_f_init_reserve(ulong base) *ptr++ = 0; #endif /* set GD unless architecture did it already */ -#if !defined(CONFIG_X86) && !defined(CONFIG_ARM) +#if !defined(CONFIG_ARM) arch_setup_gd(gd_ptr); #endif /* next alloc will be higher by one GD plus 16-byte alignment */

Hi Tom,
On 15 January 2016 at 05:23, Simon Glass sjg@chromium.org wrote:
Commit ecc30663 ("Fix board init code to respect the C runtime environment") breaks x86. This was mentioned on https://patchwork.ozlabs.org/patch/548644 but not addressed. Correct it so that x86 boards boot again.
Signed-off-by: Simon Glass sjg@chromium.org
common/init/board_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/init/board_init.c b/common/init/board_init.c index d98648e..d17bb29 100644 --- a/common/init/board_init.c +++ b/common/init/board_init.c @@ -128,7 +128,7 @@ void board_init_f_init_reserve(ulong base) *ptr++ = 0; #endif /* set GD unless architecture did it already */ -#if !defined(CONFIG_X86) && !defined(CONFIG_ARM) +#if !defined(CONFIG_ARM) arch_setup_gd(gd_ptr); #endif /* next alloc will be higher by one GD plus 16-byte alignment */ -- 2.6.0.rc2.230.g3dd15c0
This is a bug fix to fix x86 booting so can you please take this directly?
Regards, Simon

On Fri, Jan 15, 2016 at 05:23:23AM -0700, Simon Glass wrote:
Commit ecc30663 ("Fix board init code to respect the C runtime environment") breaks x86. This was mentioned on https://patchwork.ozlabs.org/patch/548644 but not addressed. Correct it so that x86 boards boot again.
Signed-off-by: Simon Glass sjg@chromium.org
Reviewed-by: Tom Rini trini@konsulko.com

On Fri, Jan 15, 2016 at 05:23:23AM -0700, Simon Glass wrote:
Commit ecc30663 ("Fix board init code to respect the C runtime environment") breaks x86. This was mentioned on https://patchwork.ozlabs.org/patch/548644 but not addressed. Correct it so that x86 boards boot again.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!

On Fri, Jan 15, 2016 at 05:23:21AM -0700, Simon Glass wrote:
For this class it is intended to set up the PCI device, so add a comment to indicate this. This avoids a coverity warning.
Reported-by: Tom Rini trini@konsulko.com
Signed-off-by: Simon Glass sjg@chromium.org
Reviewed-by: Tom Rini trini@konsulko.com

On Fri, Jan 15, 2016 at 05:23:21AM -0700, Simon Glass wrote:
For this class it is intended to set up the PCI device, so add a comment to indicate this. This avoids a coverity warning.
Reported-by: Coverity (CID: 134194) Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Tom Rini trini@konsulko.com
Applied to u-boot/master, thanks!
participants (2)
-
Simon Glass
-
Tom Rini