Messages in this thread | | | Date | Mon, 1 Jun 2009 22:21:05 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH]:RESEND : Return proper error value on failure of dentry_open |
| |
On Mon, 01 Jun 2009 10:39:58 +0200 Jiri Slaby <jirislaby@gmail.com> wrote:
> On 06/01/2009 10:27 AM, vibi sreenivasan wrote: > > --- a/security/integrity/ima/ima_main.c > > +++ b/security/integrity/ima/ima_main.c > > @@ -201,10 +201,10 @@ int ima_path_check(struct path *path, int mask) > > } > > out: > > mutex_unlock(&iint->mutex); > > - if (file) > > + if (!IS_ERR(file)) > > fput(file); > > No, IS_ERR won't catch NULL and there is 'file = NULL' on the > dentry_open fail path. I still think 'if (file)' is proper condition. > > What bug did you hit?
if (!(iint->flags & IMA_MEASURED)) { struct dentry *dentry = dget(path->dentry); struct vfsmount *mnt = mntget(path->mnt);
file = dentry_open(dentry, mnt, O_RDONLY | O_LARGEFILE, current_cred()); if (IS_ERR(file)) { pr_info("%s dentry_open failed\n", dentry->d_name.name); rc = PTR_ERR(file); file = NULL; goto out; } rc = get_path_measurement(iint, file, dentry->d_name.name); } out: mutex_unlock(&iint->mutex); if (file) fput(file); kref_put(&iint->refcount, iint_free); return 0; }
The handling of `file' looks OK to me.
otoh the function just drops the error code on the floor. Shouldn't it return `rc'?
| |