<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/net, branch v3.14.9</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>udp: ipv4: do not waste time in __udp4_lib_mcast_demux_lookup</title>
<updated>2014-06-26T19:15:40+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2014-06-12T23:13:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=724d0d32fa2a6242a0f03c1baeb8310e7ddcf9a9'/>
<id>724d0d32fa2a6242a0f03c1baeb8310e7ddcf9a9</id>
<content type='text'>
[ Upstream commit 63c6f81cdde58c41da62a8d8a209592e42a0203e ]

Its too easy to add thousand of UDP sockets on a particular bucket,
and slow down an innocent multicast receiver.

Early demux is supposed to be an optimization, we should avoid spending
too much time in it.

It is interesting to note __udp4_lib_demux_lookup() only tries to
match first socket in the chain.

10 is the threshold we already have in __udp4_lib_lookup() to switch
to secondary hash.

Fixes: 421b3885bf6d5 ("udp: ipv4: Add udp early demux")
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Reported-by: David Held &lt;drheld@google.com&gt;
Cc: Shawn Bohrer &lt;sbohrer@rgmadvisors.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 63c6f81cdde58c41da62a8d8a209592e42a0203e ]

Its too easy to add thousand of UDP sockets on a particular bucket,
and slow down an innocent multicast receiver.

Early demux is supposed to be an optimization, we should avoid spending
too much time in it.

It is interesting to note __udp4_lib_demux_lookup() only tries to
match first socket in the chain.

10 is the threshold we already have in __udp4_lib_lookup() to switch
to secondary hash.

Fixes: 421b3885bf6d5 ("udp: ipv4: Add udp early demux")
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Reported-by: David Held &lt;drheld@google.com&gt;
Cc: Shawn Bohrer &lt;sbohrer@rgmadvisors.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rtnetlink: fix userspace API breakage for iproute2 &lt; v3.9.0</title>
<updated>2014-06-26T19:15:40+00:00</updated>
<author>
<name>Michal Schmidt</name>
<email>mschmidt@redhat.com</email>
</author>
<published>2014-05-28T12:15:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=322a117adb270457d409535feaebe36ddfa23025'/>
<id>322a117adb270457d409535feaebe36ddfa23025</id>
<content type='text'>
[ Upstream commit e5eca6d41f53db48edd8cf88a3f59d2c30227f8e ]

When running RHEL6 userspace on a current upstream kernel, "ip link"
fails to show VF information.

The reason is a kernel&lt;-&gt;userspace API change introduced by commit
88c5b5ce5cb57 ("rtnetlink: Call nlmsg_parse() with correct header length"),
after which the kernel does not see iproute2's IFLA_EXT_MASK attribute
in the netlink request.

iproute2 adjusted for the API change in its commit 63338dca4513
("libnetlink: Use ifinfomsg instead of rtgenmsg in rtnl_wilddump_req_filter").

The problem has been noticed before:
http://marc.info/?l=linux-netdev&amp;m=136692296022182&amp;w=2
(Subject: Re: getting VF link info seems to be broken in 3.9-rc8)

We can do better than tell those with old userspace to upgrade. We can
recognize the old iproute2 in the kernel by checking the netlink message
length. Even when including the IFLA_EXT_MASK attribute, its netlink
message is shorter than struct ifinfomsg.

With this patch "ip link" shows VF information in both old and new
iproute2 versions.

Signed-off-by: Michal Schmidt &lt;mschmidt@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit e5eca6d41f53db48edd8cf88a3f59d2c30227f8e ]

When running RHEL6 userspace on a current upstream kernel, "ip link"
fails to show VF information.

The reason is a kernel&lt;-&gt;userspace API change introduced by commit
88c5b5ce5cb57 ("rtnetlink: Call nlmsg_parse() with correct header length"),
after which the kernel does not see iproute2's IFLA_EXT_MASK attribute
in the netlink request.

iproute2 adjusted for the API change in its commit 63338dca4513
("libnetlink: Use ifinfomsg instead of rtgenmsg in rtnl_wilddump_req_filter").

The problem has been noticed before:
http://marc.info/?l=linux-netdev&amp;m=136692296022182&amp;w=2
(Subject: Re: getting VF link info seems to be broken in 3.9-rc8)

We can do better than tell those with old userspace to upgrade. We can
recognize the old iproute2 in the kernel by checking the netlink message
length. Even when including the IFLA_EXT_MASK attribute, its netlink
message is shorter than struct ifinfomsg.

With this patch "ip link" shows VF information in both old and new
iproute2 versions.

Signed-off-by: Michal Schmidt &lt;mschmidt@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>sctp: Fix sk_ack_backlog wrap-around problem</title>
<updated>2014-06-26T19:15:40+00:00</updated>
<author>
<name>Xufeng Zhang</name>
<email>xufeng.zhang@windriver.com</email>
</author>
<published>2014-06-12T02:53:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=4c6c201fa9aa76b57b98c993826c4bd9ecb0f264'/>
<id>4c6c201fa9aa76b57b98c993826c4bd9ecb0f264</id>
<content type='text'>
[ Upstream commit d3217b15a19a4779c39b212358a5c71d725822ee ]

Consider the scenario:
For a TCP-style socket, while processing the COOKIE_ECHO chunk in
sctp_sf_do_5_1D_ce(), after it has passed a series of sanity check,
a new association would be created in sctp_unpack_cookie(), but afterwards,
some processing maybe failed, and sctp_association_free() will be called to
free the previously allocated association, in sctp_association_free(),
sk_ack_backlog value is decremented for this socket, since the initial
value for sk_ack_backlog is 0, after the decrement, it will be 65535,
a wrap-around problem happens, and if we want to establish new associations
afterward in the same socket, ABORT would be triggered since sctp deem the
accept queue as full.
Fix this issue by only decrementing sk_ack_backlog for associations in
the endpoint's list.

Fix-suggested-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Signed-off-by: Xufeng Zhang &lt;xufeng.zhang@windriver.com&gt;
Acked-by: Daniel Borkmann &lt;dborkman@redhat.com&gt;
Acked-by: Vlad Yasevich &lt;vyasevich@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit d3217b15a19a4779c39b212358a5c71d725822ee ]

Consider the scenario:
For a TCP-style socket, while processing the COOKIE_ECHO chunk in
sctp_sf_do_5_1D_ce(), after it has passed a series of sanity check,
a new association would be created in sctp_unpack_cookie(), but afterwards,
some processing maybe failed, and sctp_association_free() will be called to
free the previously allocated association, in sctp_association_free(),
sk_ack_backlog value is decremented for this socket, since the initial
value for sk_ack_backlog is 0, after the decrement, it will be 65535,
a wrap-around problem happens, and if we want to establish new associations
afterward in the same socket, ABORT would be triggered since sctp deem the
accept queue as full.
Fix this issue by only decrementing sk_ack_backlog for associations in
the endpoint's list.

Fix-suggested-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Signed-off-by: Xufeng Zhang &lt;xufeng.zhang@windriver.com&gt;
Acked-by: Daniel Borkmann &lt;dborkman@redhat.com&gt;
Acked-by: Vlad Yasevich &lt;vyasevich@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipv4: fix a race in ip4_datagram_release_cb()</title>
<updated>2014-06-26T19:15:40+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2014-06-10T13:43:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3480c0154964f155afef8abceb1118debaf3d5b3'/>
<id>3480c0154964f155afef8abceb1118debaf3d5b3</id>
<content type='text'>
[ Upstream commit 9709674e68646cee5a24e3000b3558d25412203a ]

Alexey gave a AddressSanitizer[1] report that finally gave a good hint
at where was the origin of various problems already reported by Dormando
in the past [2]

Problem comes from the fact that UDP can have a lockless TX path, and
concurrent threads can manipulate sk_dst_cache, while another thread,
is holding socket lock and calls __sk_dst_set() in
ip4_datagram_release_cb() (this was added in linux-3.8)

It seems that all we need to do is to use sk_dst_check() and
sk_dst_set() so that all the writers hold same spinlock
(sk-&gt;sk_dst_lock) to prevent corruptions.

TCP stack do not need this protection, as all sk_dst_cache writers hold
the socket lock.

[1]
https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel

AddressSanitizer: heap-use-after-free in ipv4_dst_check
Read of size 2 by thread T15453:
 [&lt;ffffffff817daa3a&gt;] ipv4_dst_check+0x1a/0x90 ./net/ipv4/route.c:1116
 [&lt;ffffffff8175b789&gt;] __sk_dst_check+0x89/0xe0 ./net/core/sock.c:531
 [&lt;ffffffff81830a36&gt;] ip4_datagram_release_cb+0x46/0x390 ??:0
 [&lt;ffffffff8175eaea&gt;] release_sock+0x17a/0x230 ./net/core/sock.c:2413
 [&lt;ffffffff81830882&gt;] ip4_datagram_connect+0x462/0x5d0 ??:0
 [&lt;ffffffff81846d06&gt;] inet_dgram_connect+0x76/0xd0 ./net/ipv4/af_inet.c:534
 [&lt;ffffffff817580ac&gt;] SYSC_connect+0x15c/0x1c0 ./net/socket.c:1701
 [&lt;ffffffff817596ce&gt;] SyS_connect+0xe/0x10 ./net/socket.c:1682
 [&lt;ffffffff818b0a29&gt;] system_call_fastpath+0x16/0x1b
./arch/x86/kernel/entry_64.S:629

Freed by thread T15455:
 [&lt;ffffffff8178d9b8&gt;] dst_destroy+0xa8/0x160 ./net/core/dst.c:251
 [&lt;ffffffff8178de25&gt;] dst_release+0x45/0x80 ./net/core/dst.c:280
 [&lt;ffffffff818304c1&gt;] ip4_datagram_connect+0xa1/0x5d0 ??:0
 [&lt;ffffffff81846d06&gt;] inet_dgram_connect+0x76/0xd0 ./net/ipv4/af_inet.c:534
 [&lt;ffffffff817580ac&gt;] SYSC_connect+0x15c/0x1c0 ./net/socket.c:1701
 [&lt;ffffffff817596ce&gt;] SyS_connect+0xe/0x10 ./net/socket.c:1682
 [&lt;ffffffff818b0a29&gt;] system_call_fastpath+0x16/0x1b
./arch/x86/kernel/entry_64.S:629

Allocated by thread T15453:
 [&lt;ffffffff8178d291&gt;] dst_alloc+0x81/0x2b0 ./net/core/dst.c:171
 [&lt;ffffffff817db3b7&gt;] rt_dst_alloc+0x47/0x50 ./net/ipv4/route.c:1406
 [&lt;     inlined    &gt;] __ip_route_output_key+0x3e8/0xf70
__mkroute_output ./net/ipv4/route.c:1939
 [&lt;ffffffff817dde08&gt;] __ip_route_output_key+0x3e8/0xf70 ./net/ipv4/route.c:2161
 [&lt;ffffffff817deb34&gt;] ip_route_output_flow+0x14/0x30 ./net/ipv4/route.c:2249
 [&lt;ffffffff81830737&gt;] ip4_datagram_connect+0x317/0x5d0 ??:0
 [&lt;ffffffff81846d06&gt;] inet_dgram_connect+0x76/0xd0 ./net/ipv4/af_inet.c:534
 [&lt;ffffffff817580ac&gt;] SYSC_connect+0x15c/0x1c0 ./net/socket.c:1701
 [&lt;ffffffff817596ce&gt;] SyS_connect+0xe/0x10 ./net/socket.c:1682
 [&lt;ffffffff818b0a29&gt;] system_call_fastpath+0x16/0x1b
./arch/x86/kernel/entry_64.S:629

[2]
&lt;4&gt;[196727.311203] general protection fault: 0000 [#1] SMP
&lt;4&gt;[196727.311224] Modules linked in: xt_TEE xt_dscp xt_DSCP macvlan bridge coretemp crc32_pclmul ghash_clmulni_intel gpio_ich microcode ipmi_watchdog ipmi_devintf sb_edac edac_core lpc_ich mfd_core tpm_tis tpm tpm_bios ipmi_si ipmi_msghandler isci igb libsas i2c_algo_bit ixgbe ptp pps_core mdio
&lt;4&gt;[196727.311333] CPU: 17 PID: 0 Comm: swapper/17 Not tainted 3.10.26 #1
&lt;4&gt;[196727.311344] Hardware name: Supermicro X9DRi-LN4+/X9DR3-LN4+/X9DRi-LN4+/X9DR3-LN4+, BIOS 3.0 07/05/2013
&lt;4&gt;[196727.311364] task: ffff885e6f069700 ti: ffff885e6f072000 task.ti: ffff885e6f072000
&lt;4&gt;[196727.311377] RIP: 0010:[&lt;ffffffff815f8c7f&gt;]  [&lt;ffffffff815f8c7f&gt;] ipv4_dst_destroy+0x4f/0x80
&lt;4&gt;[196727.311399] RSP: 0018:ffff885effd23a70  EFLAGS: 00010282
&lt;4&gt;[196727.311409] RAX: dead000000200200 RBX: ffff8854c398ecc0 RCX: 0000000000000040
&lt;4&gt;[196727.311423] RDX: dead000000100100 RSI: dead000000100100 RDI: dead000000200200
&lt;4&gt;[196727.311437] RBP: ffff885effd23a80 R08: ffffffff815fd9e0 R09: ffff885d5a590800
&lt;4&gt;[196727.311451] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
&lt;4&gt;[196727.311464] R13: ffffffff81c8c280 R14: 0000000000000000 R15: ffff880e85ee16ce
&lt;4&gt;[196727.311510] FS:  0000000000000000(0000) GS:ffff885effd20000(0000) knlGS:0000000000000000
&lt;4&gt;[196727.311554] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
&lt;4&gt;[196727.311581] CR2: 00007a46751eb000 CR3: 0000005e65688000 CR4: 00000000000407e0
&lt;4&gt;[196727.311625] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
&lt;4&gt;[196727.311669] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
&lt;4&gt;[196727.311713] Stack:
&lt;4&gt;[196727.311733]  ffff8854c398ecc0 ffff8854c398ecc0 ffff885effd23ab0 ffffffff815b7f42
&lt;4&gt;[196727.311784]  ffff88be6595bc00 ffff8854c398ecc0 0000000000000000 ffff8854c398ecc0
&lt;4&gt;[196727.311834]  ffff885effd23ad0 ffffffff815b86c6 ffff885d5a590800 ffff8816827821c0
&lt;4&gt;[196727.311885] Call Trace:
&lt;4&gt;[196727.311907]  &lt;IRQ&gt;
&lt;4&gt;[196727.311912]  [&lt;ffffffff815b7f42&gt;] dst_destroy+0x32/0xe0
&lt;4&gt;[196727.311959]  [&lt;ffffffff815b86c6&gt;] dst_release+0x56/0x80
&lt;4&gt;[196727.311986]  [&lt;ffffffff81620bd5&gt;] tcp_v4_do_rcv+0x2a5/0x4a0
&lt;4&gt;[196727.312013]  [&lt;ffffffff81622b5a&gt;] tcp_v4_rcv+0x7da/0x820
&lt;4&gt;[196727.312041]  [&lt;ffffffff815fd9e0&gt;] ? ip_rcv_finish+0x360/0x360
&lt;4&gt;[196727.312070]  [&lt;ffffffff815de02d&gt;] ? nf_hook_slow+0x7d/0x150
&lt;4&gt;[196727.312097]  [&lt;ffffffff815fd9e0&gt;] ? ip_rcv_finish+0x360/0x360
&lt;4&gt;[196727.312125]  [&lt;ffffffff815fda92&gt;] ip_local_deliver_finish+0xb2/0x230
&lt;4&gt;[196727.312154]  [&lt;ffffffff815fdd9a&gt;] ip_local_deliver+0x4a/0x90
&lt;4&gt;[196727.312183]  [&lt;ffffffff815fd799&gt;] ip_rcv_finish+0x119/0x360
&lt;4&gt;[196727.312212]  [&lt;ffffffff815fe00b&gt;] ip_rcv+0x22b/0x340
&lt;4&gt;[196727.312242]  [&lt;ffffffffa0339680&gt;] ? macvlan_broadcast+0x160/0x160 [macvlan]
&lt;4&gt;[196727.312275]  [&lt;ffffffff815b0c62&gt;] __netif_receive_skb_core+0x512/0x640
&lt;4&gt;[196727.312308]  [&lt;ffffffff811427fb&gt;] ? kmem_cache_alloc+0x13b/0x150
&lt;4&gt;[196727.312338]  [&lt;ffffffff815b0db1&gt;] __netif_receive_skb+0x21/0x70
&lt;4&gt;[196727.312368]  [&lt;ffffffff815b0fa1&gt;] netif_receive_skb+0x31/0xa0
&lt;4&gt;[196727.312397]  [&lt;ffffffff815b1ae8&gt;] napi_gro_receive+0xe8/0x140
&lt;4&gt;[196727.312433]  [&lt;ffffffffa00274f1&gt;] ixgbe_poll+0x551/0x11f0 [ixgbe]
&lt;4&gt;[196727.312463]  [&lt;ffffffff815fe00b&gt;] ? ip_rcv+0x22b/0x340
&lt;4&gt;[196727.312491]  [&lt;ffffffff815b1691&gt;] net_rx_action+0x111/0x210
&lt;4&gt;[196727.312521]  [&lt;ffffffff815b0db1&gt;] ? __netif_receive_skb+0x21/0x70
&lt;4&gt;[196727.312552]  [&lt;ffffffff810519d0&gt;] __do_softirq+0xd0/0x270
&lt;4&gt;[196727.312583]  [&lt;ffffffff816cef3c&gt;] call_softirq+0x1c/0x30
&lt;4&gt;[196727.312613]  [&lt;ffffffff81004205&gt;] do_softirq+0x55/0x90
&lt;4&gt;[196727.312640]  [&lt;ffffffff81051c85&gt;] irq_exit+0x55/0x60
&lt;4&gt;[196727.312668]  [&lt;ffffffff816cf5c3&gt;] do_IRQ+0x63/0xe0
&lt;4&gt;[196727.312696]  [&lt;ffffffff816c5aaa&gt;] common_interrupt+0x6a/0x6a
&lt;4&gt;[196727.312722]  &lt;EOI&gt;
&lt;1&gt;[196727.313071] RIP  [&lt;ffffffff815f8c7f&gt;] ipv4_dst_destroy+0x4f/0x80
&lt;4&gt;[196727.313100]  RSP &lt;ffff885effd23a70&gt;
&lt;4&gt;[196727.313377] ---[ end trace 64b3f14fae0f2e29 ]---
&lt;0&gt;[196727.380908] Kernel panic - not syncing: Fatal exception in interrupt

Reported-by: Alexey Preobrazhensky &lt;preobr@google.com&gt;
Reported-by: dormando &lt;dormando@rydia.ne&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Fixes: 8141ed9fcedb2 ("ipv4: Add a socket release callback for datagram sockets")
Cc: Steffen Klassert &lt;steffen.klassert@secunet.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 9709674e68646cee5a24e3000b3558d25412203a ]

Alexey gave a AddressSanitizer[1] report that finally gave a good hint
at where was the origin of various problems already reported by Dormando
in the past [2]

Problem comes from the fact that UDP can have a lockless TX path, and
concurrent threads can manipulate sk_dst_cache, while another thread,
is holding socket lock and calls __sk_dst_set() in
ip4_datagram_release_cb() (this was added in linux-3.8)

It seems that all we need to do is to use sk_dst_check() and
sk_dst_set() so that all the writers hold same spinlock
(sk-&gt;sk_dst_lock) to prevent corruptions.

TCP stack do not need this protection, as all sk_dst_cache writers hold
the socket lock.

[1]
https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel

AddressSanitizer: heap-use-after-free in ipv4_dst_check
Read of size 2 by thread T15453:
 [&lt;ffffffff817daa3a&gt;] ipv4_dst_check+0x1a/0x90 ./net/ipv4/route.c:1116
 [&lt;ffffffff8175b789&gt;] __sk_dst_check+0x89/0xe0 ./net/core/sock.c:531
 [&lt;ffffffff81830a36&gt;] ip4_datagram_release_cb+0x46/0x390 ??:0
 [&lt;ffffffff8175eaea&gt;] release_sock+0x17a/0x230 ./net/core/sock.c:2413
 [&lt;ffffffff81830882&gt;] ip4_datagram_connect+0x462/0x5d0 ??:0
 [&lt;ffffffff81846d06&gt;] inet_dgram_connect+0x76/0xd0 ./net/ipv4/af_inet.c:534
 [&lt;ffffffff817580ac&gt;] SYSC_connect+0x15c/0x1c0 ./net/socket.c:1701
 [&lt;ffffffff817596ce&gt;] SyS_connect+0xe/0x10 ./net/socket.c:1682
 [&lt;ffffffff818b0a29&gt;] system_call_fastpath+0x16/0x1b
./arch/x86/kernel/entry_64.S:629

Freed by thread T15455:
 [&lt;ffffffff8178d9b8&gt;] dst_destroy+0xa8/0x160 ./net/core/dst.c:251
 [&lt;ffffffff8178de25&gt;] dst_release+0x45/0x80 ./net/core/dst.c:280
 [&lt;ffffffff818304c1&gt;] ip4_datagram_connect+0xa1/0x5d0 ??:0
 [&lt;ffffffff81846d06&gt;] inet_dgram_connect+0x76/0xd0 ./net/ipv4/af_inet.c:534
 [&lt;ffffffff817580ac&gt;] SYSC_connect+0x15c/0x1c0 ./net/socket.c:1701
 [&lt;ffffffff817596ce&gt;] SyS_connect+0xe/0x10 ./net/socket.c:1682
 [&lt;ffffffff818b0a29&gt;] system_call_fastpath+0x16/0x1b
./arch/x86/kernel/entry_64.S:629

Allocated by thread T15453:
 [&lt;ffffffff8178d291&gt;] dst_alloc+0x81/0x2b0 ./net/core/dst.c:171
 [&lt;ffffffff817db3b7&gt;] rt_dst_alloc+0x47/0x50 ./net/ipv4/route.c:1406
 [&lt;     inlined    &gt;] __ip_route_output_key+0x3e8/0xf70
__mkroute_output ./net/ipv4/route.c:1939
 [&lt;ffffffff817dde08&gt;] __ip_route_output_key+0x3e8/0xf70 ./net/ipv4/route.c:2161
 [&lt;ffffffff817deb34&gt;] ip_route_output_flow+0x14/0x30 ./net/ipv4/route.c:2249
 [&lt;ffffffff81830737&gt;] ip4_datagram_connect+0x317/0x5d0 ??:0
 [&lt;ffffffff81846d06&gt;] inet_dgram_connect+0x76/0xd0 ./net/ipv4/af_inet.c:534
 [&lt;ffffffff817580ac&gt;] SYSC_connect+0x15c/0x1c0 ./net/socket.c:1701
 [&lt;ffffffff817596ce&gt;] SyS_connect+0xe/0x10 ./net/socket.c:1682
 [&lt;ffffffff818b0a29&gt;] system_call_fastpath+0x16/0x1b
./arch/x86/kernel/entry_64.S:629

[2]
&lt;4&gt;[196727.311203] general protection fault: 0000 [#1] SMP
&lt;4&gt;[196727.311224] Modules linked in: xt_TEE xt_dscp xt_DSCP macvlan bridge coretemp crc32_pclmul ghash_clmulni_intel gpio_ich microcode ipmi_watchdog ipmi_devintf sb_edac edac_core lpc_ich mfd_core tpm_tis tpm tpm_bios ipmi_si ipmi_msghandler isci igb libsas i2c_algo_bit ixgbe ptp pps_core mdio
&lt;4&gt;[196727.311333] CPU: 17 PID: 0 Comm: swapper/17 Not tainted 3.10.26 #1
&lt;4&gt;[196727.311344] Hardware name: Supermicro X9DRi-LN4+/X9DR3-LN4+/X9DRi-LN4+/X9DR3-LN4+, BIOS 3.0 07/05/2013
&lt;4&gt;[196727.311364] task: ffff885e6f069700 ti: ffff885e6f072000 task.ti: ffff885e6f072000
&lt;4&gt;[196727.311377] RIP: 0010:[&lt;ffffffff815f8c7f&gt;]  [&lt;ffffffff815f8c7f&gt;] ipv4_dst_destroy+0x4f/0x80
&lt;4&gt;[196727.311399] RSP: 0018:ffff885effd23a70  EFLAGS: 00010282
&lt;4&gt;[196727.311409] RAX: dead000000200200 RBX: ffff8854c398ecc0 RCX: 0000000000000040
&lt;4&gt;[196727.311423] RDX: dead000000100100 RSI: dead000000100100 RDI: dead000000200200
&lt;4&gt;[196727.311437] RBP: ffff885effd23a80 R08: ffffffff815fd9e0 R09: ffff885d5a590800
&lt;4&gt;[196727.311451] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
&lt;4&gt;[196727.311464] R13: ffffffff81c8c280 R14: 0000000000000000 R15: ffff880e85ee16ce
&lt;4&gt;[196727.311510] FS:  0000000000000000(0000) GS:ffff885effd20000(0000) knlGS:0000000000000000
&lt;4&gt;[196727.311554] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
&lt;4&gt;[196727.311581] CR2: 00007a46751eb000 CR3: 0000005e65688000 CR4: 00000000000407e0
&lt;4&gt;[196727.311625] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
&lt;4&gt;[196727.311669] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
&lt;4&gt;[196727.311713] Stack:
&lt;4&gt;[196727.311733]  ffff8854c398ecc0 ffff8854c398ecc0 ffff885effd23ab0 ffffffff815b7f42
&lt;4&gt;[196727.311784]  ffff88be6595bc00 ffff8854c398ecc0 0000000000000000 ffff8854c398ecc0
&lt;4&gt;[196727.311834]  ffff885effd23ad0 ffffffff815b86c6 ffff885d5a590800 ffff8816827821c0
&lt;4&gt;[196727.311885] Call Trace:
&lt;4&gt;[196727.311907]  &lt;IRQ&gt;
&lt;4&gt;[196727.311912]  [&lt;ffffffff815b7f42&gt;] dst_destroy+0x32/0xe0
&lt;4&gt;[196727.311959]  [&lt;ffffffff815b86c6&gt;] dst_release+0x56/0x80
&lt;4&gt;[196727.311986]  [&lt;ffffffff81620bd5&gt;] tcp_v4_do_rcv+0x2a5/0x4a0
&lt;4&gt;[196727.312013]  [&lt;ffffffff81622b5a&gt;] tcp_v4_rcv+0x7da/0x820
&lt;4&gt;[196727.312041]  [&lt;ffffffff815fd9e0&gt;] ? ip_rcv_finish+0x360/0x360
&lt;4&gt;[196727.312070]  [&lt;ffffffff815de02d&gt;] ? nf_hook_slow+0x7d/0x150
&lt;4&gt;[196727.312097]  [&lt;ffffffff815fd9e0&gt;] ? ip_rcv_finish+0x360/0x360
&lt;4&gt;[196727.312125]  [&lt;ffffffff815fda92&gt;] ip_local_deliver_finish+0xb2/0x230
&lt;4&gt;[196727.312154]  [&lt;ffffffff815fdd9a&gt;] ip_local_deliver+0x4a/0x90
&lt;4&gt;[196727.312183]  [&lt;ffffffff815fd799&gt;] ip_rcv_finish+0x119/0x360
&lt;4&gt;[196727.312212]  [&lt;ffffffff815fe00b&gt;] ip_rcv+0x22b/0x340
&lt;4&gt;[196727.312242]  [&lt;ffffffffa0339680&gt;] ? macvlan_broadcast+0x160/0x160 [macvlan]
&lt;4&gt;[196727.312275]  [&lt;ffffffff815b0c62&gt;] __netif_receive_skb_core+0x512/0x640
&lt;4&gt;[196727.312308]  [&lt;ffffffff811427fb&gt;] ? kmem_cache_alloc+0x13b/0x150
&lt;4&gt;[196727.312338]  [&lt;ffffffff815b0db1&gt;] __netif_receive_skb+0x21/0x70
&lt;4&gt;[196727.312368]  [&lt;ffffffff815b0fa1&gt;] netif_receive_skb+0x31/0xa0
&lt;4&gt;[196727.312397]  [&lt;ffffffff815b1ae8&gt;] napi_gro_receive+0xe8/0x140
&lt;4&gt;[196727.312433]  [&lt;ffffffffa00274f1&gt;] ixgbe_poll+0x551/0x11f0 [ixgbe]
&lt;4&gt;[196727.312463]  [&lt;ffffffff815fe00b&gt;] ? ip_rcv+0x22b/0x340
&lt;4&gt;[196727.312491]  [&lt;ffffffff815b1691&gt;] net_rx_action+0x111/0x210
&lt;4&gt;[196727.312521]  [&lt;ffffffff815b0db1&gt;] ? __netif_receive_skb+0x21/0x70
&lt;4&gt;[196727.312552]  [&lt;ffffffff810519d0&gt;] __do_softirq+0xd0/0x270
&lt;4&gt;[196727.312583]  [&lt;ffffffff816cef3c&gt;] call_softirq+0x1c/0x30
&lt;4&gt;[196727.312613]  [&lt;ffffffff81004205&gt;] do_softirq+0x55/0x90
&lt;4&gt;[196727.312640]  [&lt;ffffffff81051c85&gt;] irq_exit+0x55/0x60
&lt;4&gt;[196727.312668]  [&lt;ffffffff816cf5c3&gt;] do_IRQ+0x63/0xe0
&lt;4&gt;[196727.312696]  [&lt;ffffffff816c5aaa&gt;] common_interrupt+0x6a/0x6a
&lt;4&gt;[196727.312722]  &lt;EOI&gt;
&lt;1&gt;[196727.313071] RIP  [&lt;ffffffff815f8c7f&gt;] ipv4_dst_destroy+0x4f/0x80
&lt;4&gt;[196727.313100]  RSP &lt;ffff885effd23a70&gt;
&lt;4&gt;[196727.313377] ---[ end trace 64b3f14fae0f2e29 ]---
&lt;0&gt;[196727.380908] Kernel panic - not syncing: Fatal exception in interrupt

Reported-by: Alexey Preobrazhensky &lt;preobr@google.com&gt;
Reported-by: dormando &lt;dormando@rydia.ne&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Fixes: 8141ed9fcedb2 ("ipv4: Add a socket release callback for datagram sockets")
Cc: Steffen Klassert &lt;steffen.klassert@secunet.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipip, sit: fix ipv4_{update_pmtu,redirect} calls</title>
<updated>2014-06-26T19:15:40+00:00</updated>
<author>
<name>Dmitry Popov</name>
<email>ixaphire@qrator.net</email>
</author>
<published>2014-06-06T19:19:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=a7b791bc2b6fcc29f7c56a375823d436f7f233ce'/>
<id>a7b791bc2b6fcc29f7c56a375823d436f7f233ce</id>
<content type='text'>
[ Upstream commit 2346829e641b804ece9ac9298136b56d9567c278 ]

ipv4_{update_pmtu,redirect} were called with tunnel's ifindex (t-&gt;dev is a
tunnel netdevice). It caused wrong route lookup and failure of pmtu update or
redirect. We should use the same ifindex that we use in ip_route_output_* in
*tunnel_xmit code. It is t-&gt;parms.link .

Signed-off-by: Dmitry Popov &lt;ixaphire@qrator.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 2346829e641b804ece9ac9298136b56d9567c278 ]

ipv4_{update_pmtu,redirect} were called with tunnel's ifindex (t-&gt;dev is a
tunnel netdevice). It caused wrong route lookup and failure of pmtu update or
redirect. We should use the same ifindex that we use in ip_route_output_* in
*tunnel_xmit code. It is t-&gt;parms.link .

Signed-off-by: Dmitry Popov &lt;ixaphire@qrator.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: force a list_del() in unregister_netdevice_many()</title>
<updated>2014-06-26T19:15:39+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2014-06-06T13:44:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0d0fc9f9e888a6e3fdabdfc08b7c4044b58bc87a'/>
<id>0d0fc9f9e888a6e3fdabdfc08b7c4044b58bc87a</id>
<content type='text'>
[ Upstream commit 87757a917b0b3c0787e0563c679762152be81312 ]

unregister_netdevice_many() API is error prone and we had too
many bugs because of dangling LIST_HEAD on stacks.

See commit f87e6f47933e3e ("net: dont leave active on stack LIST_HEAD")

In fact, instead of making sure no caller leaves an active list_head,
just force a list_del() in the callee. No one seems to need to access
the list after unregister_netdevice_many()

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 87757a917b0b3c0787e0563c679762152be81312 ]

unregister_netdevice_many() API is error prone and we had too
many bugs because of dangling LIST_HEAD on stacks.

See commit f87e6f47933e3e ("net: dont leave active on stack LIST_HEAD")

In fact, instead of making sure no caller leaves an active list_head,
just force a list_del() in the callee. No one seems to need to access
the list after unregister_netdevice_many()

Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tcp: fix cwnd undo on DSACK in F-RTO</title>
<updated>2014-06-26T19:15:39+00:00</updated>
<author>
<name>Yuchung Cheng</name>
<email>ycheng@google.com</email>
</author>
<published>2014-05-30T22:25:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d86b9e396a82cf7988a9ba3b9943f47f146ad770'/>
<id>d86b9e396a82cf7988a9ba3b9943f47f146ad770</id>
<content type='text'>
[ Upstream commit 0cfa5c07d6d1d7f8e710fc671c5ba1ce85e09fa4 ]

This bug is discovered by an recent F-RTO issue on tcpm list
https://www.ietf.org/mail-archive/web/tcpm/current/msg08794.html

The bug is that currently F-RTO does not use DSACK to undo cwnd in
certain cases: upon receiving an ACK after the RTO retransmission in
F-RTO, and the ACK has DSACK indicating the retransmission is spurious,
the sender only calls tcp_try_undo_loss() if some never retransmisted
data is sacked (FLAG_ORIG_DATA_SACKED).

The correct behavior is to unconditionally call tcp_try_undo_loss so
the DSACK information is used properly to undo the cwnd reduction.

Signed-off-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 0cfa5c07d6d1d7f8e710fc671c5ba1ce85e09fa4 ]

This bug is discovered by an recent F-RTO issue on tcpm list
https://www.ietf.org/mail-archive/web/tcpm/current/msg08794.html

The bug is that currently F-RTO does not use DSACK to undo cwnd in
certain cases: upon receiving an ACK after the RTO retransmission in
F-RTO, and the ACK has DSACK indicating the retransmission is spurious,
the sender only calls tcp_try_undo_loss() if some never retransmisted
data is sacked (FLAG_ORIG_DATA_SACKED).

The correct behavior is to unconditionally call tcp_try_undo_loss so
the DSACK information is used properly to undo the cwnd reduction.

Signed-off-by: Yuchung Cheng &lt;ycheng@google.com&gt;
Signed-off-by: Neal Cardwell &lt;ncardwell@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: fix inet_getid() and ipv6_select_ident() bugs</title>
<updated>2014-06-26T19:15:39+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2014-05-29T15:45:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e5ec00f5d24123cca753234933abe5bf75b1a4d4'/>
<id>e5ec00f5d24123cca753234933abe5bf75b1a4d4</id>
<content type='text'>
[ Upstream commit 39c36094d78c39e038c1e499b2364e13bce36f54 ]

I noticed we were sending wrong IPv4 ID in TCP flows when MTU discovery
is disabled.
Note how GSO/TSO packets do not have monotonically incrementing ID.

06:37:41.575531 IP (id 14227, proto: TCP (6), length: 4396)
06:37:41.575534 IP (id 14272, proto: TCP (6), length: 65212)
06:37:41.575544 IP (id 14312, proto: TCP (6), length: 57972)
06:37:41.575678 IP (id 14317, proto: TCP (6), length: 7292)
06:37:41.575683 IP (id 14361, proto: TCP (6), length: 63764)

It appears I introduced this bug in linux-3.1.

inet_getid() must return the old value of peer-&gt;ip_id_count,
not the new one.

Lets revert this part, and remove the prevention of
a null identification field in IPv6 Fragment Extension Header,
which is dubious and not even done properly.

Fixes: 87c48fa3b463 ("ipv6: make fragment identifications less predictable")
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 39c36094d78c39e038c1e499b2364e13bce36f54 ]

I noticed we were sending wrong IPv4 ID in TCP flows when MTU discovery
is disabled.
Note how GSO/TSO packets do not have monotonically incrementing ID.

06:37:41.575531 IP (id 14227, proto: TCP (6), length: 4396)
06:37:41.575534 IP (id 14272, proto: TCP (6), length: 65212)
06:37:41.575544 IP (id 14312, proto: TCP (6), length: 57972)
06:37:41.575678 IP (id 14317, proto: TCP (6), length: 7292)
06:37:41.575683 IP (id 14361, proto: TCP (6), length: 63764)

It appears I introduced this bug in linux-3.1.

inet_getid() must return the old value of peer-&gt;ip_id_count,
not the new one.

Lets revert this part, and remove the prevention of
a null identification field in IPv6 Fragment Extension Header,
which is dubious and not even done properly.

Fixes: 87c48fa3b463 ("ipv6: make fragment identifications less predictable")
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: tunnels - enable module autoloading</title>
<updated>2014-06-26T19:15:39+00:00</updated>
<author>
<name>Tom Gundersen</name>
<email>teg@jklm.no</email>
</author>
<published>2014-05-15T21:21:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=54b3bda49c9888d8e1655bf8c7b73c5d15fda34c'/>
<id>54b3bda49c9888d8e1655bf8c7b73c5d15fda34c</id>
<content type='text'>
[ Upstream commit f98f89a0104454f35a62d681683c844f6dbf4043 ]

Enable the module alias hookup to allow tunnel modules to be autoloaded on demand.

This is in line with how most other netdev kinds work, and will allow userspace
to create tunnels without having CAP_SYS_MODULE.

Signed-off-by: Tom Gundersen &lt;teg@jklm.no&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit f98f89a0104454f35a62d681683c844f6dbf4043 ]

Enable the module alias hookup to allow tunnel modules to be autoloaded on demand.

This is in line with how most other netdev kinds work, and will allow userspace
to create tunnels without having CAP_SYS_MODULE.

Signed-off-by: Tom Gundersen &lt;teg@jklm.no&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bridge: Prevent insertion of FDB entry with disallowed vlan</title>
<updated>2014-06-26T19:15:39+00:00</updated>
<author>
<name>Toshiaki Makita</name>
<email>makita.toshiaki@lab.ntt.co.jp</email>
</author>
<published>2014-05-26T06:15:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=317d1e9c6a1c6f045b1b40e9baf60de6a3927f06'/>
<id>317d1e9c6a1c6f045b1b40e9baf60de6a3927f06</id>
<content type='text'>
[ Upstream commit e0d7968ab6c8bce2437b36fa7f04117e333f196d ]

br_handle_local_finish() is allowing us to insert an FDB entry with
disallowed vlan. For example, when port 1 and 2 are communicating in
vlan 10, and even if vlan 10 is disallowed on port 3, port 3 can
interfere with their communication by spoofed src mac address with
vlan id 10.

Note: Even if it is judged that a frame should not be learned, it should
not be dropped because it is destined for not forwarding layer but higher
layer. See IEEE 802.1Q-2011 8.13.10.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Acked-by: Vlad Yasevich &lt;vyasevic@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit e0d7968ab6c8bce2437b36fa7f04117e333f196d ]

br_handle_local_finish() is allowing us to insert an FDB entry with
disallowed vlan. For example, when port 1 and 2 are communicating in
vlan 10, and even if vlan 10 is disallowed on port 3, port 3 can
interfere with their communication by spoofed src mac address with
vlan id 10.

Note: Even if it is judged that a frame should not be learned, it should
not be dropped because it is destined for not forwarding layer but higher
layer. See IEEE 802.1Q-2011 8.13.10.

Signed-off-by: Toshiaki Makita &lt;makita.toshiaki@lab.ntt.co.jp&gt;
Acked-by: Vlad Yasevich &lt;vyasevic@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
