2004-04-16 21:42:03

by Dave Jones

[permalink] [raw]
Subject: fix notify_change() potential null dereference.


--- linux-2.6.5/fs/attr.c~ 2004-04-16 22:36:00.000000000 +0100
+++ linux-2.6.5/fs/attr.c 2004-04-16 22:36:37.000000000 +0100
@@ -130,7 +130,7 @@
int notify_change(struct dentry * dentry, struct iattr * attr)
{
struct inode *inode = dentry->d_inode;
- mode_t mode = inode->i_mode;
+ mode_t mode;
int error;
struct timespec now = CURRENT_TIME;
unsigned int ia_valid = attr->ia_valid;
@@ -138,6 +138,7 @@
if (!inode)
BUG();

+ mode = inode->i_mode;
attr->ia_ctime = now;
if (!(ia_valid & ATTR_ATIME_SET))
attr->ia_atime = now;


2004-04-16 21:59:17

by Linus Torvalds

[permalink] [raw]
Subject: Re: fix notify_change() potential null dereference.


I disagree on this one - at least with the message.

The fact is, "inode" can't be NULL. We have a BUG() check for it, but
getting a page fault would be equally effective.

Linus

On Fri, 16 Apr 2004, Dave Jones wrote:
>
> --- linux-2.6.5/fs/attr.c~ 2004-04-16 22:36:00.000000000 +0100
> +++ linux-2.6.5/fs/attr.c 2004-04-16 22:36:37.000000000 +0100
> @@ -130,7 +130,7 @@
> int notify_change(struct dentry * dentry, struct iattr * attr)
> {
> struct inode *inode = dentry->d_inode;
> - mode_t mode = inode->i_mode;
> + mode_t mode;
> int error;
> struct timespec now = CURRENT_TIME;
> unsigned int ia_valid = attr->ia_valid;
> @@ -138,6 +138,7 @@
> if (!inode)
> BUG();
>
> + mode = inode->i_mode;
> attr->ia_ctime = now;
> if (!(ia_valid & ATTR_ATIME_SET))
> attr->ia_atime = now;
>

2004-04-16 22:02:49

by Christoph Hellwig

[permalink] [raw]
Subject: Re: fix notify_change() potential null dereference.

On Fri, Apr 16, 2004 at 10:37:43PM +0100, Dave Jones wrote:
>
> --- linux-2.6.5/fs/attr.c~ 2004-04-16 22:36:00.000000000 +0100
> +++ linux-2.6.5/fs/attr.c 2004-04-16 22:36:37.000000000 +0100
> @@ -130,7 +130,7 @@
> int notify_change(struct dentry * dentry, struct iattr * attr)
> {
> struct inode *inode = dentry->d_inode;
> - mode_t mode = inode->i_mode;
> + mode_t mode;

Passing a NULL argument to notify_change() is invalid.