FAILED: patch "[PATCH] btrfs: fix potential overflow in cluster_pages_for_defrag on" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From a1fbc6750e212c5675a4e48d7f51d44607eb8756 Mon Sep 17 00:00:00 2001
From: "Matthew Wilcox (Oracle)" <[email protected]>
Date: Sun, 4 Oct 2020 19:04:26 +0100
Subject: [PATCH] btrfs: fix potential overflow in cluster_pages_for_defrag on
32bit arch
On 32-bit systems, this shift will overflow for files larger than 4GB as start_index is unsigned long while the calls to btrfs_delalloc_*_space expect u64.
fs/btrfs/ioctl.c +4 -6
@@ -1274,6 +1274,7 @@ static int cluster_pages_for_defrag(struct inode *inode,u64 page_start;u64 page_end;u64 page_cnt; +u64 start = (u64 )start_index <<PAGE_SHIFT ;int ret;int i;int i_done;
@@ -1290,8 +1291,7 @@ static int cluster_pages_for_defrag(struct inode *inode, page_cnt =min_t (u64, (u64 )num_pages, (u64 )file_end - start_index +1 ); ret =btrfs_delalloc_reserve_space (BTRFS_I (inode), &data_reserved, - start_index <<PAGE_SHIFT , - page_cnt <<PAGE_SHIFT ); + start, page_cnt <<PAGE_SHIFT );if (ret)return ret; i_done =0 ;
@@ -1380,8 +1380,7 @@ again:btrfs_mod_outstanding_extents (BTRFS_I (inode),1 );spin_unlock (&BTRFS_I (inode)->lock);btrfs_delalloc_release_space (BTRFS_I (inode), data_reserved, - start_index <<PAGE_SHIFT , - (page_cnt - i_done) <<PAGE_SHIFT , true); + start, (page_cnt - i_done) <<PAGE_SHIFT , true); }
@@ -1408,8 +1407,7 @@ out:put_page (pages[i]); }btrfs_delalloc_release_space (BTRFS_I (inode), data_reserved, - start_index <<PAGE_SHIFT , - page_cnt <<PAGE_SHIFT , true); + start, page_cnt <<PAGE_SHIFT , true);btrfs_delalloc_release_extents (BTRFS_I (inode), page_cnt <<PAGE_SHIFT );extent_changeset_free (data_reserved);return ret;
Quoted 5 lines · On Mon, Nov 16, 2020 at 04:49:26PM +0100, [email protected] wrote:
The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Patch below generated against 5.4.67
Quoted 16 lines
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
a1fbc6750e212c5675a4e48d7f51d44607eb8756Mon Sep 17 00:00:00 2001From: "Matthew Wilcox (Oracle)" <[email protected]>
Date: Sun, 4 Oct 2020 19:04:26 +0100
Subject: [PATCH] btrfs: fix potential overflow incluster_pages_for_defragon
32bit archOn 32-bit systems, this shift will overflow for files larger than 4GB as
start_indexis unsigned long while the calls to btrfs_delalloc_*_space expect u64.
Quoted 7 lines
CC [email protected] # 4.4+Fixes df480633b891 ("btrfs: extent-tree: Switch to new delalloc space reserve and release")Reviewed-by Josef Bacik <[email protected]>Signed-off-by Matthew Wilcox (Oracle) <[email protected]>Reviewed-by David Sterba <[email protected]>[ define the variable instead of repeating the shift ]Signed-off-by David Sterba <[email protected]>
fs/btrfs/ioctl.c +4 -6
@@ -1255,6 +1255,7 @@ static int cluster_pages_for_defrag(struct inode *inode,u64 page_start;u64 page_end;u64 page_cnt; +u64 start = (u64 )start_index <<PAGE_SHIFT ;int ret;int i;int i_done;
@@ -1271,8 +1272,7 @@ static int cluster_pages_for_defrag(struct inode *inode, page_cnt =min_t (u64, (u64 )num_pages, (u64 )file_end - start_index +1 ); ret =btrfs_delalloc_reserve_space (inode, &data_reserved, - start_index <<PAGE_SHIFT , - page_cnt <<PAGE_SHIFT ); + start, page_cnt <<PAGE_SHIFT );if (ret)return ret; i_done =0 ;
@@ -1361,8 +1361,7 @@ static int cluster_pages_for_defrag(struct inode *inode,btrfs_mod_outstanding_extents (BTRFS_I (inode),1 );spin_unlock (&BTRFS_I (inode)->lock);btrfs_delalloc_release_space (inode, data_reserved, - start_index <<PAGE_SHIFT , - (page_cnt - i_done) <<PAGE_SHIFT , true); + start, (page_cnt - i_done) <<PAGE_SHIFT , true); }
@@ -1389,8 +1388,7 @@ static int cluster_pages_for_defrag(struct inode *inode,put_page (pages[i]); }btrfs_delalloc_release_space (inode, data_reserved, - start_index <<PAGE_SHIFT , - page_cnt <<PAGE_SHIFT , true); + start, page_cnt <<PAGE_SHIFT , true);btrfs_delalloc_release_extents (BTRFS_I (inode), page_cnt <<PAGE_SHIFT );extent_changeset_free (data_reserved);return ret;
Greg KH
maintainerQuoted 8 lines · Matthew Wilcox
Quoted 5 lines · On Mon, Nov 16, 2020 at 04:49:26PM +0100, [email protected] wrote:
The patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.Patch below generated against 5.4.67
Thanks, that worked, also seems to work for 4.19.y