All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ted Ts'o <tytso@mit.edu>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: djwong@us.ibm.com, linux-ext4@vger.kernel.org
Subject: Re: ext4: calculate and verify checksums of directory leaf blocks
Date: Mon, 30 Apr 2012 07:40:55 -0400	[thread overview]
Message-ID: <20120430114054.GA28308@thunk.org> (raw)
In-Reply-To: <20120430110535.GA22505@elgon.mountain>

On Mon, Apr 30, 2012 at 02:05:35PM +0300, Dan Carpenter wrote:
> Hello Darrick J. Wong,
> 
> This is a semi-automatic email about new static checker warnings.
> 
> The patch b0336e8d2108: "ext4: calculate and verify checksums of 
> directory leaf blocks" from Apr 29, 2012, leads to the following 
> Smatch complaint:
> 
> fs/ext4/namei.c:1615 add_dirent_to_buf()
> 	 warn: variable dereferenced before check 'inode' (see line 1577)
> 
> fs/ext4/namei.c
>   1575          if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
>                                                ^^^^^^^^^^^
> New dereference.
> 
>   1615		if (inode) {
>                     ^^^^^
> Old check.
> 
>   1616			de->inode = cpu_to_le32(inode->i_ino);
>   1617			ext4_set_de_type(dir->i_sb, de, inode->i_mode);

Dan, thanks for the heads up.

It *looks* to me like old check is unnecessary, and the else clause is
dead code that never executes.  As near as I can tell none of the
callers of add_dirent_to_buf() ever pass in a NULL inode pointer.  And
this tends to be confirmed by the fact that I ran Darrick's patches
through the xfs regression suite, and we never oops over the
dereference at line 1575.

Anyone see something which I missed?  As always, a double check would
be appreciated.  If not, I plan to add the following patch (see
below).

Thanks,

						- Ted

>From dec338b4d903f16c91b588d682f2f6f52cdf795a Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <tytso@mit.edu>
Date: Mon, 30 Apr 2012 07:40:00 -0400
Subject: [PATCH] ext4: remove unnecessary check in add_dirent_to_buf()

None of this function callers ever pass in a NULL inode pointer, so
this check is unnecessary, and the else clause is dead code.  (This
change should make the code coverage people a little happier.  :-)

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
 fs/ext4/namei.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 5861d64..a9fd5f4 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -1612,11 +1612,8 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
 		de = de1;
 	}
 	de->file_type = EXT4_FT_UNKNOWN;
-	if (inode) {
-		de->inode = cpu_to_le32(inode->i_ino);
-		ext4_set_de_type(dir->i_sb, de, inode->i_mode);
-	} else
-		de->inode = 0;
+	de->inode = cpu_to_le32(inode->i_ino);
+	ext4_set_de_type(dir->i_sb, de, inode->i_mode);
 	de->name_len = namelen;
 	memcpy(de->name, name, namelen);
 	/*
-- 
1.7.10.rc3


      reply	other threads:[~2012-04-30 11:41 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-30 11:05 ext4: calculate and verify checksums of directory leaf blocks Dan Carpenter
2012-04-30 11:40 ` Ted Ts'o [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120430114054.GA28308@thunk.org \
    --to=tytso@mit.edu \
    --cc=dan.carpenter@oracle.com \
    --cc=djwong@us.ibm.com \
    --cc=linux-ext4@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.