* [PATCH] btrfs: tests: do not touch page cache if root/inode allocation failed
@ 2026-08-11 6:01 Qu Wenruo
2026-08-31 22:13 ` Boris Burkov
0 siblings, 1 reply; 2+ messages in thread
From: Qu Wenruo @ 2026-08-11 6:01 UTC (permalink / raw)
To: linux-btrfs
Inside test_find_delalloc() of extent-io-tests.c, if we failed to
allocate a dummy root or the test inode, we goto out label to clean up.
But at that stage, @inode is still NULL and we will call
process_page_range() to access the page cache of the inode, this will
cause NULL pointer dereference.
This is a very minor bug, as it only affects selftests which are not
compiled in by default for most distros, and very hard to trigger.
Fix it by adding a new out_root_info label to handle root and inode
allocation failure.
This is a pre-existing bug reported by Sashiko while reviewing another
patch.
Link: https://sashiko.dev/#/patchset/cover.1786095309.git.wqu%40suse.com
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/tests/extent-io-tests.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/fs/btrfs/tests/extent-io-tests.c b/fs/btrfs/tests/extent-io-tests.c
index b2aacf846c8b..23459cd4e503 100644
--- a/fs/btrfs/tests/extent-io-tests.c
+++ b/fs/btrfs/tests/extent-io-tests.c
@@ -133,14 +133,14 @@ static int test_find_delalloc(u32 sectorsize, u32 nodesize)
if (IS_ERR(root)) {
test_std_err(TEST_ALLOC_ROOT);
ret = PTR_ERR(root);
- goto out;
+ goto out_root_info;
}
inode = btrfs_new_test_inode();
if (!inode) {
test_std_err(TEST_ALLOC_INODE);
ret = -ENOMEM;
- goto out;
+ goto out_root_info;
}
tmp = &BTRFS_I(inode)->io_tree;
BTRFS_I(inode)->root = root;
@@ -333,6 +333,7 @@ static int test_find_delalloc(u32 sectorsize, u32 nodesize)
process_page_range(inode, 0, total_dirty - 1,
PROCESS_UNLOCK | PROCESS_RELEASE);
iput(inode);
+out_root_info:
btrfs_free_dummy_root(root);
btrfs_free_dummy_fs_info(fs_info);
return ret;
--
2.54.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] btrfs: tests: do not touch page cache if root/inode allocation failed
2026-08-11 6:01 [PATCH] btrfs: tests: do not touch page cache if root/inode allocation failed Qu Wenruo
@ 2026-08-31 22:13 ` Boris Burkov
0 siblings, 0 replies; 2+ messages in thread
From: Boris Burkov @ 2026-08-31 22:13 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Tue, Aug 11, 2026 at 03:31:49PM +0930, Qu Wenruo wrote:
> Inside test_find_delalloc() of extent-io-tests.c, if we failed to
> allocate a dummy root or the test inode, we goto out label to clean up.
>
> But at that stage, @inode is still NULL and we will call
> process_page_range() to access the page cache of the inode, this will
> cause NULL pointer dereference.
>
> This is a very minor bug, as it only affects selftests which are not
> compiled in by default for most distros, and very hard to trigger.
>
> Fix it by adding a new out_root_info label to handle root and inode
> allocation failure.
>
> This is a pre-existing bug reported by Sashiko while reviewing another
> patch.
>
> Link: https://sashiko.dev/#/patchset/cover.1786095309.git.wqu%40suse.com
> Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Boris Burkov <boris@bur.io>
> ---
> fs/btrfs/tests/extent-io-tests.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/tests/extent-io-tests.c b/fs/btrfs/tests/extent-io-tests.c
> index b2aacf846c8b..23459cd4e503 100644
> --- a/fs/btrfs/tests/extent-io-tests.c
> +++ b/fs/btrfs/tests/extent-io-tests.c
> @@ -133,14 +133,14 @@ static int test_find_delalloc(u32 sectorsize, u32 nodesize)
> if (IS_ERR(root)) {
> test_std_err(TEST_ALLOC_ROOT);
> ret = PTR_ERR(root);
> - goto out;
> + goto out_root_info;
> }
>
> inode = btrfs_new_test_inode();
> if (!inode) {
> test_std_err(TEST_ALLOC_INODE);
> ret = -ENOMEM;
> - goto out;
> + goto out_root_info;
> }
> tmp = &BTRFS_I(inode)->io_tree;
> BTRFS_I(inode)->root = root;
> @@ -333,6 +333,7 @@ static int test_find_delalloc(u32 sectorsize, u32 nodesize)
> process_page_range(inode, 0, total_dirty - 1,
> PROCESS_UNLOCK | PROCESS_RELEASE);
> iput(inode);
> +out_root_info:
> btrfs_free_dummy_root(root);
> btrfs_free_dummy_fs_info(fs_info);
> return ret;
> --
> 2.54.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-31 22:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-11 6:01 [PATCH] btrfs: tests: do not touch page cache if root/inode allocation failed Qu Wenruo
2026-08-31 22:13 ` Boris Burkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox