Skip to content

Commit 95a5543

Browse files
Michael Schmitzaxboe
authored andcommitted
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>
1 parent fc3d092 commit 95a5543

File tree

1 file changed

+34
-34
lines changed

1 file changed

+34
-34
lines changed

include/uapi/linux/affs_hardblocks.h

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,59 +7,59 @@
77
/* Just the needed definitions for the RDB of an Amiga HD. */
88

99
struct RigidDiskBlock {
10-
__u32 rdb_ID;
10+
__be32 rdb_ID;
1111
__be32 rdb_SummedLongs;
12-
__s32 rdb_ChkSum;
13-
__u32 rdb_HostID;
12+
__be32 rdb_ChkSum;
13+
__be32 rdb_HostID;
1414
__be32 rdb_BlockBytes;
15-
__u32 rdb_Flags;
16-
__u32 rdb_BadBlockList;
15+
__be32 rdb_Flags;
16+
__be32 rdb_BadBlockList;
1717
__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;
3939
char rdb_DiskVendor[8];
4040
char rdb_DiskProduct[16];
4141
char rdb_DiskRevision[4];
4242
char rdb_ControllerVendor[8];
4343
char rdb_ControllerProduct[16];
4444
char rdb_ControllerRevision[4];
45-
__u32 rdb_Reserved5[10];
45+
__be32 rdb_Reserved5[10];
4646
};
4747

4848
#define IDNAME_RIGIDDISK 0x5244534B /* "RDSK" */
4949

5050
struct PartitionBlock {
5151
__be32 pb_ID;
5252
__be32 pb_SummedLongs;
53-
__s32 pb_ChkSum;
54-
__u32 pb_HostID;
53+
__be32 pb_ChkSum;
54+
__be32 pb_HostID;
5555
__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;
5959
__u8 pb_DriveName[32];
60-
__u32 pb_Reserved2[15];
60+
__be32 pb_Reserved2[15];
6161
__be32 pb_Environment[17];
62-
__u32 pb_EReserved[15];
62+
__be32 pb_EReserved[15];
6363
};
6464

6565
#define IDNAME_PARTITION 0x50415254 /* "PART" */

0 commit comments

Comments
 (0)