OSDN Git Service

ext2: don't overflow when creating a partition of size 2TiB or larger
authorMartin Poole <mpoole@redhat.com>
Wed, 5 May 2010 16:24:22 +0000 (18:24 +0200)
committerJim Meyering <meyering@redhat.com>
Wed, 5 May 2010 16:24:22 +0000 (18:24 +0200)
Without this patch, mkpartfs would succeed in creating an ext2
partition, but the resulting partition would fail a mkfs.ext2 -f check.
* libparted/fs/ext2/parted_io.c (do_read): Avoid overflow 32-bit
sector count overflow for a partition of size 2TiB or larger.
(do_write): Likewise.
See http://bugzilla.redhat.com/584057#c16 a reproducer.

libparted/fs/ext2/parted_io.c

index 522ea98..f6154d6 100644 (file)
@@ -82,7 +82,9 @@ static int do_read(void *cookie, void *ptr, blk_t block, blk_t num)
 {
        struct my_cookie *monster = cookie;
 
-       return ped_geometry_read(monster->geom, ptr, block << (monster->logsize - 9), num << (monster->logsize - 9));
+       return ped_geometry_read(monster->geom, ptr,
+                                (PedSector) block << (monster->logsize - 9),
+                                (PedSector) num << (monster->logsize - 9));
 }
 
 static int do_set_blocksize(void *cookie, int logsize)
@@ -98,8 +100,8 @@ static int do_write(void *cookie, void *ptr, blk_t block, blk_t num)
        struct my_cookie *monster = cookie;
 
        return ped_geometry_write(monster->geom, ptr,
-                                 block << (monster->logsize - 9),
-                                 num << (monster->logsize - 9));
+                                 (PedSector) block << (monster->logsize - 9),
+                                 (PedSector) num << (monster->logsize - 9));
 }