8e3b457f0f
Fix bug in nilfs2 probe with short partitions (#728949) Fix bug in hfs probe code (#714758) Make pc98 detection depend on specific signatures (#646053)
76 lines
2.0 KiB
Diff
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
|
|
|