From: Hannes Frederic Sowa <hannes@stressinduktion.org>
To: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
Sasha Levin <sasha.levin@oracle.com>,
Andrey Ryabinin <a.ryabinin@samsung.com>,
stable@vger.kernel.org
Subject: Re: [PATCH] net: sendmsg: fix NULL pointer dereference
Date: Mon, 28 Jul 2014 11:50:08 +0200 [thread overview]
Message-ID: <1406541008.21403.0.camel@localhost> (raw)
In-Reply-To: <1406395618-4697-1-git-send-email-a.ryabinin@samsung.com>
On Sa, 2014-07-26 at 21:26 +0400, Andrey Ryabinin wrote:
> Sasha's report:
> > While fuzzing with trinity inside a KVM tools guest running the latest -next
> > kernel with the KASAN patchset, I've stumbled on the following spew:
> >
> > [ 4448.949424] ==================================================================
> > [ 4448.951737] AddressSanitizer: user-memory-access on address 0
> > [ 4448.952988] Read of size 2 by thread T19638:
> > [ 4448.954510] CPU: 28 PID: 19638 Comm: trinity-c76 Not tainted 3.16.0-rc4-next-20140711-sasha-00046-g07d3099-dirty #813
> > [ 4448.956823] ffff88046d86ca40 0000000000000000 ffff880082f37e78 ffff880082f37a40
> > [ 4448.958233] ffffffffb6e47068 ffff880082f37a68 ffff880082f37a58 ffffffffb242708d
> > [ 4448.959552] 0000000000000000 ffff880082f37a88 ffffffffb24255b1 0000000000000000
> > [ 4448.961266] Call Trace:
> > [ 4448.963158] dump_stack (lib/dump_stack.c:52)
> > [ 4448.964244] kasan_report_user_access (mm/kasan/report.c:184)
> > [ 4448.965507] __asan_load2 (mm/kasan/kasan.c:352)
> > [ 4448.966482] ? netlink_sendmsg (net/netlink/af_netlink.c:2339)
> > [ 4448.967541] netlink_sendmsg (net/netlink/af_netlink.c:2339)
> > [ 4448.968537] ? get_parent_ip (kernel/sched/core.c:2555)
> > [ 4448.970103] sock_sendmsg (net/socket.c:654)
> > [ 4448.971584] ? might_fault (mm/memory.c:3741)
> > [ 4448.972526] ? might_fault (./arch/x86/include/asm/current.h:14 mm/memory.c:3740)
> > [ 4448.973596] ? verify_iovec (net/core/iovec.c:64)
> > [ 4448.974522] ___sys_sendmsg (net/socket.c:2096)
> > [ 4448.975797] ? put_lock_stats.isra.13 (./arch/x86/include/asm/preempt.h:98 kernel/locking/lockdep.c:254)
> > [ 4448.977030] ? lock_release_holdtime (kernel/locking/lockdep.c:273)
> > [ 4448.978197] ? lock_release_non_nested (kernel/locking/lockdep.c:3434 (discriminator 1))
> > [ 4448.979346] ? check_chain_key (kernel/locking/lockdep.c:2188)
> > [ 4448.980535] __sys_sendmmsg (net/socket.c:2181)
> > [ 4448.981592] ? trace_hardirqs_on_caller (kernel/locking/lockdep.c:2600)
> > [ 4448.982773] ? trace_hardirqs_on (kernel/locking/lockdep.c:2607)
> > [ 4448.984458] ? syscall_trace_enter (arch/x86/kernel/ptrace.c:1500 (discriminator 2))
> > [ 4448.985621] ? trace_hardirqs_on_caller (kernel/locking/lockdep.c:2600)
> > [ 4448.986754] SyS_sendmmsg (net/socket.c:2201)
> > [ 4448.987708] tracesys (arch/x86/kernel/entry_64.S:542)
> > [ 4448.988929] ==================================================================
>
> This reports means that we've come to netlink_sendmsg() with msg->msg_name == NULL and msg->msg_namelen > 0.
>
> After this report there was no usual "Unable to handle kernel NULL pointer dereference"
> and this gave me a clue that address 0 is mapped and contains valid socket address structure in it.
>
> This bug was introduced in f3d3342602f8bcbf37d7c46641cb9bca7618eb1c
> (net: rework recvmsg handler msg_name and msg_namelen logic).
> Commit message states that:
> "Set msg->msg_name = NULL if user specified a NULL in msg_name but had a
> non-null msg_namelen in verify_iovec/verify_compat_iovec. This doesn't
> affect sendto as it would bail out earlier while trying to copy-in the
> address."
> But in fact this affects sendto when address 0 is mapped and contains
> socket address structure in it. In such case copy-in address will succeed,
> verify_iovec() function will successfully exit with msg->msg_namelen > 0
> and msg->msg_name == NULL.
>
> This patch fixes it by setting msg_namelen to 0 if msg_name == NULL.
>
> Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: <stable@vger.kernel.org>
> Reported-by: Sasha Levin <sasha.levin@oracle.com>
> Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Thank you!
next prev parent reply other threads:[~2014-07-28 9:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-13 21:50 net: socket: NULL ptr deref in sendmsg Sasha Levin
2014-07-14 22:08 ` David Miller
2014-07-24 16:05 ` Sasha Levin
2014-07-25 15:23 ` Andrey Ryabinin
2014-07-25 18:27 ` Eric Dumazet
2014-07-25 20:52 ` Sasha Levin
2014-07-25 22:15 ` Hannes Frederic Sowa
2014-07-26 15:40 ` Andrey Ryabinin
2014-07-25 22:15 ` Hannes Frederic Sowa
2014-07-26 15:48 ` Andrey Ryabinin
2014-07-26 15:54 ` Hannes Frederic Sowa
2014-07-26 17:26 ` [PATCH] net: sendmsg: fix NULL pointer dereference Andrey Ryabinin
2014-07-28 9:50 ` Hannes Frederic Sowa [this message]
2014-07-29 19:21 ` David Miller
2014-07-29 0:19 ` net: socket: NULL ptr deref in sendmsg David Miller
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=1406541008.21403.0.camel@localhost \
--to=hannes@stressinduktion.org \
--cc=a.ryabinin@samsung.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=ryabinin.a.a@gmail.com \
--cc=sasha.levin@oracle.com \
--cc=stable@vger.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;
as well as URLs for NNTP newsgroup(s).