public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Timo Kamph" <timo@kamph.org>
To: Mingming Cao <cmm@us.ibm.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [BUG]Missing i_sb NULL pointer check in destroy_inode()
Date: Thu, 27 Nov 2003 02:10:19 +0100	[thread overview]
Message-ID: <3FC55D0B.4119.2BDECA65@localhost> (raw)
In-Reply-To: <1069884594.1137.22744.camel@localhost.localdomain>

On 26 Nov 2003 at 14:09, Mingming Cao wrote:
> On Tue, 2003-11-25 at 00:36, Christoph Hellwig wrote:
> > On Mon, Nov 24, 2003 at 11:00:38AM -0800, Mingming Cao wrote:
> > > Hello, Andrew, Marcelo,
> > > 
> > > destroy_inode() dereferences inode->i_sb without checking if it is NULL.
> > > This is inconsistent with its caller: iput() and clear_inode(),  both of
> > > which check inode->i_sb before dereferencing it. Since iput() calls
> > > destroy_inode() after calling file system's .clear_inode method(via
> > > clear_inode()),  some file systems might choose to clear the i_sb in the
> > > .clear_inode super block operation. This results in a crash in
> > > destroy_inode().
> > > 
> > > This issue exists in both 2.6, 2.4 and 2.4 kernel.  A simple fix against
> > > 2.6.0-test9 is included below. 2.4 based fix should be very similar to
> > > this one.  Please take a look and consider include it.  
> > 
> > inode->i_sb can't be NULL.  We should remove all those checks.
> > 
> Sorry I can not agree with this. Maybe the inode->i_sb should not be
> NULL, but the kernel still allows the file system to do so.  In fact
> JFS's diReadSpecial() function clears the inode->i_sb to NULL before
> calling iput().  
> 
> Acutally iput() in 2.6 is missing the check too.(in 2.4 the check is
> there).  Here is the the incremental fix for 2.6 only:

There is a little typo in your patch. The struct member is s_op and not op.
The following patch should be right.

	Timo

diff -urNp linux-2.6.0-test10/fs/inode.c a/fs/inode.c
--- linux-2.6.0-test10/fs/inode.c	2003-11-23 17:33:24.000000000 -0800
+++ a/fs/inode.c	2003-11-26 13:59:34.000000000 -0800
@@ -1084,13 +1084,13 @@ static inline void iput_final(struct ino
 void iput(struct inode *inode)
 {
 	if (inode) {
-		struct super_operations *op = inode->i_sb->s_op;
-
+		struct super_block *sb = inode->i_sb;
+		
 		if (inode->i_state == I_CLEAR)
 			BUG();
 
-		if (op && op->put_inode)
-			op->put_inode(inode);
+		if (sb && sb->s_op && sb->s_op->put_inode)
+			sb->s_op->put_inode(inode);
 
 		if (atomic_dec_and_lock(&inode->i_count, &inode_lock))
 			iput_final(inode);



      reply	other threads:[~2003-11-27  1:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1068045518.10730.266.camel@socrates>
     [not found] ` <20031105181600.GC18278@thunk.org>
     [not found]   ` <1068066524.10726.289.camel@socrates>
     [not found]     ` <20031106033817.GB22081@thunk.org>
     [not found]       ` <1068145132.10735.322.camel@socrates>
     [not found]         ` <20031106123922.Y10197@schatzie.adilger.int>
     [not found]           ` <1068148881.10730.337.camel@socrates>
     [not found]             ` <1068230146.10726.359.camel@socrates>
     [not found]               ` <20031109130826.2b37219d.akpm@osdl.org>
     [not found]                 ` <1068419747.687.28.camel@socrates>
     [not found]                   ` <20031109152936.3a9ffb69.akpm@osdl.org>
2003-11-24 19:00                     ` [BUG]Missing i_sb NULL pointer check in destroy_inode() Mingming Cao
2003-11-24 19:27                       ` Andrew Morton
2003-11-24 20:10                         ` Mingming Cao
2003-11-25  8:36                       ` Christoph Hellwig
2003-11-26 22:09                         ` Mingming Cao
2003-11-27  1:10                           ` Timo Kamph [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=3FC55D0B.4119.2BDECA65@localhost \
    --to=timo@kamph.org \
    --cc=cmm@us.ibm.com \
    --cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox