From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Dave Jones <davej@codemonkey.org.uk>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 4.4 04/27] ipv6: handle -EFAULT from skb_copy_bits
Date: Fri, 13 Jan 2017 12:38:21 +0100 [thread overview]
Message-ID: <20170113113722.842399730@linuxfoundation.org> (raw)
In-Reply-To: <20170113113722.669106991@linuxfoundation.org>
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Jones <davej@codemonkey.org.uk>
[ Upstream commit a98f91758995cb59611e61318dddd8a6956b52c3 ]
By setting certain socket options on ipv6 raw sockets, we can confuse the
length calculation in rawv6_push_pending_frames triggering a BUG_ON.
RIP: 0010:[<ffffffff817c6390>] [<ffffffff817c6390>] rawv6_sendmsg+0xc30/0xc40
RSP: 0018:ffff881f6c4a7c18 EFLAGS: 00010282
RAX: 00000000fffffff2 RBX: ffff881f6c681680 RCX: 0000000000000002
RDX: ffff881f6c4a7cf8 RSI: 0000000000000030 RDI: ffff881fed0f6a00
RBP: ffff881f6c4a7da8 R08: 0000000000000000 R09: 0000000000000009
R10: ffff881fed0f6a00 R11: 0000000000000009 R12: 0000000000000030
R13: ffff881fed0f6a00 R14: ffff881fee39ba00 R15: ffff881fefa93a80
Call Trace:
[<ffffffff8118ba23>] ? unmap_page_range+0x693/0x830
[<ffffffff81772697>] inet_sendmsg+0x67/0xa0
[<ffffffff816d93f8>] sock_sendmsg+0x38/0x50
[<ffffffff816d982f>] SYSC_sendto+0xef/0x170
[<ffffffff816da27e>] SyS_sendto+0xe/0x10
[<ffffffff81002910>] do_syscall_64+0x50/0xa0
[<ffffffff817f7cbc>] entry_SYSCALL64_slow_path+0x25/0x25
Handle by jumping to the failure path if skb_copy_bits gets an EFAULT.
Reproducer:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define LEN 504
int main(int argc, char* argv[])
{
int fd;
int zero = 0;
char buf[LEN];
memset(buf, 0, LEN);
fd = socket(AF_INET6, SOCK_RAW, 7);
setsockopt(fd, SOL_IPV6, IPV6_CHECKSUM, &zero, 4);
setsockopt(fd, SOL_IPV6, IPV6_DSTOPTS, &buf, LEN);
sendto(fd, buf, 1, 0, (struct sockaddr *) buf, 110);
}
Signed-off-by: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv6/raw.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -589,7 +589,11 @@ static int rawv6_push_pending_frames(str
}
offset += skb_transport_offset(skb);
- BUG_ON(skb_copy_bits(skb, offset, &csum, 2));
+ err = skb_copy_bits(skb, offset, &csum, 2);
+ if (err < 0) {
+ ip6_flush_pending_frames(sk);
+ goto out;
+ }
/* in case cksum was not initialized */
if (unlikely(csum))
next prev parent reply other threads:[~2017-01-13 11:38 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20170113113908epcas2p26894f438616da1bf9f7b6b31f735fedc@epcas2p2.samsung.com>
2017-01-13 11:38 ` [PATCH 4.4 00/27] 4.4.43-stable review Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 01/27] netvsc: reduce maximum GSO size Greg Kroah-Hartman
2017-02-09 19:37 ` Ben Hutchings
2017-02-10 21:15 ` Greg Kroah-Hartman
2017-02-10 21:41 ` Patch "[PATCH] netvsc: Set maximum GSO size in the right place" has been added to the 4.4-stable tree gregkh
2017-01-13 11:38 ` [PATCH 4.4 02/27] ser_gigaset: return -ENOMEM on error instead of success Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 03/27] net: vrf: Drop conntrack data after pass through VRF device on Tx Greg Kroah-Hartman
2017-01-13 11:38 ` Greg Kroah-Hartman [this message]
2017-01-13 11:38 ` [PATCH 4.4 05/27] net, sched: fix soft lockup in tc_classify Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 06/27] net: stmmac: Fix race between stmmac_drv_probe and stmmac_open Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 07/27] net/mlx5: Check FW limitations on log_max_qp before setting it Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 08/27] net/mlx5: Avoid shadowing numa_node Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 09/27] drop_monitor: add missing call to genlmsg_end Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 10/27] drop_monitor: consider inserted data in genlmsg_end Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 11/27] igmp: Make igmp group member RFC 3376 compliant Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 12/27] ipv4: Do not allow MAIN to be alias for new LOCAL w/ custom rules Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 13/27] r8152: split rtl8152_suspend function Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 14/27] r8152: fix rx issue for runtime suspend Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 15/27] gro: Enter slow-path if there is no tailroom Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 16/27] gro: use min_t() in skb_gro_reset_offset() Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 17/27] gro: Disable frag0 optimization on IPv6 ext headers Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 18/27] net: ipv4: Fix multipath selection with vrf Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 19/27] net: vrf: do not allow table id 0 Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 20/27] HID: hid-cypress: validate length of report Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 21/27] ALSA: firewire-tascam: Fix to handle error from initialization of stream data Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 22/27] powerpc: Fix build warning on 32-bit PPC Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 23/27] ARM: zynq: Reserve correct amount of non-DMA RAM Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 24/27] ARM: OMAP4+: Fix bad fallthrough for cpuidle Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 26/27] ALSA: usb-audio: Add a quirk for Plantronics BT600 Greg Kroah-Hartman
2017-01-13 11:38 ` [PATCH 4.4 27/27] mm/init: fix zone boundary creation Greg Kroah-Hartman
2017-01-13 20:19 ` [PATCH 4.4 00/27] 4.4.43-stable review Guenter Roeck
2017-01-14 7:24 ` Greg Kroah-Hartman
2017-01-13 21:57 ` Shuah Khan
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=20170113113722.842399730@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davej@codemonkey.org.uk \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--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).