From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org,
Christophe Gouault <christophe.gouault@6wind.com>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.11 24/66] vti: get rid of nf mark rule in prerouting
Date: Fri, 1 Nov 2013 15:07:00 -0700 [thread overview]
Message-ID: <20131101220641.403631835@linuxfoundation.org> (raw)
In-Reply-To: <20131101220634.605745564@linuxfoundation.org>
3.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Gouault <christophe.gouault@6wind.com>
[ Upstream commit 7263a5187f9e9de45fcb51349cf0e031142c19a1 ]
This patch fixes and improves the use of vti interfaces (while
lightly changing the way of configuring them).
Currently:
- it is necessary to identify and mark inbound IPsec
packets destined to each vti interface, via netfilter rules in
the mangle table at prerouting hook.
- the vti module cannot retrieve the right tunnel in input since
commit b9959fd3: vti tunnels all have an i_key, but the tunnel lookup
is done with flag TUNNEL_NO_KEY, so there no chance to retrieve them.
- the i_key is used by the outbound processing as a mark to lookup
for the right SP and SA bundle.
This patch uses the o_key to store the vti mark (instead of i_key) and
enables:
- to avoid the need for previously marking the inbound skbuffs via a
netfilter rule.
- to properly retrieve the right tunnel in input, only based on the IPsec
packet outer addresses.
- to properly perform an inbound policy check (using the tunnel o_key
as a mark).
- to properly perform an outbound SPD and SAD lookup (using the tunnel
o_key as a mark).
- to keep the current mark of the skbuff. The skbuff mark is neither
used nor changed by the vti interface. Only the vti interface o_key
is used.
SAs have a wildcard mark.
SPs have a mark equal to the vti interface o_key.
The vti interface must be created as follows (i_key = 0, o_key = mark):
ip link add vti1 mode vti local 1.1.1.1 remote 2.2.2.2 okey 1
The SPs attached to vti1 must be created as follows (mark = vti1 o_key):
ip xfrm policy add dir out mark 1 tmpl src 1.1.1.1 dst 2.2.2.2 \
proto esp mode tunnel
ip xfrm policy add dir in mark 1 tmpl src 2.2.2.2 dst 1.1.1.1 \
proto esp mode tunnel
The SAs are created with the default wildcard mark. There is no
distinction between global vs. vti SAs. Just their addresses will
possibly link them to a vti interface:
ip xfrm state add src 1.1.1.1 dst 2.2.2.2 proto esp spi 1000 mode tunnel \
enc "cbc(aes)" "azertyuiopqsdfgh"
ip xfrm state add src 2.2.2.2 dst 1.1.1.1 proto esp spi 2000 mode tunnel \
enc "cbc(aes)" "sqbdhgqsdjqjsdfh"
To avoid matching "global" (not vti) SPs in vti interfaces, global SPs
should no use the default wildcard mark, but explicitly match mark 0.
To avoid a double SPD lookup in input and output (in global and vti SPDs),
the NOPOLICY and NOXFRM options should be set on the vti interfaces:
echo 1 > /proc/sys/net/ipv4/conf/vti1/disable_policy
echo 1 > /proc/sys/net/ipv4/conf/vti1/disable_xfrm
The outgoing traffic is steered to vti1 by a route via the vti interface:
ip route add 192.168.0.0/16 dev vti1
The incoming IPsec traffic is steered to vti1 because its outer addresses
match the vti1 tunnel configuration.
Signed-off-by: Christophe Gouault <christophe.gouault@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/ipv4/ip_vti.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -285,8 +285,17 @@ static int vti_rcv(struct sk_buff *skb)
tunnel = vti_tunnel_lookup(dev_net(skb->dev), iph->saddr, iph->daddr);
if (tunnel != NULL) {
struct pcpu_tstats *tstats;
+ u32 oldmark = skb->mark;
+ int ret;
- if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
+
+ /* temporarily mark the skb with the tunnel o_key, to
+ * only match policies with this mark.
+ */
+ skb->mark = be32_to_cpu(tunnel->parms.o_key);
+ ret = xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb);
+ skb->mark = oldmark;
+ if (!ret)
return -1;
tstats = this_cpu_ptr(tunnel->dev->tstats);
@@ -295,7 +304,6 @@ static int vti_rcv(struct sk_buff *skb)
tstats->rx_bytes += skb->len;
u64_stats_update_end(&tstats->syncp);
- skb->mark = 0;
secpath_reset(skb);
skb->dev = tunnel->dev;
return 1;
@@ -327,7 +335,7 @@ static netdev_tx_t vti_tunnel_xmit(struc
memset(&fl4, 0, sizeof(fl4));
flowi4_init_output(&fl4, tunnel->parms.link,
- be32_to_cpu(tunnel->parms.i_key), RT_TOS(tos),
+ be32_to_cpu(tunnel->parms.o_key), RT_TOS(tos),
RT_SCOPE_UNIVERSE,
IPPROTO_IPIP, 0,
dst, tiph->saddr, 0, 0);
next prev parent reply other threads:[~2013-11-01 22:08 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-01 22:06 [PATCH 3.11 00/66] 3.11.7-stable review Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 01/66] tcp: TSO packets automatic sizing Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 02/66] tcp: TSQ can use a dynamic limit Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 03/66] tcp: must unclone packets before mangling them Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 04/66] tcp: do not forget FIN in tcp_shifted_skb() Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 05/66] tcp: fix incorrect ca_state in tail loss probe Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 06/66] net: do not call sock_put() on TIMEWAIT sockets Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 07/66] batman-adv: set up network coding packet handlers during module init Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 08/66] l2tp: fix kernel panic when using IPv4-mapped IPv6 addresses Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 09/66] l2tp: Fix build warning with ipv6 disabled Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 10/66] net: mv643xx_eth: update statistics timer from timer context only Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 11/66] net: mv643xx_eth: fix orphaned statistics timer crash Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 12/66] net: heap overflow in __audit_sockaddr() Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 13/66] sit: amend "allow to use rtnl ops on fb tunnel" Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 14/66] proc connector: fix info leaks Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 15/66] ipv4: fix ineffective source address selection Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 16/66] can: dev: fix nlmsg size calculation in can_get_size() Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 17/66] net: secure_seq: Fix warning when CONFIG_IPV6 and CONFIG_INET are not selected Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 18/66] xen-netback: Dont destroy the netdev until the vif is shut down Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 19/66] net/mlx4_en: Rename name of mlx4_en_rx_alloc members Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 20/66] net/mlx4_en: Fix pages never dma unmapped on rx Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 21/66] net: vlan: fix nlmsg size calculation in vlan_get_size() Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 22/66] bridge: update mdb expiration timer upon reports Greg Kroah-Hartman
2013-11-01 22:06 ` [PATCH 3.11 23/66] Revert "bridge: only expire the mdb entry when query is received" Greg Kroah-Hartman
2013-11-01 22:07 ` Greg Kroah-Hartman [this message]
2013-11-01 22:07 ` [PATCH 3.11 25/66] l2tp: must disable bh before calling l2tp_xmit_skb() Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 26/66] netem: update backlog after drop Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 27/66] netem: free skbs in tree on reset Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 28/66] farsync: fix info leak in ioctl Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 29/66] unix_diag: fix info leak Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 30/66] connector: use nlmsg_len() to check message length Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 31/66] bnx2x: record rx queue for LRO packets Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 32/66] virtio-net: dont respond to cpu hotplug notifier if were not ready Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 33/66] virtio-net: refill only when device is up during setting queues Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 34/66] bridge: Correctly clamp MAX forward_delay when enabling STP Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 35/66] net: dst: provide accessor function to dst->xfrm Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 36/66] sctp: Use software crc32 checksum when xfrm transform will happen Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 37/66] sctp: Perform software checksum if packet has to be fragmented Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 38/66] wanxl: fix info leak in ioctl Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 39/66] be2net: pass if_id for v1 and V2 versions of TX_CREATE cmd Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 40/66] net: unix: inherit SOCK_PASS{CRED, SEC} flags from socket to fix race Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 41/66] net: fix cipso packet validation when !NETLABEL Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 42/66] inet: fix possible memory corruption with UDP_CORK and UFO Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 43/66] ipv6: always prefer rt6i_gateway if present Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 44/66] ipv6: fill rt6i_gateway with nexthop address Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 45/66] netfilter: nf_conntrack: fix rt6i_gateway checks for H.323 helper Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 46/66] ipv6: probe routes asynchronous in rt6_probe Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 47/66] davinci_emac.c: Fix IFF_ALLMULTI setup Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 48/66] ARM: 7851/1: check for number of arguments in syscall_get/set_arguments() Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 49/66] ARM: integrator: deactivate timer0 on the Integrator/CP Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 50/66] ext[34]: fix double put in tmpfile Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 51/66] gpio/lynxpoint: check if the interrupt is enabled in IRQ handler Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 52/66] dm snapshot: fix data corruption Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 53/66] i2c: ismt: initialize DMA buffer Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 54/66] mm: migration: do not lose soft dirty bit if page is in migration state Greg Kroah-Hartman
2013-11-27 11:38 ` William Dauchy
2013-11-27 11:50 ` Cyrill Gorcunov
2013-11-27 11:52 ` William Dauchy
2013-11-01 22:07 ` [PATCH 3.11 55/66] mm/zswap: bugfix: memory leak when re-swapon Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 56/66] mm: fix BUG in __split_huge_page_pmd Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 57/66] ALSA: us122l: Fix pcm_usb_stream mmapping regression Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 58/66] ALSA: hda - Fix inverted internal mic not indicated on some machines Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 59/66] writeback: fix negative bdi max pause Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 60/66] w1 - call request_module with w1 master mutex unlocked Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 61/66] wireless: radiotap: fix parsing buffer overrun Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 62/66] wireless: cw1200: acquire hwbus lock around cw1200_irq_handler() call Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 63/66] serial: vt8500: add missing braces Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 64/66] USB: serial: ti_usb_3410_5052: add Abbott strip port ID to combined table as well Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 65/66] USB: serial: option: add support for Inovia SEW858 device Greg Kroah-Hartman
2013-11-01 22:07 ` [PATCH 3.11 66/66] usb: serial: option: blacklist Olivetti Olicard200 Greg Kroah-Hartman
2013-11-02 2:31 ` [PATCH 3.11 00/66] 3.11.7-stable review Guenter Roeck
2013-11-02 15:43 ` Greg Kroah-Hartman
2013-11-02 21:30 ` Shuah Khan
2013-11-02 22:10 ` Greg Kroah-Hartman
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=20131101220641.403631835@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=christophe.gouault@6wind.com \
--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