diff mbox

[v2] cifs: fix memory leak when password is supplied multiple times

Message ID 002c01cfbd28$41411700$c3c34500$@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Namjae Jeon Aug. 21, 2014, 10:11 a.m. UTC
Unlikely but possible. When password is supplied multiple times, we have
to free the previous allocation.

Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com>
---
Changelog
 v2:
  - fix a possible double free reported by kbuild.

 fs/cifs/connect.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

Comments

Steve French Aug. 21, 2014, 5:14 p.m. UTC | #1
merged into cifs-2.6.git

Of the 7 patch series, only the ntlmv2 security fix has not been
merged (would like additional information/thoughts on this - perhaps
some experiments with windows to see what the time threshold is)

On Thu, Aug 21, 2014 at 5:11 AM, Namjae Jeon <namjae.jeon@samsung.com> wrote:
> Unlikely but possible. When password is supplied multiple times, we have
> to free the previous allocation.
>
> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
> Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com>
> ---
> Changelog
>  v2:
>   - fix a possible double free reported by kbuild.
>
>  fs/cifs/connect.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index b4b6d10..8a9fded 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -1587,6 +1587,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                         tmp_end++;
>                         if (!(tmp_end < end && tmp_end[1] == delim)) {
>                                 /* No it is not. Set the password to NULL */
> +                               kfree(vol->password);
>                                 vol->password = NULL;
>                                 break;
>                         }
> @@ -1624,6 +1625,7 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
>                                         options = end;
>                         }
>
> +                       kfree(vol->password);
>                         /* Now build new password string */
>                         temp_len = strlen(value);
>                         vol->password = kzalloc(temp_len+1, GFP_KERNEL);
> --
> 1.7.7
>
diff mbox

Patch

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index b4b6d10..8a9fded 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -1587,6 +1587,7 @@  cifs_parse_mount_options(const char *mountdata, const char *devname,
 			tmp_end++;
 			if (!(tmp_end < end && tmp_end[1] == delim)) {
 				/* No it is not. Set the password to NULL */
+				kfree(vol->password);
 				vol->password = NULL;
 				break;
 			}
@@ -1624,6 +1625,7 @@  cifs_parse_mount_options(const char *mountdata, const char *devname,
 					options = end;
 			}
 
+			kfree(vol->password);
 			/* Now build new password string */
 			temp_len = strlen(value);
 			vol->password = kzalloc(temp_len+1, GFP_KERNEL);