소스 검색

efi_loader: disk: Sanitize exposed devices

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>
Alexander Graf 8 년 전
부모
커밋
0812d1a094
1개의 변경된 파일5개의 추가작업 그리고 1개의 파일을 삭제
  1. 5 1
      lib/efi_loader/efi_disk.c

+ 5 - 1
lib/efi_loader/efi_disk.c

@@ -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 */