The mac partitions code creates partitions for unallocated, free
space, and even the partition map itself. Fix by checking the VALID
and ALLOCATED bits. Fix checkpatch trailing whitespace error while at
it.

t2:/# parted /dev/sda print free
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: mac
Disk Flags:
Number  Start   End     Size    File system  Name   Flags
 1      512B    32.8kB  32.3kB               Apple
        32.8kB  99.6MB  99.6MB  Free Space
 2      99.6MB  1000MB  901MB                linux
        1000MB  34.4GB  33.4GB  Free Space

before:
[   67.108282]  sda: [mac] sda1 sda2 sda3 sda4

patched:
[   67.108110]  sda: [mac] sda2

Signed-off-by: René Rebe <[email protected]>
---
 block/partitions/mac.c | 9 ++++++---
 block/partitions/mac.h | 2 ++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/block/partitions/mac.c b/block/partitions/mac.c
index b02530d98629..fc0ba1c8ec6e 100644
--- a/block/partitions/mac.c
+++ b/block/partitions/mac.c
@@ -96,9 +96,12 @@ int mac_partition(struct parsed_partitions *state)
                part = (struct mac_partition *) (data + pos%512);
                if (be16_to_cpu(part->signature) != MAC_PARTITION_MAGIC)
                        break;
+               if ((be32_to_cpu(part->status) & (MAC_STATUS_VALID | 
MAC_STATUS_ALLOCATED)) !=
+                   (MAC_STATUS_VALID | MAC_STATUS_ALLOCATED))
+                       continue;
                put_partition(state, slot,
-                       be32_to_cpu(part->start_block) * (secsize/512),
-                       be32_to_cpu(part->block_count) * (secsize/512));
+                               be32_to_cpu(part->start_block) * (secsize/512),
+                               be32_to_cpu(part->block_count) * (secsize/512));
 
                if (!strncasecmp(part->type, "Linux_RAID", 10))
                        state->parts[slot].flags = ADDPART_FLAG_RAID;
@@ -112,7 +115,7 @@ int mac_partition(struct parsed_partitions *state)
 
                        mac_fix_string(part->processor, 16);
                        mac_fix_string(part->name, 32);
-                       mac_fix_string(part->type, 32);                         
        
+                       mac_fix_string(part->type, 32);
                    
                        if ((be32_to_cpu(part->status) & MAC_STATUS_BOOTABLE)
                            && strcasecmp(part->processor, "powerpc") == 0)
diff --git a/block/partitions/mac.h b/block/partitions/mac.h
index 0e41c9da7532..10828c5d53d2 100644
--- a/block/partitions/mac.h
+++ b/block/partitions/mac.h
@@ -30,6 +30,8 @@ struct mac_partition {
        /* there is more stuff after this that we don't need */
 };
 
+#define MAC_STATUS_VALID       1       /* partition is valid */
+#define MAC_STATUS_ALLOCATED   2       /* partition is allocated */
 #define MAC_STATUS_BOOTABLE    8       /* partition is bootable */
 
 #define MAC_DRIVER_MAGIC       0x4552
-- 
2.52.0


-- 
René Rebe, ExactCODE GmbH, Berlin, Germany
https://exactco.dehttps://t2linux.comhttps://patreon.com/renerebe

Reply via email to