[linux-cifs-client] Re: [PATCH] cifs: fix pointer initialization
and checks in cifs_follow_symlink (try #3)
Jeff Moyer
jmoyer at redhat.com
Tue May 19 14:12:44 GMT 2009
Jeff Layton <jlayton at redhat.com> writes:
> On Tue, 19 May 2009 09:42:02 -0400
> Jeff Moyer <jmoyer at redhat.com> wrote:
>
>> Well, you've sacrificed your logging for this. See below.
>>
>> > index ea9d11e..737a386 100644
>> > --- a/fs/cifs/link.c
>> > +++ b/fs/cifs/link.c
>> > @@ -107,48 +107,48 @@ void *
>> > cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
>> > {
>> > struct inode *inode = direntry->d_inode;
>> > - int rc = -EACCES;
>> > + int rc = -ENOMEM;
>> > int xid;
>> > char *full_path = NULL;
>> > - char *target_path = ERR_PTR(-ENOMEM);
>> > - struct cifs_sb_info *cifs_sb;
>> > - struct cifsTconInfo *pTcon;
>> > + char *target_path = NULL;
>> > + struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
>> > + struct cifsTconInfo *tcon = cifs_sb->tcon;
>> >
>> > xid = GetXid();
>> >
>> > - full_path = build_path_from_dentry(direntry);
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> > -
>> > - if (!full_path)
>> > - goto out;
>> > -
>> > cFYI(1, ("Full path: %s inode = 0x%p", full_path, inode));
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>> Aside from that, the patch looks good.
>>
>> Cheers,
>> Jeff
>
> Good catch.
>
> There's still logging done on the function entry and exit (via the
> GetXid/FreeXid side effects), so it's not a complete loss. How's this
> instead? The only difference is that I moved the cFYI statement down.
>
> --
> Jeff Layton <jlayton at redhat.com>
> From 5b8001cf69914faa6338074a45a1285f2761a7d8 Mon Sep 17 00:00:00 2001
> From: Jeff Layton <jlayton at redhat.com>
> Date: Tue, 19 May 2009 09:57:03 -0400
> Subject: [PATCH] cifs: fix pointer initialization and checks in cifs_follow_symlink (try #4)
>
> This is the third respin of the patch posted yesterday to fix the error
> handling in cifs_follow_symlink. It also includes a fix for a bogus NULL
> pointer check in CIFSSMBQueryUnixSymLink that Jeff Moyer spotted.
>
> It's possible for CIFSSMBQueryUnixSymLink to return without setting
> target_path to a valid pointer. If that happens then the current value
> to which we're initializing this pointer could cause an oops when it's
> kfree'd.
>
> This patch is a little more comprehensive than the last patches. It
> reorganizes cifs_follow_link a bit for (hopefully) better readability.
> It should also eliminate the uneeded allocation of full_path on servers
> without unix extensions (assuming they can get to this point anyway, of
> which I'm not convinced).
>
> On a side note, I'm not sure I agree with the logic of enabling this
> query even when unix extensions are disabled on the client. It seems
> like that should disable this as well. But, changing that is outside the
> scope of this fix, so I've left it alone for now.
>
> Reported-by: Jeff Moyer <jmoyer at redhat.com>
> Signed-off-by: Jeff Layton <jlayton at redhat.com>
Reviewed-by: Jeff Moyer <jmoyer at redhat.com>
More information about the linux-cifs-client
mailing list