From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Janak Desai <Janak.Desai@gtri.gatech.edu>,
Paul Moore <pmoore@redhat.com>
Subject: [PATCH 3.4 18/31] selinux: handle TCP SYN-ACK packets correctly in selinux_ip_output()
Date: Wed, 18 Dec 2013 13:08:26 -0800 [thread overview]
Message-ID: <20131218210523.306731798@linuxfoundation.org> (raw)
In-Reply-To: <20131218210522.790152625@linuxfoundation.org>
3.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paul Moore <pmoore@redhat.com>
commit 47180068276a04ed31d24fe04c673138208b07a9 upstream.
In selinux_ip_output() we always label packets based on the parent
socket. While this approach works in almost all cases, it doesn't
work in the case of TCP SYN-ACK packets when the correct label is not
the label of the parent socket, but rather the label of the larval
socket represented by the request_sock struct.
Unfortunately, since the request_sock isn't queued on the parent
socket until *after* the SYN-ACK packet is sent, we can't lookup the
request_sock to determine the correct label for the packet; at this
point in time the best we can do is simply pass/NF_ACCEPT the packet.
It must be said that simply passing the packet without any explicit
labeling action, while far from ideal, is not terrible as the SYN-ACK
packet will inherit any IP option based labeling from the initial
connection request so the label *should* be correct and all our
access controls remain in place so we shouldn't have to worry about
information leaks.
Reported-by: Janak Desai <Janak.Desai@gtri.gatech.edu>
Tested-by: Janak Desai <Janak.Desai@gtri.gatech.edu>
Signed-off-by: Paul Moore <pmoore@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
security/selinux/hooks.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -52,6 +52,7 @@
#include <net/icmp.h>
#include <net/ip.h> /* for local_port_range[] */
#include <net/tcp.h> /* struct or_callable used in sock_rcv_skb */
+#include <net/inet_connection_sock.h>
#include <net/net_namespace.h>
#include <net/netlabel.h>
#include <linux/uaccess.h>
@@ -4605,6 +4606,7 @@ static unsigned int selinux_ipv6_forward
static unsigned int selinux_ip_output(struct sk_buff *skb,
u16 family)
{
+ struct sock *sk;
u32 sid;
if (!netlbl_enabled())
@@ -4613,8 +4615,27 @@ static unsigned int selinux_ip_output(st
/* we do this in the LOCAL_OUT path and not the POST_ROUTING path
* because we want to make sure we apply the necessary labeling
* before IPsec is applied so we can leverage AH protection */
- if (skb->sk) {
- struct sk_security_struct *sksec = skb->sk->sk_security;
+ sk = skb->sk;
+ if (sk) {
+ struct sk_security_struct *sksec;
+
+ if (sk->sk_state == TCP_LISTEN)
+ /* if the socket is the listening state then this
+ * packet is a SYN-ACK packet which means it needs to
+ * be labeled based on the connection/request_sock and
+ * not the parent socket. unfortunately, we can't
+ * lookup the request_sock yet as it isn't queued on
+ * the parent socket until after the SYN-ACK is sent.
+ * the "solution" is to simply pass the packet as-is
+ * as any IP option based labeling should be copied
+ * from the initial connection request (in the IP
+ * layer). it is far from ideal, but until we get a
+ * security label in the packet itself this is the
+ * best we can do. */
+ return NF_ACCEPT;
+
+ /* standard practice, label using the parent socket */
+ sksec = sk->sk_security;
sid = sksec->sid;
} else
sid = SECINITSID_KERNEL;
next prev parent reply other threads:[~2013-12-18 22:19 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-18 21:08 [PATCH 3.4 00/31] 3.4.75-stable review Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 01/31] MIPS: DMA: For BMIPS5000 cores flush region just like non-coherent R10000 Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 02/31] ALSA: memalloc.h - fix wrong truncation of dma_addr_t Greg Kroah-Hartman
2013-12-18 21:08 ` Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 03/31] ARM: pxa: tosa: fix keys mapping Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 04/31] ARM: OMAP3: hwmod data: Dont prevent RESET of USB Host module Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 05/31] ARM: 7912/1: check stack pointer in get_wchan Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 06/31] ARM: 7913/1: fix framepointer check in unwind_frame Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 07/31] KVM: Improve create VCPU parameter (CVE-2013-4587) Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 08/31] hwmon: (w83l786ng) Fix fan speed control mode setting and reporting Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 09/31] xfs: underflow bug in xfs_attrlist_by_handle() Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 10/31] futex: fix handling of read-only-mapped hugepages Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 11/31] usb: hub: Use correct reset for wedged USB3 devices that are NOTATTACHED Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 12/31] usb: dwc3: fix implementation of endpoint wedge Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 13/31] usb: gadget: composite: reset delayed_status on reset_config Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 14/31] USB: serial: option: blacklist interface 1 for Huawei E173s-6 Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 15/31] USB: option: support new huawei devices Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 16/31] Input: usbtouchscreen - separate report and transmit buffer size handling Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 17/31] drivers/rtc/rtc-at91rm9200.c: correct alarm over day/month wrap Greg Kroah-Hartman
2013-12-18 21:08 ` Greg Kroah-Hartman [this message]
2013-12-18 21:08 ` [PATCH 3.4 19/31] selinux: handle TCP SYN-ACK packets correctly in selinux_ip_postroute() Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 20/31] mac80211: dont attempt to reorder multicast frames Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 21/31] drm/radeon: fixup bad vram size on SI Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 22/31] x86, efi: Dont use (U)EFI time services on 32 bit Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 23/31] dm bufio: initialize read-only module parameters Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 24/31] dm delay: fix a possible deadlock due to shared workqueue Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 25/31] dm table: fail dm_table_create on dm_round_up overflow Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 27/31] staging: comedi: pcmuio: fix possible NULL deref on detach Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 28/31] staging: comedi: ssv_dnp: use comedi_dio_update_state() Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 29/31] sc1200_wdt: Fix oops Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 30/31] hpfs: fix warnings when the filesystem fills up Greg Kroah-Hartman
2013-12-18 21:08 ` [PATCH 3.4 31/31] Revert "net: update consumers of MSG_MORE to recognize MSG_SENDPAGE_NOTLAST" Greg Kroah-Hartman
2013-12-19 2:02 ` [PATCH 3.4 00/31] 3.4.75-stable review Guenter Roeck
2013-12-19 3:40 ` Greg Kroah-Hartman
2013-12-19 19:54 ` Guenter Roeck
2013-12-19 20:13 ` Greg Kroah-Hartman
2013-12-19 20:46 ` 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=20131218210523.306731798@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=Janak.Desai@gtri.gatech.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=pmoore@redhat.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 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.