From: Francesco Cosoleto Date: Mon, 14 Nov 2011 13:47:18 +0000 (+0100) Subject: fdisk: avoid segfault validating a sgi label (boot/swap not set) X-Git-Tag: v2.21-rc1~185 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=798d621c3bb5a84592c58fb6176d0d91017e1223;p=thirdparty%2Futil-linux.git fdisk: avoid segfault validating a sgi label (boot/swap not set) swap_part or boot_part can be set to -1 when they don't exist. Signed-off-by: Francesco Cosoleto --- diff --git a/fdisk/fdisksgilabel.c b/fdisk/fdisksgilabel.c index 091902ab0a..002688a4cc 100644 --- a/fdisk/fdisksgilabel.c +++ b/fdisk/fdisksgilabel.c @@ -262,13 +262,13 @@ sgi_get_sysid(int i) int sgi_get_bootpartition(void) { - return SSWAP16(sgilabel->boot_part); + return (short) SSWAP16(sgilabel->boot_part); } int sgi_get_swappartition(void) { - return SSWAP16(sgilabel->swap_part); + return (short) SSWAP16(sgilabel->swap_part); } void @@ -513,10 +513,10 @@ verify_sgi(int verbose) * Go for details now */ if (verbose) { - if (!sgi_get_num_sectors(sgi_get_bootpartition())) { + if (sgi_get_bootpartition() < 0 || !sgi_get_num_sectors(sgi_get_bootpartition())) { printf(_("\nThe boot partition does not exist.\n")); } - if (!sgi_get_num_sectors(sgi_get_swappartition())) { + if (sgi_get_swappartition() < 0 || !sgi_get_num_sectors(sgi_get_swappartition())) { printf(_("\nThe swap partition does not exist.\n")); } else { if ((sgi_get_sysid(sgi_get_swappartition()) != SGI_SWAP) diff --git a/fdisk/fdisksgilabel.h b/fdisk/fdisksgilabel.h index 1445fa94a9..1c47bb4742 100644 --- a/fdisk/fdisksgilabel.h +++ b/fdisk/fdisksgilabel.h @@ -63,8 +63,8 @@ struct device_parameter { /* 48 bytes */ typedef struct { unsigned int magic; /* expect SGI_LABEL_MAGIC */ - unsigned short boot_part; /* active boot partition */ - unsigned short swap_part; /* active swap partition */ + short boot_part; /* active boot partition */ + short swap_part; /* active swap partition */ unsigned char boot_file[16]; /* name of the bootfile */ struct device_parameter devparam; /* 1 * 48 bytes */ struct volume_directory { /* 15 * 16 bytes */