]> git.sur5r.net Git - u-boot/commitdiff
efi_loader: disk: Sanitize exposed devices
authorAlexander Graf <agraf@suse.de>
Fri, 5 Aug 2016 12:51:47 +0000 (14:51 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 8 Aug 2016 17:33:00 +0000 (13:33 -0400)
When a target device is 0 bytes long, there's no point in exposing it to
the user. Let's just skip them.

Also, when an offset is passed into the efi disk creation, we should
remove this offset from the total number of sectors we can handle.

This patch fixes both things.

Signed-off-by: Alexander Graf <agraf@suse.de>
lib/efi_loader/efi_disk.c

index e00a747980aba910f9540ef9cdc13c09b0bc31c0..d8ddcc9b423f0feecd0a7503a481776234b46b43 100644 (file)
@@ -202,6 +202,10 @@ static void efi_disk_add_dev(const char *name,
        struct efi_device_path_file_path *dp;
        int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2);
 
+       /* Don't add empty devices */
+       if (!desc->lba)
+               return;
+
        diskobj = calloc(1, objlen);
 
        /* Fill in object data */
@@ -221,7 +225,7 @@ static void efi_disk_add_dev(const char *name,
        diskobj->media.media_present = 1;
        diskobj->media.block_size = desc->blksz;
        diskobj->media.io_align = desc->blksz;
-       diskobj->media.last_block = desc->lba;
+       diskobj->media.last_block = desc->lba - offset;
        diskobj->ops.media = &diskobj->media;
 
        /* Fill in device path */