From: Ingo Molnar <mingo@kernel.org>
To: "Huang, Ying" <ying.huang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
lkp@01.org, LKML <linux-kernel@vger.kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
0day robot <fengguang.wu@intel.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [LKP] [lkp] [string] 5f6f0801f5: BUG: KASan: out of bounds access in strlcpy+0xc8/0x250 at addr ffff88011a666ee0
Date: Mon, 12 Oct 2015 10:13:35 +0200 [thread overview]
Message-ID: <20151012081334.GA23595@gmail.com> (raw)
In-Reply-To: <87y4f88rc8.fsf@yhuang-dev.intel.com>
* Huang, Ying <ying.huang@linux.intel.com> wrote:
> Ingo Molnar <mingo@kernel.org> writes:
>
> > * kernel test robot <ying.huang@linux.intel.com> wrote:
> >
> >> FYI, we noticed the below changes on
> >>
> >> git://internal_mailing_list_patch_tree Ingo-Molnar/string-Improve-the-generic-strlcpy-implementation
> >> commit 5f6f0801f5fdfce4984c6a14f99dbfbb417acb66 ("string: Improve the generic strlcpy() implementation")
> >
> > Hm, there's no such commit ID anywhere I can see - did you rebase my tree perhaps?
>
> The test is for patch from LKML instead of git tree. That is, you patch
> is tested via applying it to a -rc kernel.
>
> Do you have a commit in your tree for this? We can test that to confirm.
Yeah, I just made a merge that includes just to strscpy() related bits:
b94371b0917a Merge tag 'v4.3-rc5' into core/strings, to pick up strscpy() fixes
(Note, it might take a few minutes for korg git mirrors to pick up this merge.)
All that tree does is that it makes strlcpy() use strscpy():
> > +size_t strlcpy(char *dst, const char *src, size_t dst_size)
> > +{
> > + int ret = strscpy(dst, src, dst_size);
> > +
> > + /* Handle the insane and broken strlcpy() overflow return value: */
> > + if (ret < 0)
> > + return dst_size + strlen(src+dst_size);
> > +
> > + return ret;
> > +}
> > +EXPORT_SYMBOL(strlcpy);
Do you see the same KASAN failure with that commit? If my analysis below is
correct, then the failure should go away.
Analysis:
The stack dump:
[ 22.242067] [<ffffffff8177a3e8>] strlcpy+0xc8/0x250
[ 22.242067] [<ffffffff8117b1b7>] cgroup_release_agent_write+0x67/0xa0
[ 22.242067] [<ffffffff81179925>] cgroup_file_write+0x75/0x180
[ 22.242067] [<ffffffff812af81e>] kernfs_fop_write+0x17e/0x210
[ 22.242067] [<ffffffff8121cf67>] __vfs_write+0x57/0x170
[ 22.242067] [<ffffffff8121d2bb>] vfs_write+0xeb/0x240
Implicates this strlcpy():
spin_lock(&release_agent_path_lock);
strlcpy(cgrp->root->release_agent_path, strstrip(buf),
sizeof(cgrp->root->release_agent_path));
spin_unlock(&release_agent_path_lock);
where:
include/linux/cgroup-defs.h: char release_agent_path[PATH_MAX];
the target buffer sizing looks pretty robust (because simple).
And the input buffer side looks safe as well, by my reading:
'buf' here seems like a regular write operation, with a 'buf' and a 'size'
parameter - layered in through various layers of abstraction:
struct cftype::write, used in kernel/cgroup.c: cgroup_file_write()
- no size checks, no guarantee that we have a string
this is called via:
struct kernfs_ops::write via kernfs
which guarantees string termination in fs/kernfs/file.c's kernfs_fop_write():
buf[len] = '\0'; /* guarantee string termination */
ops = kernfs_ops(of->kn);
if (ops->write)
len = ops->write(of, buf, len, *ppos);
and that's a stable, private string local to the calling task.
So my guess is that this is the bug that got fixed by:
990486c8af04 ("strscpy: zero any trailing garbage bytes in the destination")
that that systemd passed in a string with leading whitespace, thus strtrim()
created an unaligned string, which caused the strscpy() to access past the end of
the kmalloc() buffer.
Thanks,
Ingo
next prev parent reply other threads:[~2015-10-12 8:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-12 6:54 [lkp] [string] 5f6f0801f5: BUG: KASan: out of bounds access in strlcpy+0xc8/0x250 at addr ffff88011a666ee0 kernel test robot
2015-10-12 7:33 ` Ingo Molnar
2015-10-12 7:43 ` [LKP] " Huang, Ying
2015-10-12 8:13 ` Ingo Molnar [this message]
2015-10-12 7:51 ` Fengguang Wu
2015-10-12 7:58 ` Fengguang Wu
2015-10-12 8:17 ` Ingo Molnar
2015-10-12 8:34 ` Fengguang Wu
2015-10-12 8:19 ` Fengguang Wu
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=20151012081334.GA23595@gmail.com \
--to=mingo@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@01.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=ying.huang@linux.intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox