efi_loader: Exit in efi_set_bootdev() upon invalid "desc"
authorStefan Roese <sr@denx.de>
Fri, 17 Nov 2017 07:47:09 +0000 (08:47 +0100)
committerAlexander Graf <agraf@suse.de>
Fri, 1 Dec 2017 12:26:10 +0000 (13:26 +0100)
When trying to load an image from a non-existent USB key, U-Boot v2017.11
crashes on my x86 platform:

=> load usb 0:1 03000000 abc
General Protection
EIP: 0010:[<7b59030d>] EFLAGS: 00010286
Original EIP :[<fff4330d>]
...

This used to work in v2017.09. Testing has shown, that this bug was
introduced with patch 95c5553e [efi_loader: refactor boot device and
loaded_image handling].

This patch now checks if a valid "desc" is returned from blk_get_dev()
and only continues when "desc" is available. Resulting in this cmd
output (again):

=> load usb 0:1 03000000 abc
** Bad device usb 0 **

Signed-off-by: Stefan Roese <sr@denx.de>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
cmd/bootefi.c

index 67855ba685072c9f3f5c6b7f6cb9e3cf05aa7400..aa754b75cd0f8b1dbcff8b871b4cadb5cc7b68b0 100644 (file)
@@ -436,6 +436,8 @@ void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
                int part;
 
                desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10));
+               if (!desc)
+                       return;
                part = parse_partnum(devnr);
 
                bootefi_device_path = efi_dp_from_part(desc, part);