2010-11-10 21:47:04

by Oskar Schirmer

[permalink] [raw]
Subject: [PATCH] cifs: fix another memleak, in cifs_root_iget

cifs_root_iget allocates full_path through
cifs_build_path_to_root, but fails to kfree it upon
cifs_get_inode_info* failure.

Make all failure exit paths traverse clean up
handling at the end of the function.

Signed-off-by: Oskar Schirmer <[email protected]>
Cc: [email protected]
---
fs/cifs/inode.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index ef3a55b..ff7d299 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -881,8 +881,10 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino)
rc = cifs_get_inode_info(&inode, full_path, NULL, sb,
xid, NULL);

- if (!inode)
- return ERR_PTR(rc);
+ if (!inode) {
+ inode = ERR_PTR(rc);
+ goto out;
+ }

#ifdef CONFIG_CIFS_FSCACHE
/* populate tcon->resource_id */
@@ -898,13 +900,11 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino)
inode->i_uid = cifs_sb->mnt_uid;
inode->i_gid = cifs_sb->mnt_gid;
} else if (rc) {
- kfree(full_path);
- _FreeXid(xid);
iget_failed(inode);
- return ERR_PTR(rc);
+ inode = ERR_PTR(rc);
}

-
+out:
kfree(full_path);
/* can not call macro FreeXid here since in a void func
* TODO: This is no longer true
--
1.7.0.4


2010-11-10 22:11:13

by Jesper Juhl

[permalink] [raw]
Subject: Re: [PATCH] cifs: fix another memleak, in cifs_root_iget

On Wed, 10 Nov 2010, Oskar Schirmer wrote:

> cifs_root_iget allocates full_path through
> cifs_build_path_to_root, but fails to kfree it upon
> cifs_get_inode_info* failure.
>
> Make all failure exit paths traverse clean up
> handling at the end of the function.
>
> Signed-off-by: Oskar Schirmer <[email protected]>
> Cc: [email protected]

I've reviewed your patch (although not actually tested it) and your
changes look sane.
So, feel free to add

Reviewed-by: Jesper Juhl <[email protected]>


--
Jesper Juhl <[email protected]> http://www.chaosbits.net/
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please.

2010-11-11 03:40:46

by Steve French

[permalink] [raw]
Subject: Re: [PATCH] cifs: fix another memleak, in cifs_root_iget

Patch is obviously correct. Merged.

On Wed, Nov 10, 2010 at 3:59 PM, Jesper Juhl <[email protected]> wrote:
> On Wed, 10 Nov 2010, Oskar Schirmer wrote:
>
>> cifs_root_iget allocates full_path through
>> cifs_build_path_to_root, but fails to kfree it upon
>> cifs_get_inode_info* failure.
>>
>> Make all failure exit paths traverse clean up
>> handling at the end of the function.
>>
>> Signed-off-by: Oskar Schirmer <[email protected]>
>> Cc: [email protected]
>
> I've reviewed your patch (although not actually tested it) and your
> changes look sane.
> So, feel free to add
>
> Reviewed-by: Jesper Juhl <[email protected]>
>
>
> --
> Jesper Juhl <[email protected]> ? ? ? ? ? ? http://www.chaosbits.net/
> Don't top-post ?http://www.catb.org/~esr/jargon/html/T/top-post.html
> Plain text mails only, please.
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>



--
Thanks,

Steve