Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

block: change all __u32 annotations to __be32 in affs_hardblocks.h

The Amiga partition parser module uses signed int for partition sector
address and count, which will overflow for disks larger than 1 TB.

Use u64 as type for sector address and size to allow using disks up to
2 TB without LBD support, and disks larger than 2 TB with LBD. The RBD
format allows to specify disk sizes up to 2^128 bytes (though native
OS limitations reduce this somewhat, to max 2^68 bytes), so check for
u64 overflow carefully to protect against overflowing sector_t.

This bug was reported originally in 2012, and the fix was created by
the RDB author, Joanne Dow <jdow@earthlink.net>. A patch had been
discussed and reviewed on linux-m68k at that time but never officially
submitted (now resubmitted as patch 1 of this series).

Patch 3 (this series) adds additional error checking and warning
messages. One of the error checks now makes use of the previously
unused rdb_CylBlocks field, which causes a 'sparse' warning
(cast to restricted __be32).

Annotate all 32 bit fields in affs_hardblocks.h as __be32, as the
on-disk format of RDB and partition blocks is always big endian.

Reported-by: Martin Steigerwald <Martin@lichtvoll.de>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=43511
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Message-ID: <201206192146.09327.Martin@lichtvoll.de>
Cc: <stable@vger.kernel.org> # 5.2
Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20230620201725.7020-3-schmitzmic@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Michael Schmitz and committed by
Jens Axboe
95a55437 fc3d092c

+34 -34
+34 -34
include/uapi/linux/affs_hardblocks.h
··· 7 7 /* Just the needed definitions for the RDB of an Amiga HD. */ 8 8 9 9 struct RigidDiskBlock { 10 - __u32 rdb_ID; 10 + __be32 rdb_ID; 11 11 __be32 rdb_SummedLongs; 12 - __s32 rdb_ChkSum; 13 - __u32 rdb_HostID; 12 + __be32 rdb_ChkSum; 13 + __be32 rdb_HostID; 14 14 __be32 rdb_BlockBytes; 15 - __u32 rdb_Flags; 16 - __u32 rdb_BadBlockList; 15 + __be32 rdb_Flags; 16 + __be32 rdb_BadBlockList; 17 17 __be32 rdb_PartitionList; 18 - __u32 rdb_FileSysHeaderList; 19 - __u32 rdb_DriveInit; 20 - __u32 rdb_Reserved1[6]; 21 - __u32 rdb_Cylinders; 22 - __u32 rdb_Sectors; 23 - __u32 rdb_Heads; 24 - __u32 rdb_Interleave; 25 - __u32 rdb_Park; 26 - __u32 rdb_Reserved2[3]; 27 - __u32 rdb_WritePreComp; 28 - __u32 rdb_ReducedWrite; 29 - __u32 rdb_StepRate; 30 - __u32 rdb_Reserved3[5]; 31 - __u32 rdb_RDBBlocksLo; 32 - __u32 rdb_RDBBlocksHi; 33 - __u32 rdb_LoCylinder; 34 - __u32 rdb_HiCylinder; 35 - __u32 rdb_CylBlocks; 36 - __u32 rdb_AutoParkSeconds; 37 - __u32 rdb_HighRDSKBlock; 38 - __u32 rdb_Reserved4; 18 + __be32 rdb_FileSysHeaderList; 19 + __be32 rdb_DriveInit; 20 + __be32 rdb_Reserved1[6]; 21 + __be32 rdb_Cylinders; 22 + __be32 rdb_Sectors; 23 + __be32 rdb_Heads; 24 + __be32 rdb_Interleave; 25 + __be32 rdb_Park; 26 + __be32 rdb_Reserved2[3]; 27 + __be32 rdb_WritePreComp; 28 + __be32 rdb_ReducedWrite; 29 + __be32 rdb_StepRate; 30 + __be32 rdb_Reserved3[5]; 31 + __be32 rdb_RDBBlocksLo; 32 + __be32 rdb_RDBBlocksHi; 33 + __be32 rdb_LoCylinder; 34 + __be32 rdb_HiCylinder; 35 + __be32 rdb_CylBlocks; 36 + __be32 rdb_AutoParkSeconds; 37 + __be32 rdb_HighRDSKBlock; 38 + __be32 rdb_Reserved4; 39 39 char rdb_DiskVendor[8]; 40 40 char rdb_DiskProduct[16]; 41 41 char rdb_DiskRevision[4]; 42 42 char rdb_ControllerVendor[8]; 43 43 char rdb_ControllerProduct[16]; 44 44 char rdb_ControllerRevision[4]; 45 - __u32 rdb_Reserved5[10]; 45 + __be32 rdb_Reserved5[10]; 46 46 }; 47 47 48 48 #define IDNAME_RIGIDDISK 0x5244534B /* "RDSK" */ ··· 50 50 struct PartitionBlock { 51 51 __be32 pb_ID; 52 52 __be32 pb_SummedLongs; 53 - __s32 pb_ChkSum; 54 - __u32 pb_HostID; 53 + __be32 pb_ChkSum; 54 + __be32 pb_HostID; 55 55 __be32 pb_Next; 56 - __u32 pb_Flags; 57 - __u32 pb_Reserved1[2]; 58 - __u32 pb_DevFlags; 56 + __be32 pb_Flags; 57 + __be32 pb_Reserved1[2]; 58 + __be32 pb_DevFlags; 59 59 __u8 pb_DriveName[32]; 60 - __u32 pb_Reserved2[15]; 60 + __be32 pb_Reserved2[15]; 61 61 __be32 pb_Environment[17]; 62 - __u32 pb_EReserved[15]; 62 + __be32 pb_EReserved[15]; 63 63 }; 64 64 65 65 #define IDNAME_PARTITION 0x50415254 /* "PART" */