All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Colin King <colin.king@canonical.com>
Cc: Steve French <sfrench@samba.org>,
	linux-cifs@vger.kernel.org, samba-technical@lists.samba.org,
	kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] cifs: fix memory leak of an allocated cifs_ntsd structure
Date: Tue, 08 Jan 2019 09:42:49 +0000	[thread overview]
Message-ID: <20190108094249.GF3200@kadam> (raw)
In-Reply-To: <20190107171515.4537-1-colin.king@canonical.com>

On Mon, Jan 07, 2019 at 05:15:15PM +0000, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> The call to SMB2_queary_acl can allocate memory to pntsd and also
> return a failure via a call to SMB2_query_acl (and then query_info).
> This occurs when query_info allocates the structure and then in
> query_info the call to smb2_validate_and_copy_iov fails. Currently the
> failure just returns without kfree'ing pntsd hence causing a memory
> leak.  Fix this by kfree'ing pntsd before returning.
> 
> Detected by CoverityScan, CID#1457059 ("Resource Leak")
> 
> Fixes: 2f1afe25997f ("cifs: Use smb 2 - 3 and cifsacl mount options getacl functions")
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  fs/cifs/smb2ops.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index cf7eb891804f..6d71958ad2cb 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -2238,8 +2238,10 @@ get_smb2_acl_by_fid(struct cifs_sb_info *cifs_sb,
>  	cifs_put_tlink(tlink);
>  
>  	cifs_dbg(FYI, "%s: rc = %d ACL len %d\n", __func__, rc, *pacllen);
> -	if (rc)
> +	if (rc) {
> +		kfree(pntsd);
>  		return ERR_PTR(rc);
> +	}

This is a layering violation.  The memory was allocated in query_info()
so it should be freed there instead.  Also if the kmalloc() fails in
query_info() then it should return -ENOMEM instead of success.

This only affects code which calls SMB2_query_acl().  There are two
callers.  You have fixed one but the other is also buggy because we're
returning uninitialized memory in get_smb2_acl_by_path().

regards,
dan carpenter

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: Colin King <colin.king@canonical.com>
Cc: Steve French <sfrench@samba.org>,
	linux-cifs@vger.kernel.org, samba-technical@lists.samba.org,
	kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] cifs: fix memory leak of an allocated cifs_ntsd structure
Date: Tue, 8 Jan 2019 12:42:49 +0300	[thread overview]
Message-ID: <20190108094249.GF3200@kadam> (raw)
In-Reply-To: <20190107171515.4537-1-colin.king@canonical.com>

On Mon, Jan 07, 2019 at 05:15:15PM +0000, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> The call to SMB2_queary_acl can allocate memory to pntsd and also
> return a failure via a call to SMB2_query_acl (and then query_info).
> This occurs when query_info allocates the structure and then in
> query_info the call to smb2_validate_and_copy_iov fails. Currently the
> failure just returns without kfree'ing pntsd hence causing a memory
> leak.  Fix this by kfree'ing pntsd before returning.
> 
> Detected by CoverityScan, CID#1457059 ("Resource Leak")
> 
> Fixes: 2f1afe25997f ("cifs: Use smb 2 - 3 and cifsacl mount options getacl functions")
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>  fs/cifs/smb2ops.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index cf7eb891804f..6d71958ad2cb 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -2238,8 +2238,10 @@ get_smb2_acl_by_fid(struct cifs_sb_info *cifs_sb,
>  	cifs_put_tlink(tlink);
>  
>  	cifs_dbg(FYI, "%s: rc = %d ACL len %d\n", __func__, rc, *pacllen);
> -	if (rc)
> +	if (rc) {
> +		kfree(pntsd);
>  		return ERR_PTR(rc);
> +	}

This is a layering violation.  The memory was allocated in query_info()
so it should be freed there instead.  Also if the kmalloc() fails in
query_info() then it should return -ENOMEM instead of success.

This only affects code which calls SMB2_query_acl().  There are two
callers.  You have fixed one but the other is also buggy because we're
returning uninitialized memory in get_smb2_acl_by_path().

regards,
dan carpenter

  reply	other threads:[~2019-01-08  9:42 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-07 17:15 [PATCH] cifs: fix memory leak of an allocated cifs_ntsd structure Colin King
2019-01-07 17:15 ` Colin King
2019-01-08  9:42 ` Dan Carpenter [this message]
2019-01-08  9:42   ` Dan Carpenter
2019-01-08  9:49   ` Colin Ian King
2019-01-08  9:49     ` Colin Ian King
2019-01-08 17:46     ` Steve French
2019-01-08 17:46       ` Steve French

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190108094249.GF3200@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=colin.king@canonical.com \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=samba-technical@lists.samba.org \
    --cc=sfrench@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.