All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 1/1] gfs2: incorrect check for debugfs returns
Date: Tue, 24 Mar 2015 10:21:21 +0000	[thread overview]
Message-ID: <55113AA1.3050005@redhat.com> (raw)
In-Reply-To: <1427164618-568-1-git-send-email-csong84@gatech.edu>

Hi,

On 24/03/15 02:36, Chengyu Song wrote:
> debugfs_create_dir and debugfs_create_file may return -ENODEV when debugfs
> is not configured, so the return value should be checked against ERROR_VALUE
> as well, otherwise the later dereference of the dentry pointer would crash
> the kernel.
Looks reasonable to me:

Acked-by: Steven Whitehouse <swhiteho@redhat.com>

Steve.

> Signed-off-by: Chengyu Song <csong84@gatech.edu>
> ---
>   fs/gfs2/glock.c | 47 ++++++++++++++++++++++++++++-------------------
>   1 file changed, 28 insertions(+), 19 deletions(-)
>
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index f42dffb..0fa8062 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -2047,34 +2047,41 @@ static const struct file_operations gfs2_sbstats_fops = {
>   
>   int gfs2_create_debugfs_file(struct gfs2_sbd *sdp)
>   {
> -	sdp->debugfs_dir = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
> -	if (!sdp->debugfs_dir)
> -		return -ENOMEM;
> -	sdp->debugfs_dentry_glocks = debugfs_create_file("glocks",
> -							 S_IFREG | S_IRUGO,
> -							 sdp->debugfs_dir, sdp,
> -							 &gfs2_glocks_fops);
> -	if (!sdp->debugfs_dentry_glocks)
> +	struct dentry *dent;
> +
> +	dent = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
> +	if (IS_ERR_OR_NULL(dent))
> +		goto fail;
> +	sdp->debugfs_dir = dent;
> +
> +	dent = debugfs_create_file("glocks",
> +				   S_IFREG | S_IRUGO,
> +				   sdp->debugfs_dir, sdp,
> +				   &gfs2_glocks_fops);
> +	if (IS_ERR_OR_NULL(dent))
>   		goto fail;
> +	sdp->debugfs_dentry_glocks = dent;
>   
> -	sdp->debugfs_dentry_glstats = debugfs_create_file("glstats",
> -							S_IFREG | S_IRUGO,
> -							sdp->debugfs_dir, sdp,
> -							&gfs2_glstats_fops);
> -	if (!sdp->debugfs_dentry_glstats)
> +	dent = debugfs_create_file("glstats",
> +				   S_IFREG | S_IRUGO,
> +				   sdp->debugfs_dir, sdp,
> +				   &gfs2_glstats_fops);
> +	if (IS_ERR_OR_NULL(dent))
>   		goto fail;
> +	sdp->debugfs_dentry_glstats = dent;
>   
> -	sdp->debugfs_dentry_sbstats = debugfs_create_file("sbstats",
> -							S_IFREG | S_IRUGO,
> -							sdp->debugfs_dir, sdp,
> -							&gfs2_sbstats_fops);
> -	if (!sdp->debugfs_dentry_sbstats)
> +	dent = debugfs_create_file("sbstats",
> +				   S_IFREG | S_IRUGO,
> +				   sdp->debugfs_dir, sdp,
> +				   &gfs2_sbstats_fops);
> +	if (IS_ERR_OR_NULL(dent))
>   		goto fail;
> +	sdp->debugfs_dentry_sbstats = dent;
>   
>   	return 0;
>   fail:
>   	gfs2_delete_debugfs_file(sdp);
> -	return -ENOMEM;
> +	return dent ? PTR_ERR(dent) : -ENOMEM;
>   }
>   
>   void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
> @@ -2100,6 +2107,8 @@ void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
>   int gfs2_register_debugfs(void)
>   {
>   	gfs2_root = debugfs_create_dir("gfs2", NULL);
> +	if (IS_ERR(gfs2_root))
> +		return PTR_ERR(gfs2_root);
>   	return gfs2_root ? 0 : -ENOMEM;
>   }
>   



WARNING: multiple messages have this Message-ID (diff)
From: Steven Whitehouse <swhiteho@redhat.com>
To: Chengyu Song <csong84@gatech.edu>,
	cluster-devel@redhat.com, linux-kernel@vger.kernel.org
Cc: taesoo@gatech.edu, changwoo@gatech.edu, sanidhya@gatech.edu,
	blee@gatech.edu
Subject: Re: [PATCH 1/1] gfs2: incorrect check for debugfs returns
Date: Tue, 24 Mar 2015 10:21:21 +0000	[thread overview]
Message-ID: <55113AA1.3050005@redhat.com> (raw)
In-Reply-To: <1427164618-568-1-git-send-email-csong84@gatech.edu>

Hi,

On 24/03/15 02:36, Chengyu Song wrote:
> debugfs_create_dir and debugfs_create_file may return -ENODEV when debugfs
> is not configured, so the return value should be checked against ERROR_VALUE
> as well, otherwise the later dereference of the dentry pointer would crash
> the kernel.
Looks reasonable to me:

Acked-by: Steven Whitehouse <swhiteho@redhat.com>

Steve.

> Signed-off-by: Chengyu Song <csong84@gatech.edu>
> ---
>   fs/gfs2/glock.c | 47 ++++++++++++++++++++++++++++-------------------
>   1 file changed, 28 insertions(+), 19 deletions(-)
>
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index f42dffb..0fa8062 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -2047,34 +2047,41 @@ static const struct file_operations gfs2_sbstats_fops = {
>   
>   int gfs2_create_debugfs_file(struct gfs2_sbd *sdp)
>   {
> -	sdp->debugfs_dir = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
> -	if (!sdp->debugfs_dir)
> -		return -ENOMEM;
> -	sdp->debugfs_dentry_glocks = debugfs_create_file("glocks",
> -							 S_IFREG | S_IRUGO,
> -							 sdp->debugfs_dir, sdp,
> -							 &gfs2_glocks_fops);
> -	if (!sdp->debugfs_dentry_glocks)
> +	struct dentry *dent;
> +
> +	dent = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
> +	if (IS_ERR_OR_NULL(dent))
> +		goto fail;
> +	sdp->debugfs_dir = dent;
> +
> +	dent = debugfs_create_file("glocks",
> +				   S_IFREG | S_IRUGO,
> +				   sdp->debugfs_dir, sdp,
> +				   &gfs2_glocks_fops);
> +	if (IS_ERR_OR_NULL(dent))
>   		goto fail;
> +	sdp->debugfs_dentry_glocks = dent;
>   
> -	sdp->debugfs_dentry_glstats = debugfs_create_file("glstats",
> -							S_IFREG | S_IRUGO,
> -							sdp->debugfs_dir, sdp,
> -							&gfs2_glstats_fops);
> -	if (!sdp->debugfs_dentry_glstats)
> +	dent = debugfs_create_file("glstats",
> +				   S_IFREG | S_IRUGO,
> +				   sdp->debugfs_dir, sdp,
> +				   &gfs2_glstats_fops);
> +	if (IS_ERR_OR_NULL(dent))
>   		goto fail;
> +	sdp->debugfs_dentry_glstats = dent;
>   
> -	sdp->debugfs_dentry_sbstats = debugfs_create_file("sbstats",
> -							S_IFREG | S_IRUGO,
> -							sdp->debugfs_dir, sdp,
> -							&gfs2_sbstats_fops);
> -	if (!sdp->debugfs_dentry_sbstats)
> +	dent = debugfs_create_file("sbstats",
> +				   S_IFREG | S_IRUGO,
> +				   sdp->debugfs_dir, sdp,
> +				   &gfs2_sbstats_fops);
> +	if (IS_ERR_OR_NULL(dent))
>   		goto fail;
> +	sdp->debugfs_dentry_sbstats = dent;
>   
>   	return 0;
>   fail:
>   	gfs2_delete_debugfs_file(sdp);
> -	return -ENOMEM;
> +	return dent ? PTR_ERR(dent) : -ENOMEM;
>   }
>   
>   void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
> @@ -2100,6 +2107,8 @@ void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
>   int gfs2_register_debugfs(void)
>   {
>   	gfs2_root = debugfs_create_dir("gfs2", NULL);
> +	if (IS_ERR(gfs2_root))
> +		return PTR_ERR(gfs2_root);
>   	return gfs2_root ? 0 : -ENOMEM;
>   }
>   


  reply	other threads:[~2015-03-24 10:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-24  2:36 [Cluster-devel] [PATCH 1/1] gfs2: incorrect check for debugfs returns Chengyu Song
2015-03-24  2:36 ` Chengyu Song
2015-03-24 10:21 ` Steven Whitehouse [this message]
2015-03-24 10:21   ` Steven Whitehouse
2015-03-30 14:16 ` [Cluster-devel] " Bob Peterson
2015-03-30 14:16   ` Bob Peterson

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=55113AA1.3050005@redhat.com \
    --to=swhiteho@redhat.com \
    /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.