<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/net/vxlan.c, branch v3.16</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>neighbour : fix ndm_type type error issue</title>
<updated>2014-07-29T00:52:17+00:00</updated>
<author>
<name>Jun Zhao</name>
<email>mypopydev@gmail.com</email>
</author>
<published>2014-07-25T16:38:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=545469f7a5d7f7b2a17b74da0a1bd0c1aea2f545'/>
<id>545469f7a5d7f7b2a17b74da0a1bd0c1aea2f545</id>
<content type='text'>
ndm_type means L3 address type, in neighbour proxy and vxlan, it's RTN_UNICAST.
NDA_DST is for netlink TLV type, hence it's not right value in this context.

Signed-off-by: Jun Zhao &lt;mypopydev@gmail.com&gt;
Acked-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
ndm_type means L3 address type, in neighbour proxy and vxlan, it's RTN_UNICAST.
NDA_DST is for netlink TLV type, hence it's not right value in this context.

Signed-off-by: Jun Zhao &lt;mypopydev@gmail.com&gt;
Acked-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: Checksum fixes</title>
<updated>2014-06-15T08:00:50+00:00</updated>
<author>
<name>Tom Herbert</name>
<email>therbert@google.com</email>
</author>
<published>2014-06-15T06:24:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=f79b064c15068176e3f6f67715aafd7fe183120c'/>
<id>f79b064c15068176e3f6f67715aafd7fe183120c</id>
<content type='text'>
Call skb_pop_rcv_encapsulation and postpull_rcsum for the Ethernet
header to work properly with checksum complete.

Signed-off-by: Tom Herbert &lt;therbert@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Call skb_pop_rcv_encapsulation and postpull_rcsum for the Ethernet
header to work properly with checksum complete.

Signed-off-by: Tom Herbert &lt;therbert@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: use dev-&gt;needed_headroom instead of dev-&gt;hard_header_len</title>
<updated>2014-06-13T22:27:59+00:00</updated>
<author>
<name>Cong Wang</name>
<email>cwang@twopensource.com</email>
</author>
<published>2014-06-12T18:53:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=2853af6a2ea1a8ed09b09dd4fb578e7f435e8d34'/>
<id>2853af6a2ea1a8ed09b09dd4fb578e7f435e8d34</id>
<content type='text'>
When we mirror packets from a vxlan tunnel to other device,
the mirror device should see the same packets (that is, without
outer header). Because vxlan tunnel sets dev-&gt;hard_header_len,
tcf_mirred() resets mac header back to outer mac, the mirror device
actually sees packets with outer headers

Vxlan tunnel should set dev-&gt;needed_headroom instead of
dev-&gt;hard_header_len, like what other ip tunnels do. This fixes
the above problem.

Cc: "David S. Miller" &lt;davem@davemloft.net&gt;
Cc: stephen hemminger &lt;stephen@networkplumber.org&gt;
Cc: Pravin B Shelar &lt;pshelar@nicira.com&gt;
Signed-off-by: Cong Wang &lt;cwang@twopensource.com&gt;
Signed-off-by: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When we mirror packets from a vxlan tunnel to other device,
the mirror device should see the same packets (that is, without
outer header). Because vxlan tunnel sets dev-&gt;hard_header_len,
tcf_mirred() resets mac header back to outer mac, the mirror device
actually sees packets with outer headers

Vxlan tunnel should set dev-&gt;needed_headroom instead of
dev-&gt;hard_header_len, like what other ip tunnels do. This fixes
the above problem.

Cc: "David S. Miller" &lt;davem@davemloft.net&gt;
Cc: stephen hemminger &lt;stephen@networkplumber.org&gt;
Cc: Pravin B Shelar &lt;pshelar@nicira.com&gt;
Signed-off-by: Cong Wang &lt;cwang@twopensource.com&gt;
Signed-off-by: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: Add skb_gro_postpull_rcsum to udp and vxlan</title>
<updated>2014-06-11T22:46:13+00:00</updated>
<author>
<name>Tom Herbert</name>
<email>therbert@google.com</email>
</author>
<published>2014-06-11T01:54:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=6bae1d4cc395ad46613e40c9e865ee171dc9de5c'/>
<id>6bae1d4cc395ad46613e40c9e865ee171dc9de5c</id>
<content type='text'>
Need to gro_postpull_rcsum for GRO to work with checksum complete.

Signed-off-by: Tom Herbert &lt;therbert@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Need to gro_postpull_rcsum for GRO to work with checksum complete.

Signed-off-by: Tom Herbert &lt;therbert@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: Add support for UDP checksums (v4 sending, v6 zero csums)</title>
<updated>2014-06-05T05:46:39+00:00</updated>
<author>
<name>Tom Herbert</name>
<email>therbert@google.com</email>
</author>
<published>2014-06-05T00:20:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=359a0ea9875ef4f32c8425bbe1ae348e1fd2ed2a'/>
<id>359a0ea9875ef4f32c8425bbe1ae348e1fd2ed2a</id>
<content type='text'>
Added VXLAN link configuration for sending UDP checksums, and allowing
TX and RX of UDP6 checksums.

Also, call common iptunnel_handle_offloads and added GSO support for
checksums.

Signed-off-by: Tom Herbert &lt;therbert@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Added VXLAN link configuration for sending UDP checksums, and allowing
TX and RX of UDP6 checksums.

Also, call common iptunnel_handle_offloads and added GSO support for
checksums.

Signed-off-by: Tom Herbert &lt;therbert@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: get rid of SET_ETHTOOL_OPS</title>
<updated>2014-05-13T21:43:20+00:00</updated>
<author>
<name>Wilfried Klaebe</name>
<email>w-lkml@lebenslange-mailadresse.de</email>
</author>
<published>2014-05-11T00:12:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=7ad24ea4bf620a32631d7b3069c3e30c078b0c3e'/>
<id>7ad24ea4bf620a32631d7b3069c3e30c078b0c3e</id>
<content type='text'>
net: get rid of SET_ETHTOOL_OPS

Dave Miller mentioned he'd like to see SET_ETHTOOL_OPS gone.
This does that.

Mostly done via coccinelle script:
@@
struct ethtool_ops *ops;
struct net_device *dev;
@@
-       SET_ETHTOOL_OPS(dev, ops);
+       dev-&gt;ethtool_ops = ops;

Compile tested only, but I'd seriously wonder if this broke anything.

Suggested-by: Dave Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Wilfried Klaebe &lt;w-lkml@lebenslange-mailadresse.de&gt;
Acked-by: Felipe Balbi &lt;balbi@ti.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
net: get rid of SET_ETHTOOL_OPS

Dave Miller mentioned he'd like to see SET_ETHTOOL_OPS gone.
This does that.

Mostly done via coccinelle script:
@@
struct ethtool_ops *ops;
struct net_device *dev;
@@
-       SET_ETHTOOL_OPS(dev, ops);
+       dev-&gt;ethtool_ops = ops;

Compile tested only, but I'd seriously wonder if this broke anything.

Suggested-by: Dave Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Wilfried Klaebe &lt;w-lkml@lebenslange-mailadresse.de&gt;
Acked-by: Felipe Balbi &lt;balbi@ti.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: add x-netns support</title>
<updated>2014-04-24T20:18:26+00:00</updated>
<author>
<name>Nicolas Dichtel</name>
<email>nicolas.dichtel@6wind.com</email>
</author>
<published>2014-04-24T08:02:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=f01ec1c017dead42092997a2b8684fcab4cbf126'/>
<id>f01ec1c017dead42092997a2b8684fcab4cbf126</id>
<content type='text'>
This patch allows to switch the netns when packet is encapsulated or
decapsulated.
The vxlan socket is openned into the i/o netns, ie into the netns where
encapsulated packets are received. The socket lookup is done into this netns to
find the corresponding vxlan tunnel. After decapsulation, the packet is
injecting into the corresponding interface which may stand to another netns.

When one of the two netns is removed, the tunnel is destroyed.

Configuration example:
ip netns add netns1
ip netns exec netns1 ip link set lo up
ip link add vxlan10 type vxlan id 10 group 239.0.0.10 dev eth0 dstport 0
ip link set vxlan10 netns netns1
ip netns exec netns1 ip addr add 192.168.0.249/24 broadcast 192.168.0.255 dev vxlan10
ip netns exec netns1 ip link set vxlan10 up

Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch allows to switch the netns when packet is encapsulated or
decapsulated.
The vxlan socket is openned into the i/o netns, ie into the netns where
encapsulated packets are received. The socket lookup is done into this netns to
find the corresponding vxlan tunnel. After decapsulation, the packet is
injecting into the corresponding interface which may stand to another netns.

When one of the two netns is removed, the tunnel is destroyed.

Configuration example:
ip netns add netns1
ip netns exec netns1 ip link set lo up
ip link add vxlan10 type vxlan id 10 group 239.0.0.10 dev eth0 dstport 0
ip link set vxlan10 netns netns1
ip netns exec netns1 ip addr add 192.168.0.249/24 broadcast 192.168.0.255 dev vxlan10
ip netns exec netns1 ip link set vxlan10 up

Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: ensure to advertise the right fdb remote</title>
<updated>2014-04-23T19:01:09+00:00</updated>
<author>
<name>Nicolas Dichtel</name>
<email>nicolas.dichtel@6wind.com</email>
</author>
<published>2014-04-22T13:01:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=9e4b93f905bc0ca1363a07b0f039455d9117d6bc'/>
<id>9e4b93f905bc0ca1363a07b0f039455d9117d6bc</id>
<content type='text'>
The goal of this patch is to fix rtnelink notification. The main problem was
about notification for fdb entry with more than one remote. Before the patch,
when a remote was added to an existing fdb entry, the kernel advertised the
first remote instead of the added one. Also when a remote was removed from a fdb
entry with several remotes, the deleted remote was not advertised.

Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The goal of this patch is to fix rtnelink notification. The main problem was
about notification for fdb entry with more than one remote. Before the patch,
when a remote was added to an existing fdb entry, the kernel advertised the
first remote instead of the added one. Also when a remote was removed from a fdb
entry with several remotes, the deleted remote was not advertised.

Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipv4: add a sock pointer to dst-&gt;output() path.</title>
<updated>2014-04-15T17:47:15+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2014-04-15T17:47:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=aad88724c9d54acb1a9737cb6069d8470fa85f74'/>
<id>aad88724c9d54acb1a9737cb6069d8470fa85f74</id>
<content type='text'>
In the dst-&gt;output() path for ipv4, the code assumes the skb it has to
transmit is attached to an inet socket, specifically via
ip_mc_output() : The sk_mc_loop() test triggers a WARN_ON() when the
provider of the packet is an AF_PACKET socket.

The dst-&gt;output() method gets an additional 'struct sock *sk'
parameter. This needs a cascade of changes so that this parameter can
be propagated from vxlan to final consumer.

Fixes: 8f646c922d55 ("vxlan: keep original skb ownership")
Reported-by: lucien xin &lt;lucien.xin@gmail.com&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In the dst-&gt;output() path for ipv4, the code assumes the skb it has to
transmit is attached to an inet socket, specifically via
ip_mc_output() : The sk_mc_loop() test triggers a WARN_ON() when the
provider of the packet is an AF_PACKET socket.

The dst-&gt;output() method gets an additional 'struct sock *sk'
parameter. This needs a cascade of changes so that this parameter can
be propagated from vxlan to final consumer.

Fixes: 8f646c922d55 ("vxlan: keep original skb ownership")
Reported-by: lucien xin &lt;lucien.xin@gmail.com&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: vxlan: fix crash when interface is created with no group</title>
<updated>2014-04-03T15:16:47+00:00</updated>
<author>
<name>Mike Rapoport</name>
<email>mike.rapoport@ravellosystems.com</email>
</author>
<published>2014-04-01T06:23:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=5933a7bbb5de66482ea8aa874a7ebaf8e67603c4'/>
<id>5933a7bbb5de66482ea8aa874a7ebaf8e67603c4</id>
<content type='text'>
If the vxlan interface is created without explicit group definition,
there are corner cases which may cause kernel panic.

For instance, in the following scenario:

node A:
$ ip link add dev vxlan42  address 2c:c2:60:00:10:20 type vxlan id 42
$ ip addr add dev vxlan42 10.0.0.1/24
$ ip link set up dev vxlan42
$ arp -i vxlan42 -s 10.0.0.2 2c:c2:60:00:01:02
$ bridge fdb add dev vxlan42 to 2c:c2:60:00:01:02 dst &lt;IPv4 address&gt;
$ ping 10.0.0.2

node B:
$ ip link add dev vxlan42 address 2c:c2:60:00:01:02 type vxlan id 42
$ ip addr add dev vxlan42 10.0.0.2/24
$ ip link set up dev vxlan42
$ arp -i vxlan42 -s 10.0.0.1 2c:c2:60:00:10:20

node B crashes:

 vxlan42: 2c:c2:60:00:10:20 migrated from 4011:eca4:c0a8:6466:c0a8:6415:8e09:2118 to (invalid address)
 vxlan42: 2c:c2:60:00:10:20 migrated from 4011:eca4:c0a8:6466:c0a8:6415:8e09:2118 to (invalid address)
 BUG: unable to handle kernel NULL pointer dereference at 0000000000000046
 IP: [&lt;ffffffff8143c459&gt;] ip6_route_output+0x58/0x82
 PGD 7bd89067 PUD 7bd4e067 PMD 0
 Oops: 0000 [#1] SMP
 Modules linked in:
 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.14.0-rc8-hvx-xen-00019-g97a5221-dirty #154
 Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
 task: ffff88007c774f50 ti: ffff88007c79c000 task.ti: ffff88007c79c000
 RIP: 0010:[&lt;ffffffff8143c459&gt;]  [&lt;ffffffff8143c459&gt;] ip6_route_output+0x58/0x82
 RSP: 0018:ffff88007fd03668  EFLAGS: 00010282
 RAX: 0000000000000000 RBX: ffffffff8186a000 RCX: 0000000000000040
 RDX: 0000000000000000 RSI: ffff88007b0e4a80 RDI: ffff88007fd03754
 RBP: ffff88007fd03688 R08: ffff88007b0e4a80 R09: 0000000000000000
 R10: 0200000a0100000a R11: 0001002200000000 R12: ffff88007fd03740
 R13: ffff88007b0e4a80 R14: ffff88007b0e4a80 R15: ffff88007bba0c50
 FS:  0000000000000000(0000) GS:ffff88007fd00000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
 CR2: 0000000000000046 CR3: 000000007bb60000 CR4: 00000000000006e0
 Stack:
  0000000000000000 ffff88007fd037a0 ffffffff8186a000 ffff88007fd03740
  ffff88007fd036c8 ffffffff814320bb 0000000000006e49 ffff88007b8b7360
  ffff88007bdbf200 ffff88007bcbc000 ffff88007b8b7000 ffff88007b8b7360
 Call Trace:
  &lt;IRQ&gt;
  [&lt;ffffffff814320bb&gt;] ip6_dst_lookup_tail+0x2d/0xa4
  [&lt;ffffffff814322a5&gt;] ip6_dst_lookup+0x10/0x12
  [&lt;ffffffff81323b4e&gt;] vxlan_xmit_one+0x32a/0x68c
  [&lt;ffffffff814a325a&gt;] ? _raw_spin_unlock_irqrestore+0x12/0x14
  [&lt;ffffffff8104c551&gt;] ? lock_timer_base.isra.23+0x26/0x4b
  [&lt;ffffffff8132451a&gt;] vxlan_xmit+0x66a/0x6a8
  [&lt;ffffffff8141a365&gt;] ? ipt_do_table+0x35f/0x37e
  [&lt;ffffffff81204ba2&gt;] ? selinux_ip_postroute+0x41/0x26e
  [&lt;ffffffff8139d0c1&gt;] dev_hard_start_xmit+0x2ce/0x3ce
  [&lt;ffffffff8139d491&gt;] __dev_queue_xmit+0x2d0/0x392
  [&lt;ffffffff813b380f&gt;] ? eth_header+0x28/0xb5
  [&lt;ffffffff8139d569&gt;] dev_queue_xmit+0xb/0xd
  [&lt;ffffffff813a5aa6&gt;] neigh_resolve_output+0x134/0x152
  [&lt;ffffffff813db741&gt;] ip_finish_output2+0x236/0x299
  [&lt;ffffffff813dc074&gt;] ip_finish_output+0x98/0x9d
  [&lt;ffffffff813dc749&gt;] ip_output+0x62/0x67
  [&lt;ffffffff813da9f2&gt;] dst_output+0xf/0x11
  [&lt;ffffffff813dc11c&gt;] ip_local_out+0x1b/0x1f
  [&lt;ffffffff813dcf1b&gt;] ip_send_skb+0x11/0x37
  [&lt;ffffffff813dcf70&gt;] ip_push_pending_frames+0x2f/0x33
  [&lt;ffffffff813ff732&gt;] icmp_push_reply+0x106/0x115
  [&lt;ffffffff813ff9e4&gt;] icmp_reply+0x142/0x164
  [&lt;ffffffff813ffb3b&gt;] icmp_echo.part.16+0x46/0x48
  [&lt;ffffffff813c1d30&gt;] ? nf_iterate+0x43/0x80
  [&lt;ffffffff813d8037&gt;] ? xfrm4_policy_check.constprop.11+0x52/0x52
  [&lt;ffffffff813ffb62&gt;] icmp_echo+0x25/0x27
  [&lt;ffffffff814005f7&gt;] icmp_rcv+0x1d2/0x20a
  [&lt;ffffffff813d8037&gt;] ? xfrm4_policy_check.constprop.11+0x52/0x52
  [&lt;ffffffff813d810d&gt;] ip_local_deliver_finish+0xd6/0x14f
  [&lt;ffffffff813d8037&gt;] ? xfrm4_policy_check.constprop.11+0x52/0x52
  [&lt;ffffffff813d7fde&gt;] NF_HOOK.constprop.10+0x4c/0x53
  [&lt;ffffffff813d82bf&gt;] ip_local_deliver+0x4a/0x4f
  [&lt;ffffffff813d7f7b&gt;] ip_rcv_finish+0x253/0x26a
  [&lt;ffffffff813d7d28&gt;] ? inet_add_protocol+0x3e/0x3e
  [&lt;ffffffff813d7fde&gt;] NF_HOOK.constprop.10+0x4c/0x53
  [&lt;ffffffff813d856a&gt;] ip_rcv+0x2a6/0x2ec
  [&lt;ffffffff8139a9a0&gt;] __netif_receive_skb_core+0x43e/0x478
  [&lt;ffffffff812a346f&gt;] ? virtqueue_poll+0x16/0x27
  [&lt;ffffffff8139aa2f&gt;] __netif_receive_skb+0x55/0x5a
  [&lt;ffffffff8139aaaa&gt;] process_backlog+0x76/0x12f
  [&lt;ffffffff8139add8&gt;] net_rx_action+0xa2/0x1ab
  [&lt;ffffffff81047847&gt;] __do_softirq+0xca/0x1d1
  [&lt;ffffffff81047ace&gt;] irq_exit+0x3e/0x85
  [&lt;ffffffff8100b98b&gt;] do_IRQ+0xa9/0xc4
  [&lt;ffffffff814a37ad&gt;] common_interrupt+0x6d/0x6d
  &lt;EOI&gt;
  [&lt;ffffffff810378db&gt;] ? native_safe_halt+0x6/0x8
  [&lt;ffffffff810110c7&gt;] default_idle+0x9/0xd
  [&lt;ffffffff81011694&gt;] arch_cpu_idle+0x13/0x1c
  [&lt;ffffffff8107480d&gt;] cpu_startup_entry+0xbc/0x137
  [&lt;ffffffff8102e741&gt;] start_secondary+0x1a0/0x1a5
 Code: 24 14 e8 f1 e5 01 00 31 d2 a8 32 0f 95 c2 49 8b 44 24 2c 49 0b 44 24 24 74 05 83 ca 04 eb 1c 4d 85 ed 74 17 49 8b 85 a8 02 00 00 &lt;66&gt; 8b 40 46 66 c1 e8 07 83 e0 07 c1 e0 03 09 c2 4c 89 e6 48 89
 RIP  [&lt;ffffffff8143c459&gt;] ip6_route_output+0x58/0x82
  RSP &lt;ffff88007fd03668&gt;
 CR2: 0000000000000046
 ---[ end trace 4612329caab37efd ]---

When vxlan interface is created without explicit group definition, the
default_dst protocol family is initialiazed to AF_UNSPEC and the driver
assumes IPv4 configuration. On the other side, the default_dst protocol
family is used to differentiate between IPv4 and IPv6 cases and, since,
AF_UNSPEC != AF_INET, the processing takes the IPv6 path.

Making the IPv4 assumption explicit by settting default_dst protocol
family to AF_INET4 and preventing mixing of IPv4 and IPv6 addresses in
snooped fdb entries fixes the corner case crashes.

Signed-off-by: Mike Rapoport &lt;mike.rapoport@ravellosystems.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the vxlan interface is created without explicit group definition,
there are corner cases which may cause kernel panic.

For instance, in the following scenario:

node A:
$ ip link add dev vxlan42  address 2c:c2:60:00:10:20 type vxlan id 42
$ ip addr add dev vxlan42 10.0.0.1/24
$ ip link set up dev vxlan42
$ arp -i vxlan42 -s 10.0.0.2 2c:c2:60:00:01:02
$ bridge fdb add dev vxlan42 to 2c:c2:60:00:01:02 dst &lt;IPv4 address&gt;
$ ping 10.0.0.2

node B:
$ ip link add dev vxlan42 address 2c:c2:60:00:01:02 type vxlan id 42
$ ip addr add dev vxlan42 10.0.0.2/24
$ ip link set up dev vxlan42
$ arp -i vxlan42 -s 10.0.0.1 2c:c2:60:00:10:20

node B crashes:

 vxlan42: 2c:c2:60:00:10:20 migrated from 4011:eca4:c0a8:6466:c0a8:6415:8e09:2118 to (invalid address)
 vxlan42: 2c:c2:60:00:10:20 migrated from 4011:eca4:c0a8:6466:c0a8:6415:8e09:2118 to (invalid address)
 BUG: unable to handle kernel NULL pointer dereference at 0000000000000046
 IP: [&lt;ffffffff8143c459&gt;] ip6_route_output+0x58/0x82
 PGD 7bd89067 PUD 7bd4e067 PMD 0
 Oops: 0000 [#1] SMP
 Modules linked in:
 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.14.0-rc8-hvx-xen-00019-g97a5221-dirty #154
 Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
 task: ffff88007c774f50 ti: ffff88007c79c000 task.ti: ffff88007c79c000
 RIP: 0010:[&lt;ffffffff8143c459&gt;]  [&lt;ffffffff8143c459&gt;] ip6_route_output+0x58/0x82
 RSP: 0018:ffff88007fd03668  EFLAGS: 00010282
 RAX: 0000000000000000 RBX: ffffffff8186a000 RCX: 0000000000000040
 RDX: 0000000000000000 RSI: ffff88007b0e4a80 RDI: ffff88007fd03754
 RBP: ffff88007fd03688 R08: ffff88007b0e4a80 R09: 0000000000000000
 R10: 0200000a0100000a R11: 0001002200000000 R12: ffff88007fd03740
 R13: ffff88007b0e4a80 R14: ffff88007b0e4a80 R15: ffff88007bba0c50
 FS:  0000000000000000(0000) GS:ffff88007fd00000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
 CR2: 0000000000000046 CR3: 000000007bb60000 CR4: 00000000000006e0
 Stack:
  0000000000000000 ffff88007fd037a0 ffffffff8186a000 ffff88007fd03740
  ffff88007fd036c8 ffffffff814320bb 0000000000006e49 ffff88007b8b7360
  ffff88007bdbf200 ffff88007bcbc000 ffff88007b8b7000 ffff88007b8b7360
 Call Trace:
  &lt;IRQ&gt;
  [&lt;ffffffff814320bb&gt;] ip6_dst_lookup_tail+0x2d/0xa4
  [&lt;ffffffff814322a5&gt;] ip6_dst_lookup+0x10/0x12
  [&lt;ffffffff81323b4e&gt;] vxlan_xmit_one+0x32a/0x68c
  [&lt;ffffffff814a325a&gt;] ? _raw_spin_unlock_irqrestore+0x12/0x14
  [&lt;ffffffff8104c551&gt;] ? lock_timer_base.isra.23+0x26/0x4b
  [&lt;ffffffff8132451a&gt;] vxlan_xmit+0x66a/0x6a8
  [&lt;ffffffff8141a365&gt;] ? ipt_do_table+0x35f/0x37e
  [&lt;ffffffff81204ba2&gt;] ? selinux_ip_postroute+0x41/0x26e
  [&lt;ffffffff8139d0c1&gt;] dev_hard_start_xmit+0x2ce/0x3ce
  [&lt;ffffffff8139d491&gt;] __dev_queue_xmit+0x2d0/0x392
  [&lt;ffffffff813b380f&gt;] ? eth_header+0x28/0xb5
  [&lt;ffffffff8139d569&gt;] dev_queue_xmit+0xb/0xd
  [&lt;ffffffff813a5aa6&gt;] neigh_resolve_output+0x134/0x152
  [&lt;ffffffff813db741&gt;] ip_finish_output2+0x236/0x299
  [&lt;ffffffff813dc074&gt;] ip_finish_output+0x98/0x9d
  [&lt;ffffffff813dc749&gt;] ip_output+0x62/0x67
  [&lt;ffffffff813da9f2&gt;] dst_output+0xf/0x11
  [&lt;ffffffff813dc11c&gt;] ip_local_out+0x1b/0x1f
  [&lt;ffffffff813dcf1b&gt;] ip_send_skb+0x11/0x37
  [&lt;ffffffff813dcf70&gt;] ip_push_pending_frames+0x2f/0x33
  [&lt;ffffffff813ff732&gt;] icmp_push_reply+0x106/0x115
  [&lt;ffffffff813ff9e4&gt;] icmp_reply+0x142/0x164
  [&lt;ffffffff813ffb3b&gt;] icmp_echo.part.16+0x46/0x48
  [&lt;ffffffff813c1d30&gt;] ? nf_iterate+0x43/0x80
  [&lt;ffffffff813d8037&gt;] ? xfrm4_policy_check.constprop.11+0x52/0x52
  [&lt;ffffffff813ffb62&gt;] icmp_echo+0x25/0x27
  [&lt;ffffffff814005f7&gt;] icmp_rcv+0x1d2/0x20a
  [&lt;ffffffff813d8037&gt;] ? xfrm4_policy_check.constprop.11+0x52/0x52
  [&lt;ffffffff813d810d&gt;] ip_local_deliver_finish+0xd6/0x14f
  [&lt;ffffffff813d8037&gt;] ? xfrm4_policy_check.constprop.11+0x52/0x52
  [&lt;ffffffff813d7fde&gt;] NF_HOOK.constprop.10+0x4c/0x53
  [&lt;ffffffff813d82bf&gt;] ip_local_deliver+0x4a/0x4f
  [&lt;ffffffff813d7f7b&gt;] ip_rcv_finish+0x253/0x26a
  [&lt;ffffffff813d7d28&gt;] ? inet_add_protocol+0x3e/0x3e
  [&lt;ffffffff813d7fde&gt;] NF_HOOK.constprop.10+0x4c/0x53
  [&lt;ffffffff813d856a&gt;] ip_rcv+0x2a6/0x2ec
  [&lt;ffffffff8139a9a0&gt;] __netif_receive_skb_core+0x43e/0x478
  [&lt;ffffffff812a346f&gt;] ? virtqueue_poll+0x16/0x27
  [&lt;ffffffff8139aa2f&gt;] __netif_receive_skb+0x55/0x5a
  [&lt;ffffffff8139aaaa&gt;] process_backlog+0x76/0x12f
  [&lt;ffffffff8139add8&gt;] net_rx_action+0xa2/0x1ab
  [&lt;ffffffff81047847&gt;] __do_softirq+0xca/0x1d1
  [&lt;ffffffff81047ace&gt;] irq_exit+0x3e/0x85
  [&lt;ffffffff8100b98b&gt;] do_IRQ+0xa9/0xc4
  [&lt;ffffffff814a37ad&gt;] common_interrupt+0x6d/0x6d
  &lt;EOI&gt;
  [&lt;ffffffff810378db&gt;] ? native_safe_halt+0x6/0x8
  [&lt;ffffffff810110c7&gt;] default_idle+0x9/0xd
  [&lt;ffffffff81011694&gt;] arch_cpu_idle+0x13/0x1c
  [&lt;ffffffff8107480d&gt;] cpu_startup_entry+0xbc/0x137
  [&lt;ffffffff8102e741&gt;] start_secondary+0x1a0/0x1a5
 Code: 24 14 e8 f1 e5 01 00 31 d2 a8 32 0f 95 c2 49 8b 44 24 2c 49 0b 44 24 24 74 05 83 ca 04 eb 1c 4d 85 ed 74 17 49 8b 85 a8 02 00 00 &lt;66&gt; 8b 40 46 66 c1 e8 07 83 e0 07 c1 e0 03 09 c2 4c 89 e6 48 89
 RIP  [&lt;ffffffff8143c459&gt;] ip6_route_output+0x58/0x82
  RSP &lt;ffff88007fd03668&gt;
 CR2: 0000000000000046
 ---[ end trace 4612329caab37efd ]---

When vxlan interface is created without explicit group definition, the
default_dst protocol family is initialiazed to AF_UNSPEC and the driver
assumes IPv4 configuration. On the other side, the default_dst protocol
family is used to differentiate between IPv4 and IPv6 cases and, since,
AF_UNSPEC != AF_INET, the processing takes the IPv6 path.

Making the IPv4 assumption explicit by settting default_dst protocol
family to AF_INET4 and preventing mixing of IPv4 and IPv6 addresses in
snooped fdb entries fixes the corner case crashes.

Signed-off-by: Mike Rapoport &lt;mike.rapoport@ravellosystems.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
