2005-03-24 01:10:51

by Adrian Bunk

[permalink] [raw]
Subject: [2.6 patch] fs/attr.c: fix check after use

This patch fixes a check after use found by the Coverity checker.

Signed-off-by: Adrian Bunk <[email protected]>

--- linux-2.6.12-rc1-mm1-full/fs/attr.c.old 2005-03-23 04:44:40.000000000 +0100
+++ linux-2.6.12-rc1-mm1-full/fs/attr.c 2005-03-23 04:45:40.000000000 +0100
@@ -112,7 +112,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_fs_time(inode->i_sb);
unsigned int ia_valid = attr->ia_valid;
@@ -120,6 +120,8 @@
if (!inode)
BUG();

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


2005-03-24 03:25:43

by Chris Wright

[permalink] [raw]
Subject: Re: [2.6 patch] fs/attr.c: fix check after use

* Adrian Bunk ([email protected]) wrote:
> --- linux-2.6.12-rc1-mm1-full/fs/attr.c.old 2005-03-23 04:44:40.000000000 +0100
> +++ linux-2.6.12-rc1-mm1-full/fs/attr.c 2005-03-23 04:45:40.000000000 +0100
> @@ -112,7 +112,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_fs_time(inode->i_sb);

looks like same issue here too?

> unsigned int ia_valid = attr->ia_valid;
> @@ -120,6 +120,8 @@
> if (!inode)
> BUG();
>
> + mode = inode->i_mode;
> +

2005-03-25 01:58:58

by Adrian Bunk

[permalink] [raw]
Subject: [2.6 patch] fs/attr.c: fix check after use

On Wed, Mar 23, 2005 at 07:18:45PM -0800, Chris Wright wrote:
> * Adrian Bunk ([email protected]) wrote:
> > --- linux-2.6.12-rc1-mm1-full/fs/attr.c.old 2005-03-23 04:44:40.000000000 +0100
> > +++ linux-2.6.12-rc1-mm1-full/fs/attr.c 2005-03-23 04:45:40.000000000 +0100
> > @@ -112,7 +112,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_fs_time(inode->i_sb);
>
> looks like same issue here too?
>...

You forgot to a attach a brown paperbag. ;-)

Corrected patch below.

cu
Adrian


<-- snip -->


This patch fixes a check after use found by the Coverity checker.

Signed-off-by: Adrian Bunk <[email protected]>

--- linux-2.6.12-rc1-mm2-full/fs/attr.c.old 2005-03-25 01:02:32.000000000 +0100
+++ linux-2.6.12-rc1-mm2-full/fs/attr.c 2005-03-25 01:05:18.000000000 +0100
@@ -112,14 +112,17 @@
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_fs_time(inode->i_sb);
+ struct timespec now;
unsigned int ia_valid = attr->ia_valid;

if (!inode)
BUG();

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