ext4: add explicit casts when masking cluster sizes
The missing casts can cause the high 64-bits of the physical blocks to be lost. Set up new macros which allows us to make sure the right thing happen, even if at some point we end up supporting larger logical block numbers. Thanks to the Emese Revfy and the PaX security team for reporting this issue. Reported-by: PaX Team <pageexec@freemail.hu> Reported-by: Emese Revfy <re.emese@gmail.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: stable@vger.kernel.org
This commit is contained in:
@@ -268,6 +268,16 @@ struct ext4_io_submit {
|
||||
/* Translate # of blks to # of clusters */
|
||||
#define EXT4_NUM_B2C(sbi, blks) (((blks) + (sbi)->s_cluster_ratio - 1) >> \
|
||||
(sbi)->s_cluster_bits)
|
||||
/* Mask out the low bits to get the starting block of the cluster */
|
||||
#define EXT4_PBLK_CMASK(s, pblk) ((pblk) & \
|
||||
~((ext4_fsblk_t) (s)->s_cluster_ratio - 1))
|
||||
#define EXT4_LBLK_CMASK(s, lblk) ((lblk) & \
|
||||
~((ext4_lblk_t) (s)->s_cluster_ratio - 1))
|
||||
/* Get the cluster offset */
|
||||
#define EXT4_PBLK_COFF(s, pblk) ((pblk) & \
|
||||
((ext4_fsblk_t) (s)->s_cluster_ratio - 1))
|
||||
#define EXT4_LBLK_COFF(s, lblk) ((lblk) & \
|
||||
((ext4_lblk_t) (s)->s_cluster_ratio - 1))
|
||||
|
||||
/*
|
||||
* Structure of a blocks group descriptor
|
||||
|
Reference in New Issue
Block a user