On Sun, May 06, 2012 at 02:10:25PM +0200, Davidlohr Bueso wrote: > From: Davidlohr Bueso <dave@xxxxxxx> > > When the HDIO_GETGEO ioctl fails on non IRIX/MIPS platforms (ie: > inappropriate ioctl for device) the variables that describe the > geometry are compromissed. One clear example is a division by 0 bug > because the cylinder size is 0 is verify_sgi(): I agree with the change, however I think that more descriptive error message should be printed; see below. > > $> fdisk sgi.img > Welcome to fdisk (util-linux 2.21.392-4b1c). > > ... > > Command (m for help): x > > Expert command (m for help): g > Building a new SGI disklabel. > Partition 11 of type SGI volume and of size 7.9 MiB is set > Floating point exception > > Fix this by simply exiting the program instead of leaving it in a vulnerable state. > > Signed-off-by: Davidlohr Bueso <dave@xxxxxxx> > --- > fdisk/fdisksgilabel.c | 39 ++++++++++++++++++++------------------- > 1 files changed, 20 insertions(+), 19 deletions(-) > > diff --git a/fdisk/fdisksgilabel.c b/fdisk/fdisksgilabel.c > index 822f55d..b61f102 100644 > --- a/fdisk/fdisksgilabel.c > +++ b/fdisk/fdisksgilabel.c > @@ -705,25 +705,26 @@ create_sgilabel(void) > res = blkdev_get_sectors(fd, &llsectors); > > #ifdef HDIO_GETGEO > - if (!ioctl(fd, HDIO_GETGEO, &geometry)) { > - heads = geometry.heads; > - sectors = geometry.sectors; > - if (res == 0) { > - /* the get device size ioctl was successful */ > - unsigned long long llcyls; > - llcyls = llsectors / (heads * sectors * sec_fac); > - cylinders = llcyls; > - if (cylinders != llcyls) /* truncated? */ > - cylinders = ~0; > - } else { > - /* otherwise print error and use truncated version */ > - cylinders = geometry.cylinders; > - fprintf(stderr, > - _("Warning: BLKGETSIZE ioctl failed on %s. " > - "Using geometry cylinder value of %d.\n" > - "This value may be truncated for devices" > - " > 33.8 GB.\n"), disk_device, cylinders); > - } > + if (ioctl(fd, HDIO_GETGEO, &geometry) < 0) > + err(EXIT_FAILURE, _("ioctl failed on %s"), disk_device); s/"ioctl failed..."/"HDIO_GETGEO ioctl failed..." [SNIP] Petr -- Petr Uzel IRC: ptr_uzl @ freenode
Attachment:
pgpFZh23wFCTu.pgp
Description: PGP signature