From: Petr Mladek <pmladek@suse.cz>
To: Marcin Niesluchowski <m.niesluchow@samsung.com>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
"Jan Kara" <jack@suse.cz>,
"Steven Rostedt (Red Hat)" <rostedt@goodmis.org>,
"Alex Elder" <elder@linaro.org>,
"Luis R. Rodriguez" <mcgrof@suse.com>,
"Peter Hurley" <peter@hurleysoftware.com>,
"Joe Perches" <joe@perches.com>, "Kay Sievers" <kay@vrfy.org>,
linux-kernel@vger.kernel.org,
"Łukasz Stelmach" <l.stelmach@samsung.com>,
"Karol Lewandowski" <k.lewandowsk@samsung.com>,
"Tejun Heo" <tj@kernel.org>
Subject: Re: [PATCH] printk: Remove possible overflow in user read buffer
Date: Wed, 20 May 2015 14:10:44 +0200 [thread overview]
Message-ID: <20150520121044.GA2728@pathway.suse.cz> (raw)
In-Reply-To: <1432119588-22209-1-git-send-email-m.niesluchow@samsung.com>
On Wed 2015-05-20 12:59:48, Marcin Niesluchowski wrote:
> Reading message with dict may cause user buffer overflow due to
> no limits of written dict and hardcoded user read buffer size.
> As limits of dict are not clear, it may be possible in extreme
> use case to trigger it (e.g. by driver passing some dict parameters
> from userland or other module logging large key-value data).
>
> Truncate dict read by user when its size would cause user read
> buffer to overflow.
>
> Bug was found during work on extension of kmsg enabling writing
> dict from userspace.
By coincidence, Tejun has already provided slightly different patch
for this problem, see https://lkml.org/lkml/2015/5/14/494
AFAIK, Tejun's patch already is in the -mm tree and thus on the way to
get merged.
I would prefer Tejun's solution.
Best Regards,
Petr
>
> Signed-off-by: Marcin Niesluchowski <m.niesluchow@samsung.com>
> ---
> kernel/printk/printk.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index c099b08..b61602d 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -505,6 +505,7 @@ int check_syslog_permissions(int type, bool from_file)
> return security_syslog(type);
> }
>
> +#define USER_READ_LOG_BUF_LEN 8192
>
> /* /dev/kmsg - userspace message inject/listen interface */
> struct devkmsg_user {
> @@ -512,7 +513,7 @@ struct devkmsg_user {
> u32 idx;
> enum log_flags prev;
> struct mutex lock;
> - char buf[8192];
> + char buf[USER_READ_LOG_BUF_LEN];
> };
>
> static ssize_t devkmsg_write(struct kiocb *iocb, struct iov_iter *from)
> @@ -648,21 +649,29 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf,
> unsigned char c = log_dict(msg)[i];
>
> if (line) {
> + if (len >= USER_READ_LOG_BUF_LEN-1)
> + break;
> user->buf[len++] = ' ';
> line = false;
> }
>
> if (c == '\0') {
> + if (len >= USER_READ_LOG_BUF_LEN-1)
> + break;
> user->buf[len++] = '\n';
> line = true;
> continue;
> }
>
> if (c < ' ' || c >= 127 || c == '\\') {
> + if (len >= USER_READ_LOG_BUF_LEN-4)
> + break;
> len += sprintf(user->buf + len, "\\x%02x", c);
> continue;
> }
>
> + if (len >= USER_READ_LOG_BUF_LEN-1)
> + break;
> user->buf[len++] = c;
> }
> user->buf[len++] = '\n';
> --
> 1.9.1
>
prev parent reply other threads:[~2015-05-20 12:10 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-20 10:59 Marcin Niesluchowski
2015-05-20 12:10 ` Petr Mladek [this message]
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=20150520121044.GA2728@pathway.suse.cz \
--to=pmladek@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=elder@linaro.org \
--cc=jack@suse.cz \
--cc=joe@perches.com \
--cc=k.lewandowsk@samsung.com \
--cc=kay@vrfy.org \
--cc=l.stelmach@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=m.niesluchow@samsung.com \
--cc=mcgrof@suse.com \
--cc=peter@hurleysoftware.com \
--cc=rostedt@goodmis.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®