From: Greg Kroah-Hartman Date: Tue, 11 Jul 2023 20:39:08 +0000 (+0200) Subject: 4.14-stable patches X-Git-Tag: v6.1.39~118 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=77fe51b6b197819d26ef4b2b1099e0f9067c4b65;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: block-change-all-__u32-annotations-to-__be32-in-affs_hardblocks.h.patch --- diff --git a/queue-4.14/block-change-all-__u32-annotations-to-__be32-in-affs_hardblocks.h.patch b/queue-4.14/block-change-all-__u32-annotations-to-__be32-in-affs_hardblocks.h.patch new file mode 100644 index 00000000000..ca54e71c9d2 --- /dev/null +++ b/queue-4.14/block-change-all-__u32-annotations-to-__be32-in-affs_hardblocks.h.patch @@ -0,0 +1,142 @@ +From 95a55437dc49fb3342c82e61f5472a71c63d9ed0 Mon Sep 17 00:00:00 2001 +From: Michael Schmitz +Date: Wed, 21 Jun 2023 08:17:24 +1200 +Subject: block: change all __u32 annotations to __be32 in affs_hardblocks.h + +From: Michael Schmitz + +commit 95a55437dc49fb3342c82e61f5472a71c63d9ed0 upstream. + +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 . 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 +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: # 5.2 +Signed-off-by: Michael Schmitz +Reviewed-by: Christoph Hellwig +Reviewed-by: Geert Uytterhoeven +Link: https://lore.kernel.org/r/20230620201725.7020-3-schmitzmic@gmail.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + include/uapi/linux/affs_hardblocks.h | 68 +++++++++++++++++------------------ + 1 file changed, 34 insertions(+), 34 deletions(-) + +--- a/include/uapi/linux/affs_hardblocks.h ++++ b/include/uapi/linux/affs_hardblocks.h +@@ -7,42 +7,42 @@ + /* Just the needed definitions for the RDB of an Amiga HD. */ + + struct RigidDiskBlock { +- __u32 rdb_ID; ++ __be32 rdb_ID; + __be32 rdb_SummedLongs; +- __s32 rdb_ChkSum; +- __u32 rdb_HostID; ++ __be32 rdb_ChkSum; ++ __be32 rdb_HostID; + __be32 rdb_BlockBytes; +- __u32 rdb_Flags; +- __u32 rdb_BadBlockList; ++ __be32 rdb_Flags; ++ __be32 rdb_BadBlockList; + __be32 rdb_PartitionList; +- __u32 rdb_FileSysHeaderList; +- __u32 rdb_DriveInit; +- __u32 rdb_Reserved1[6]; +- __u32 rdb_Cylinders; +- __u32 rdb_Sectors; +- __u32 rdb_Heads; +- __u32 rdb_Interleave; +- __u32 rdb_Park; +- __u32 rdb_Reserved2[3]; +- __u32 rdb_WritePreComp; +- __u32 rdb_ReducedWrite; +- __u32 rdb_StepRate; +- __u32 rdb_Reserved3[5]; +- __u32 rdb_RDBBlocksLo; +- __u32 rdb_RDBBlocksHi; +- __u32 rdb_LoCylinder; +- __u32 rdb_HiCylinder; +- __u32 rdb_CylBlocks; +- __u32 rdb_AutoParkSeconds; +- __u32 rdb_HighRDSKBlock; +- __u32 rdb_Reserved4; ++ __be32 rdb_FileSysHeaderList; ++ __be32 rdb_DriveInit; ++ __be32 rdb_Reserved1[6]; ++ __be32 rdb_Cylinders; ++ __be32 rdb_Sectors; ++ __be32 rdb_Heads; ++ __be32 rdb_Interleave; ++ __be32 rdb_Park; ++ __be32 rdb_Reserved2[3]; ++ __be32 rdb_WritePreComp; ++ __be32 rdb_ReducedWrite; ++ __be32 rdb_StepRate; ++ __be32 rdb_Reserved3[5]; ++ __be32 rdb_RDBBlocksLo; ++ __be32 rdb_RDBBlocksHi; ++ __be32 rdb_LoCylinder; ++ __be32 rdb_HiCylinder; ++ __be32 rdb_CylBlocks; ++ __be32 rdb_AutoParkSeconds; ++ __be32 rdb_HighRDSKBlock; ++ __be32 rdb_Reserved4; + char rdb_DiskVendor[8]; + char rdb_DiskProduct[16]; + char rdb_DiskRevision[4]; + char rdb_ControllerVendor[8]; + char rdb_ControllerProduct[16]; + char rdb_ControllerRevision[4]; +- __u32 rdb_Reserved5[10]; ++ __be32 rdb_Reserved5[10]; + }; + + #define IDNAME_RIGIDDISK 0x5244534B /* "RDSK" */ +@@ -50,16 +50,16 @@ struct RigidDiskBlock { + struct PartitionBlock { + __be32 pb_ID; + __be32 pb_SummedLongs; +- __s32 pb_ChkSum; +- __u32 pb_HostID; ++ __be32 pb_ChkSum; ++ __be32 pb_HostID; + __be32 pb_Next; +- __u32 pb_Flags; +- __u32 pb_Reserved1[2]; +- __u32 pb_DevFlags; ++ __be32 pb_Flags; ++ __be32 pb_Reserved1[2]; ++ __be32 pb_DevFlags; + __u8 pb_DriveName[32]; +- __u32 pb_Reserved2[15]; ++ __be32 pb_Reserved2[15]; + __be32 pb_Environment[17]; +- __u32 pb_EReserved[15]; ++ __be32 pb_EReserved[15]; + }; + + #define IDNAME_PARTITION 0x50415254 /* "PART" */ diff --git a/queue-4.14/series b/queue-4.14/series index b40036cee51..a2d47cb353e 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -53,3 +53,4 @@ modpost-fix-section-mismatch-message-for-r_arm_abs32.patch modpost-fix-section-mismatch-message-for-r_arm_-pc24.patch modpost-fix-off-by-one-in-is_executable_section.patch usb-serial-option-add-lara-r6-01b-pids.patch +block-change-all-__u32-annotations-to-__be32-in-affs_hardblocks.h.patch