Skip to contentSkip to conversation

ocfs2: fix shift left overflow

PATCH New Joseph Qi 2 participants 5 messages Jul 27, 2015 – Jul 29, 2015 OCFS2

lore
Share & tools
lore

Joseph Qi

author
#0 lore raw

PATCH 1/1 ocfs2: fix shift left overflow

cluster pos is defined as u32, when calculate corresponding sector it should be converted to u64 first, otherwise it may overflow.

---
 fs/ocfs2/aops.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
fs/ocfs2/aops.c +2 -2
index b57f0c7..b36dcad 100644
@@ -688,7 +688,7 @@ static int ocfs2_direct_IO_zero_extend(struct ocfs2_super *osb,
 
 	if (p_cpos && !(ext_flags & OCFS2_EXT_UNWRITTEN)) {
 		u64 s = i_size_read(inode);
-		sector_t sector = (p_cpos << (osb->s_clustersize_bits - 9)) +
+		sector_t sector = ((u64)p_cpos << (osb->s_clustersize_bits - 9)) +
 			(do_div(s, osb->s_clustersize) >> 9);
 
 		ret = blkdev_issue_zeroout(osb->sb->s_bdev, sector,
@@ -916,7 +916,7 @@ static ssize_t ocfs2_direct_IO_write(struct kiocb *iocb,
 		BUG_ON(!p_cpos || (ext_flags & OCFS2_EXT_UNWRITTEN));
 
 		ret = blkdev_issue_zeroout(osb->sb->s_bdev,
-				p_cpos << (osb->s_clustersize_bits - 9),
+				(u64)p_cpos << (osb->s_clustersize_bits - 9),
 				zero_len_head >> 9, GFP_NOFS, false);
 		if (ret < 0)
 			mlog_errno(ret);
Signature · 1 line
1.8.4.3
#1 lore raw

PATCH 1/1 ocfs2: fix shift left overflow

Quoted 2 lines · On Mon, 27 Jul 2015 11:39:16 +0800 Joseph Qi <[email protected]> wrote:

cluster pos is defined as u32, when calculate corresponding sector it should be converted to u64 first, otherwise it may overflow.

What are the runtime effects of this change?

Please always include this info when fixing bugs so that others can work out which kernel version(s) should be patched.

author
#2 lore raw

PATCH 1/1 ocfs2: fix shift left overflow

Quoted 7 lines · Andrew Morton
Quoted 2 lines · On Mon, 27 Jul 2015 11:39:16 +0800 Joseph Qi <[email protected]> wrote:

cluster pos is defined as u32, when calculate corresponding sector it should be converted to u64 first, otherwise it may overflow.

What are the runtime effects of this change?

The issue is when using large volume, for example, 9T volume with 2T already used, frequently create small files with O_DIRECT and the IO is not cluster aligned, it may clear sectors in the wrong place.

Quoted 3 lines

Please always include this info when fixing bugs so that others can work out which kernel version(s) should be patched.

Sorry, I'll bear it in mind.

Quoted 2 lines
#3 lore raw

PATCH 1/1 ocfs2: fix shift left overflow

Quoted 11 lines · On Wed, 29 Jul 2015 08:30:59 +0800 Joseph Qi <[email protected]> wrote:
Quoted 7 lines · Andrew Morton
Quoted 2 lines · On Mon, 27 Jul 2015 11:39:16 +0800 Joseph Qi <[email protected]> wrote:

cluster pos is defined as u32, when calculate corresponding sector it should be converted to u64 first, otherwise it may overflow.

What are the runtime effects of this change?

The issue is when using large volume, for example, 9T volume with 2T already used, frequently create small files with O_DIRECT and the IO is not cluster aligned, it may clear sectors in the wrong place.

You mean it corrupts the filesystem?

So this wants to be merged asap and backported as far as possible?

author
#4 lore raw

PATCH 1/1 ocfs2: fix shift left overflow

Quoted 10 lines · Andrew Morton
Quoted 8 lines · On Wed, 29 Jul 2015 08:30:59 +0800 Joseph Qi <[email protected]> wrote:
Quoted 7 lines · Andrew Morton
Quoted 2 lines · On Mon, 27 Jul 2015 11:39:16 +0800 Joseph Qi <[email protected]> wrote:

cluster pos is defined as u32, when calculate corresponding sector it should be converted to u64 first, otherwise it may overflow.

What are the runtime effects of this change?

Quoted 8 lines
Quoted 3 lines

The issue is when using large volume, for example, 9T volume with 2T already used, frequently create small files with O_DIRECT and the IO is not cluster aligned, it may clear sectors in the wrong place.

You mean it corrupts the filesystem?

So this wants to be merged asap and backported as far as possible?

Yes, it only affects kernel 4.0+.

Quoted 1 line