parted/parted-3.0-libparted-make-pc98-detection-depend-on-signatures.patch
Brian C. Lane 8e3b457f0f Fix handling of zero-length gpt partitions (#728949)
Fix bug in nilfs2 probe with short partitions (#728949)
Fix bug in hfs probe code (#714758)
Make pc98 detection depend on specific signatures (#646053)
2011-10-07 16:28:22 -07:00

76 lines
2.0 KiB
Diff

From 68ff2e0c7563054e95389c1da5164b3d9c75c52b Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com>
Date: Fri, 7 Oct 2011 10:56:00 -0700
Subject: [PATCH 1/2] libparted: make pc98 detection depend on signatures
(#646053)
pc98 is not a common disk label. Change pc98_probe to only return true
if one of the recognized signatures is present.
Currently these include:
IPL1
Linux 98
GRUB/98
This will prevent false-positive detection on msdos labeled disks
* libparted/labels/pc98.c (pc98_probe): Change to require signature
(pc98_check_ipl_signature): Add more signatures
---
libparted/labels/pc98.c | 32 ++++++++++----------------------
1 files changed, 10 insertions(+), 22 deletions(-)
diff --git a/libparted/labels/pc98.c b/libparted/labels/pc98.c
index 3afa8a2..ea3cf4e 100644
--- a/libparted/labels/pc98.c
+++ b/libparted/labels/pc98.c
@@ -140,7 +140,14 @@ pc98_check_magic (const PC98RawTable *part_table)
static int
pc98_check_ipl_signature (const PC98RawTable *part_table)
{
- return !memcmp (part_table->boot_code + 4, "IPL1", 4);
+ if (memcmp (part_table->boot_code + 4, "IPL1", 4) == 0)
+ return 1;
+ else if (memcmp (part_table->boot_code + 4, "Linux 98", 8) == 0)
+ return 1;
+ else if (memcmp (part_table->boot_code + 4, "GRUB/98 ", 8) == 0)
+ return 1;
+ else
+ return 0;
}
static int
@@ -192,27 +199,8 @@ pc98_probe (const PedDevice *dev)
if (!pc98_check_magic (&part_table))
return 0;
- /* check consistency */
- empty = 1;
- for (p = part_table.partitions;
- p < part_table.partitions + MAX_PART_COUNT;
- p++)
- {
- if (p->mid == 0 && p->sid == 0)
- continue;
- empty = 0;
- if (!check_partition_consistency (dev, p))
- return 0;
- }
-
- /* check boot loader */
- if (pc98_check_ipl_signature (&part_table))
- return 1;
- else if (part_table.boot_code[0]) /* invalid boot loader */
- return 0;
-
- /* Not to mistake msdos disk map for PC-9800's empty disk map */
- if (empty)
+ /* check for boot loader signatures */
+ if (!pc98_check_ipl_signature (&part_table))
return 0;
return 1;
--
1.7.6.4