All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Tejun Heo <tj@kernel.org>
Cc: linux-kernel@vger.kernel.org, Kay Sievers <kay@vrfy.org>,
	Ron <ron@debian.org>, Ben Hutchings <ben@decadent.org.uk>
Subject: Re: [PATCH driver-core-linus] sysfs: make sure read buffer is zeroed
Date: Mon, 19 May 2014 15:25:00 -0700	[thread overview]
Message-ID: <20140519222500.GA14616@kroah.com> (raw)
In-Reply-To: <20140519195210.GA27506@mtj.dyndns.org>

On Mon, May 19, 2014 at 03:52:10PM -0400, Tejun Heo wrote:
> 13c589d5b0ac ("sysfs: use seq_file when reading regular files")
> switched sysfs from custom read implementation to seq_file to enable
> later transition to kernfs.  After the change, the buffer passed to
> ->show() is acquired through seq_get_buf(); unfortunately, this
> introduces a subtle behavior change.  Before the commit, the buffer
> passed to ->show() was always zero as it was allocated using
> get_zeroed_page().  Because seq_file doesn't clear buffers on
> allocation and neither does seq_get_buf(), after the commit, depending
> on the behavior of ->show(), we may end up exposing uninitialized data
> to userland thus possibly altering userland visible behavior and
> leaking information.
> 
> Fix it by explicitly clearing the buffer.
> 
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Reported-by: Ron <ron@debian.org> 
> Fixes: 13c589d5b0ac ("sysfs: use seq_file when reading regular files")
> ---
>  fs/sysfs/file.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
> index 28cc1acd..e9ef59b 100644
> --- a/fs/sysfs/file.c
> +++ b/fs/sysfs/file.c
> @@ -47,12 +47,13 @@ static int sysfs_kf_seq_show(struct seq_file *sf, void *v)
>  	ssize_t count;
>  	char *buf;
>  
> -	/* acquire buffer and ensure that it's >= PAGE_SIZE */
> +	/* acquire buffer and ensure that it's >= PAGE_SIZE and clear */
>  	count = seq_get_buf(sf, &buf);
>  	if (count < PAGE_SIZE) {
>  		seq_commit(sf, -1);
>  		return 0;
>  	}
> +	memset(buf, 0, PAGE_SIZE);
>  
>  	/*
>  	 * Invoke show().  Control may reach here via seq file lseek even

Thanks, I'll go queue this up.

greg k-h

  reply	other threads:[~2014-05-19 22:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20140519172334.GK20439@audi.shelbyville.oz>
2014-05-19 19:52 ` [PATCH driver-core-linus] sysfs: make sure read buffer is zeroed Tejun Heo
2014-05-19 22:25   ` Greg Kroah-Hartman [this message]
2014-05-19 22:32     ` Joe Perches
2014-05-20  0:49       ` Tejun Heo
2014-05-20  1:25         ` Joe Perches

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=20140519222500.GA14616@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=ben@decadent.org.uk \
    --cc=kay@vrfy.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ron@debian.org \
    --cc=tj@kernel.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.