Patchwork ext4: Replace BUG_ON() with ext4_error() in move_extents.c

login
register
mail settings
Submitter Akira Fujita
Date Oct. 26, 2012, 8:07 a.m.
Message ID <508A44BC.5040002@rs.jp.nec.com>
Download mbox | patch
Permalink /patch/194386/
State Accepted
Headers show

Comments

Akira Fujita - Oct. 26, 2012, 8:07 a.m.
Hello Dan,

Thanks for reporting,
this patch removes smatch warning.

Signed-off-by: Akria Fujita <a-fujita@rs.jp.nec.com>
---
 fs/ext4/move_extent.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Regards,
Akira Fujita

(2012/10/25 20:35), Dan Carpenter wrote:
> Hello Akira Fujita,
> 
> This is a semi-automatic email about new static checker warnings.
> 
> The patch 2147b1a6a48e: "ext4: Replace BUG_ON() with ext4_error() in
> move_extents.c" from Sep 16, 2009, leads to the following Smatch
> complaint:
> 
> fs/ext4/move_extent.c:693 mext_replace_branches()
> 	 warn: variable dereferenced before check 'dext' (see line 683)
> 
> fs/ext4/move_extent.c
>     682		dext = donor_path[depth].p_ext;
>     683		tmp_dext = *dext;
>                             ^^^^^
> Old dereference.
> 
>     684	
>     685		*err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off,
>     686					      donor_off, count);
>     687		if (*err)
>     688			goto out;
>     689	
>     690		/* Loop for the donor extents */
>     691		while (1) {
>     692			/* The extent for donor must be found. */
>     693			if (!dext) {
>                              ^^^^^
> This check was inside BUG_ON() macro before and so Smatch ignored it on
> the basis that macros do a lot of unneeded checks.  But now it's outside
> the macro it triggers a warning.
> 
>     694				EXT4_ERROR_INODE(donor_inode,
>     695					   "The extent for donor must be found");
> 
> regards,
> dan carpenter
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
index 292daee..17d28a1 100644
--- a/fs/ext4/move_extent.c
+++ b/fs/ext4/move_extent.c
@@ -680,6 +680,10 @@  mext_replace_branches(handle_t *handle, struct inode *orig_inode,

        depth = ext_depth(donor_inode);
        dext = donor_path[depth].p_ext;
+       if (unlikely(!dext)) {
+               *err = -EIO;
+               goto out;
+       }
        tmp_dext = *dext;

        *err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off,