Relax criteria for recognizing GPT formatted media by allowing the
authorkrw <krw@openbsd.org>
Thu, 27 May 2021 14:27:41 +0000 (14:27 +0000)
committerkrw <krw@openbsd.org>
Thu, 27 May 2021 14:27:41 +0000 (14:27 +0000)
EFI GPT partition (0xEE) in the protective MBR to be smaller that the
actual size of the media.

This allows GPT disk images dd'ed onto larger physical media to be
recognized by fdisk(8) and the kernel.

Feedback from kettenis@ on various earlier versions.

sbin/fdisk/mbr.c
sys/kern/subr_disk.c

index f2b6859..6ccbc24 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mbr.c,v 1.71 2021/05/21 19:09:46 krw Exp $    */
+/*     $OpenBSD: mbr.c,v 1.72 2021/05/27 14:27:41 krw Exp $    */
 
 /*
  * Copyright (c) 1997 Tobias Weingartner
@@ -315,7 +315,7 @@ gpt_chk_mbr(struct dos_partition *dp, u_int64_t dsize)
                if (letoh32(dp2->dp_start) != GPTSECTOR)
                        continue;
                psize = letoh32(dp2->dp_size);
-               if (psize == (dsize - 1) || psize == UINT32_MAX) {
+               if (psize <= (dsize - 1) || psize == UINT32_MAX) {
                        efi = i;
                        eficnt++;
                }
index a6d512e..ba1b8c1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: subr_disk.c,v 1.241 2021/05/14 21:11:15 krw Exp $     */
+/*     $OpenBSD: subr_disk.c,v 1.242 2021/05/27 14:27:41 krw Exp $     */
 /*     $NetBSD: subr_disk.c,v 1.17 1996/03/16 23:17:08 christos Exp $  */
 
 /*
@@ -607,7 +607,7 @@ gpt_chk_mbr(struct dos_partition *dp, uint64_t dsize)
                if (letoh32(dp2->dp_start) != GPTSECTOR)
                        continue;
                psize = letoh32(dp2->dp_size);
-               if (psize == (dsize - 1) || psize == UINT32_MAX) {
+               if (psize <= (dsize - 1) || psize == UINT32_MAX) {
                        efi = i;
                        eficnt++;
                }