From 44d2fc819840d821db8dc965decf1f490ae9cc95 Mon Sep 17 00:00:00 2001 From: Davidlohr Bueso Date: Fri, 4 May 2012 13:35:32 +0200 Subject: [PATCH] fdisk: fix segfault on bsd label Commit 8db8295d824cd0c8cba9385e4635d6e311d69d3f added a regression that causes the program to crash when touching the partition structure (pte) for BSD/OSF labels. Since DOS has its own initialization function, allow BSD labels to use it as well. Steps to reproduce: $> fdisk bsd.img (obtained from blkid regression test files) Command (m for help): p ... I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Segmentation fault Signed-off-by: Davidlohr Bueso --- fdisk/fdisk.c | 2 ++ fdisk/fdiskdoslabel.c | 2 +- fdisk/fdiskdoslabel.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index acc84d1c84..dccaf27fda 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -763,6 +763,8 @@ static int get_boot(int try_only) { return 0; if (check_osf_label()) { + /* intialize partitions for BSD as well */ + dos_init(); if (!valid_part_table_flag(MBRbuffer)) { disklabel = OSF_LABEL; return 0; diff --git a/fdisk/fdiskdoslabel.c b/fdisk/fdiskdoslabel.c index c6e4198dd1..4dfe876dcc 100644 --- a/fdisk/fdiskdoslabel.c +++ b/fdisk/fdiskdoslabel.c @@ -54,7 +54,7 @@ static void clear_partition(struct partition *p) set_nr_sects(p,0); } -static void dos_init(void) +void dos_init(void) { int i; diff --git a/fdisk/fdiskdoslabel.h b/fdisk/fdiskdoslabel.h index f5568dff28..1897b6c88b 100644 --- a/fdisk/fdiskdoslabel.h +++ b/fdisk/fdiskdoslabel.h @@ -48,5 +48,6 @@ extern void dos_set_mbr_id(void); extern void dos_delete_partition(int i); extern int check_dos_label(void); extern int is_dos_partition(int t); +extern void dos_init(void); #endif -- 2.47.3