<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/net/ipv6, branch v3.13.8</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>ipv6: ipv6_find_hdr restore prev functionality</title>
<updated>2014-03-24T04:44:01+00:00</updated>
<author>
<name>Hans Schillstrom</name>
<email>hans@schillstrom.com</email>
</author>
<published>2014-02-27T11:57:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=ff00f2f44b96edd9a31ba331f2c5bd2289ef8572'/>
<id>ff00f2f44b96edd9a31ba331f2c5bd2289ef8572</id>
<content type='text'>
[ Upstream commit accfe0e356327da5bd53da8852b93fc22de9b5fc ]

The commit 9195bb8e381d81d5a315f911904cdf0cfcc919b8 ("ipv6: improve
ipv6_find_hdr() to skip empty routing headers") broke ipv6_find_hdr().

When a target is specified like IPPROTO_ICMPV6 ipv6_find_hdr()
returns -ENOENT when it's found, not the header as expected.

A part of IPVS is broken and possible also nft_exthdr_eval().
When target is -1 which it is most cases, it works.

This patch exits the do while loop if the specific header is found
so the nexthdr could be returned as expected.

Reported-by: Art -kwaak- van Breemen &lt;ard@telegraafnet.nl&gt;
Signed-off-by: Hans Schillstrom &lt;hans@schillstrom.com&gt;
CC:Ansis Atteka &lt;aatteka@nicira.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 accfe0e356327da5bd53da8852b93fc22de9b5fc ]

The commit 9195bb8e381d81d5a315f911904cdf0cfcc919b8 ("ipv6: improve
ipv6_find_hdr() to skip empty routing headers") broke ipv6_find_hdr().

When a target is specified like IPPROTO_ICMPV6 ipv6_find_hdr()
returns -ENOENT when it's found, not the header as expected.

A part of IPVS is broken and possible also nft_exthdr_eval().
When target is -1 which it is most cases, it works.

This patch exits the do while loop if the specific header is found
so the nexthdr could be returned as expected.

Reported-by: Art -kwaak- van Breemen &lt;ard@telegraafnet.nl&gt;
Signed-off-by: Hans Schillstrom &lt;hans@schillstrom.com&gt;
CC:Ansis Atteka &lt;aatteka@nicira.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: ipv6: better estimate tunnel header cut for correct ufo handling</title>
<updated>2014-03-24T04:44:00+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2014-02-23T23:48:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=503f0b1c00d9d399701571c056fde026339b0be8'/>
<id>503f0b1c00d9d399701571c056fde026339b0be8</id>
<content type='text'>
[ Upstream commit 91a48a2e85a3b70ce10ead34b4ab5347f8d215c9 ]

Currently the UFO fragmentation process does not correctly handle inner
UDP frames.

(The following tcpdumps are captured on the parent interface with ufo
disabled while tunnel has ufo enabled, 2000 bytes payload, mtu 1280,
both sit device):

IPv6:
16:39:10.031613 IP (tos 0x0, ttl 64, id 3208, offset 0, flags [DF], proto IPv6 (41), length 1300)
    192.168.122.151 &gt; 1.1.1.1: IP6 (hlim 64, next-header Fragment (44) payload length: 1240) 2001::1 &gt; 2001::8: frag (0x00000001:0|1232) 44883 &gt; distinct: UDP, length 2000
16:39:10.031709 IP (tos 0x0, ttl 64, id 3209, offset 0, flags [DF], proto IPv6 (41), length 844)
    192.168.122.151 &gt; 1.1.1.1: IP6 (hlim 64, next-header Fragment (44) payload length: 784) 2001::1 &gt; 2001::8: frag (0x00000001:0|776) 58979 &gt; 46366: UDP, length 5471

We can see that fragmentation header offset is not correctly updated.
(fragmentation id handling is corrected by 916e4cf46d0204 ("ipv6: reuse
ip6_frag_id from ip6_ufo_append_data")).

IPv4:
16:39:57.737761 IP (tos 0x0, ttl 64, id 3209, offset 0, flags [DF], proto IPIP (4), length 1296)
    192.168.122.151 &gt; 1.1.1.1: IP (tos 0x0, ttl 64, id 57034, offset 0, flags [none], proto UDP (17), length 1276)
    192.168.99.1.35961 &gt; 192.168.99.2.distinct: UDP, length 2000
16:39:57.738028 IP (tos 0x0, ttl 64, id 3210, offset 0, flags [DF], proto IPIP (4), length 792)
    192.168.122.151 &gt; 1.1.1.1: IP (tos 0x0, ttl 64, id 57035, offset 0, flags [none], proto UDP (17), length 772)
    192.168.99.1.13531 &gt; 192.168.99.2.20653: UDP, length 51109

In this case fragmentation id is incremented and offset is not updated.

First, I aligned inet_gso_segment and ipv6_gso_segment:
* align naming of flags
* ipv6_gso_segment: setting skb-&gt;encapsulation is unnecessary, as we
  always ensure that the state of this flag is left untouched when
  returning from upper gso segmenation function
* ipv6_gso_segment: move skb_reset_inner_headers below updating the
  fragmentation header data, we don't care for updating fragmentation
  header data
* remove currently unneeded comment indicating skb-&gt;encapsulation might
  get changed by upper gso_segment callback (gre and udp-tunnel reset
  encapsulation after segmentation on each fragment)

If we encounter an IPIP or SIT gso skb we now check for the protocol ==
IPPROTO_UDP and that we at least have already traversed another ip(6)
protocol header.

The reason why we have to special case GSO_IPIP and GSO_SIT is that
we reset skb-&gt;encapsulation to 0 while skb_mac_gso_segment the inner
protocol of GSO_UDP_TUNNEL or GSO_GRE packets.

Reported-by: Wolfgang Walter &lt;linux@stwm.de&gt;
Cc: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
Cc: Tom Herbert &lt;therbert@google.com&gt;
Cc: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&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 91a48a2e85a3b70ce10ead34b4ab5347f8d215c9 ]

Currently the UFO fragmentation process does not correctly handle inner
UDP frames.

(The following tcpdumps are captured on the parent interface with ufo
disabled while tunnel has ufo enabled, 2000 bytes payload, mtu 1280,
both sit device):

IPv6:
16:39:10.031613 IP (tos 0x0, ttl 64, id 3208, offset 0, flags [DF], proto IPv6 (41), length 1300)
    192.168.122.151 &gt; 1.1.1.1: IP6 (hlim 64, next-header Fragment (44) payload length: 1240) 2001::1 &gt; 2001::8: frag (0x00000001:0|1232) 44883 &gt; distinct: UDP, length 2000
16:39:10.031709 IP (tos 0x0, ttl 64, id 3209, offset 0, flags [DF], proto IPv6 (41), length 844)
    192.168.122.151 &gt; 1.1.1.1: IP6 (hlim 64, next-header Fragment (44) payload length: 784) 2001::1 &gt; 2001::8: frag (0x00000001:0|776) 58979 &gt; 46366: UDP, length 5471

We can see that fragmentation header offset is not correctly updated.
(fragmentation id handling is corrected by 916e4cf46d0204 ("ipv6: reuse
ip6_frag_id from ip6_ufo_append_data")).

IPv4:
16:39:57.737761 IP (tos 0x0, ttl 64, id 3209, offset 0, flags [DF], proto IPIP (4), length 1296)
    192.168.122.151 &gt; 1.1.1.1: IP (tos 0x0, ttl 64, id 57034, offset 0, flags [none], proto UDP (17), length 1276)
    192.168.99.1.35961 &gt; 192.168.99.2.distinct: UDP, length 2000
16:39:57.738028 IP (tos 0x0, ttl 64, id 3210, offset 0, flags [DF], proto IPIP (4), length 792)
    192.168.122.151 &gt; 1.1.1.1: IP (tos 0x0, ttl 64, id 57035, offset 0, flags [none], proto UDP (17), length 772)
    192.168.99.1.13531 &gt; 192.168.99.2.20653: UDP, length 51109

In this case fragmentation id is incremented and offset is not updated.

First, I aligned inet_gso_segment and ipv6_gso_segment:
* align naming of flags
* ipv6_gso_segment: setting skb-&gt;encapsulation is unnecessary, as we
  always ensure that the state of this flag is left untouched when
  returning from upper gso segmenation function
* ipv6_gso_segment: move skb_reset_inner_headers below updating the
  fragmentation header data, we don't care for updating fragmentation
  header data
* remove currently unneeded comment indicating skb-&gt;encapsulation might
  get changed by upper gso_segment callback (gre and udp-tunnel reset
  encapsulation after segmentation on each fragment)

If we encounter an IPIP or SIT gso skb we now check for the protocol ==
IPPROTO_UDP and that we at least have already traversed another ip(6)
protocol header.

The reason why we have to special case GSO_IPIP and GSO_SIT is that
we reset skb-&gt;encapsulation to 0 while skb_mac_gso_segment the inner
protocol of GSO_UDP_TUNNEL or GSO_GRE packets.

Reported-by: Wolfgang Walter &lt;linux@stwm.de&gt;
Cc: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
Cc: Tom Herbert &lt;therbert@google.com&gt;
Cc: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&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>ipv6: reuse ip6_frag_id from ip6_ufo_append_data</title>
<updated>2014-03-24T04:44:00+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2014-02-21T01:55:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7d6282f767f556a3427ad82e664ac3428295d71a'/>
<id>7d6282f767f556a3427ad82e664ac3428295d71a</id>
<content type='text'>
[ Upstream commit 916e4cf46d0204806c062c8c6c4d1f633852c5b6 ]

Currently we generate a new fragmentation id on UFO segmentation. It
is pretty hairy to identify the correct net namespace and dst there.
Especially tunnels use IFF_XMIT_DST_RELEASE and thus have no skb_dst
available at all.

This causes unreliable or very predictable ipv6 fragmentation id
generation while segmentation.

Luckily we already have pregenerated the ip6_frag_id in
ip6_ufo_append_data and can use it here.

Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&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 916e4cf46d0204806c062c8c6c4d1f633852c5b6 ]

Currently we generate a new fragmentation id on UFO segmentation. It
is pretty hairy to identify the correct net namespace and dst there.
Especially tunnels use IFF_XMIT_DST_RELEASE and thus have no skb_dst
available at all.

This causes unreliable or very predictable ipv6 fragmentation id
generation while segmentation.

Luckily we already have pregenerated the ip6_frag_id in
ip6_ufo_append_data and can use it here.

Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&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: ip, ipv6: handle gso skbs in forwarding path</title>
<updated>2014-03-07T06:06:14+00:00</updated>
<author>
<name>Florian Westphal</name>
<email>fw@strlen.de</email>
</author>
<published>2014-02-21T19:46:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f7152716d66f5c24327b6a664a4feb4fbd46fc6c'/>
<id>f7152716d66f5c24327b6a664a4feb4fbd46fc6c</id>
<content type='text'>
commit fe6cc55f3a9a053482a76f5a6b2257cee51b4663 upstream.

Marcelo Ricardo Leitner reported problems when the forwarding link path
has a lower mtu than the incoming one if the inbound interface supports GRO.

Given:
Host &lt;mtu1500&gt; R1 &lt;mtu1200&gt; R2

Host sends tcp stream which is routed via R1 and R2.  R1 performs GRO.

In this case, the kernel will fail to send ICMP fragmentation needed
messages (or pkt too big for ipv6), as GSO packets currently bypass dstmtu
checks in forward path. Instead, Linux tries to send out packets exceeding
the mtu.

When locking route MTU on Host (i.e., no ipv4 DF bit set), R1 does
not fragment the packets when forwarding, and again tries to send out
packets exceeding R1-R2 link mtu.

This alters the forwarding dstmtu checks to take the individual gso
segment lengths into account.

For ipv6, we send out pkt too big error for gso if the individual
segments are too big.

For ipv4, we either send icmp fragmentation needed, or, if the DF bit
is not set, perform software segmentation and let the output path
create fragments when the packet is leaving the machine.
It is not 100% correct as the error message will contain the headers of
the GRO skb instead of the original/segmented one, but it seems to
work fine in my (limited) tests.

Eric Dumazet suggested to simply shrink mss via -&gt;gso_size to avoid
sofware segmentation.

However it turns out that skb_segment() assumes skb nr_frags is related
to mss size so we would BUG there.  I don't want to mess with it considering
Herbert and Eric disagree on what the correct behavior should be.

Hannes Frederic Sowa notes that when we would shrink gso_size
skb_segment would then also need to deal with the case where
SKB_MAX_FRAGS would be exceeded.

This uses sofware segmentation in the forward path when we hit ipv4
non-DF packets and the outgoing link mtu is too small.  Its not perfect,
but given the lack of bug reports wrt. GRO fwd being broken this is a
rare case anyway.  Also its not like this could not be improved later
once the dust settles.

Acked-by: Herbert Xu &lt;herbert@gondor.apana.org.au&gt;
Reported-by: Marcelo Ricardo Leitner &lt;mleitner@redhat.com&gt;
Signed-off-by: Florian Westphal &lt;fw@strlen.de&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>
commit fe6cc55f3a9a053482a76f5a6b2257cee51b4663 upstream.

Marcelo Ricardo Leitner reported problems when the forwarding link path
has a lower mtu than the incoming one if the inbound interface supports GRO.

Given:
Host &lt;mtu1500&gt; R1 &lt;mtu1200&gt; R2

Host sends tcp stream which is routed via R1 and R2.  R1 performs GRO.

In this case, the kernel will fail to send ICMP fragmentation needed
messages (or pkt too big for ipv6), as GSO packets currently bypass dstmtu
checks in forward path. Instead, Linux tries to send out packets exceeding
the mtu.

When locking route MTU on Host (i.e., no ipv4 DF bit set), R1 does
not fragment the packets when forwarding, and again tries to send out
packets exceeding R1-R2 link mtu.

This alters the forwarding dstmtu checks to take the individual gso
segment lengths into account.

For ipv6, we send out pkt too big error for gso if the individual
segments are too big.

For ipv4, we either send icmp fragmentation needed, or, if the DF bit
is not set, perform software segmentation and let the output path
create fragments when the packet is leaving the machine.
It is not 100% correct as the error message will contain the headers of
the GRO skb instead of the original/segmented one, but it seems to
work fine in my (limited) tests.

Eric Dumazet suggested to simply shrink mss via -&gt;gso_size to avoid
sofware segmentation.

However it turns out that skb_segment() assumes skb nr_frags is related
to mss size so we would BUG there.  I don't want to mess with it considering
Herbert and Eric disagree on what the correct behavior should be.

Hannes Frederic Sowa notes that when we would shrink gso_size
skb_segment would then also need to deal with the case where
SKB_MAX_FRAGS would be exceeded.

This uses sofware segmentation in the forward path when we hit ipv4
non-DF packets and the outgoing link mtu is too small.  Its not perfect,
but given the lack of bug reports wrt. GRO fwd being broken this is a
rare case anyway.  Also its not like this could not be improved later
once the dust settles.

Acked-by: Herbert Xu &lt;herbert@gondor.apana.org.au&gt;
Reported-by: Marcelo Ricardo Leitner &lt;mleitner@redhat.com&gt;
Signed-off-by: Florian Westphal &lt;fw@strlen.de&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>gre: add link local route when local addr is any</title>
<updated>2014-03-07T06:06:13+00:00</updated>
<author>
<name>Nicolas Dichtel</name>
<email>nicolas.dichtel@6wind.com</email>
</author>
<published>2014-02-17T13:22:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=07eb46bc2368898014e075a93a10eb5bff2f8a81'/>
<id>07eb46bc2368898014e075a93a10eb5bff2f8a81</id>
<content type='text'>
[ Upstream commit 08b44656c08c8c2f73cdac2a058be2880e3361f2 ]

This bug was reported by Steinar H. Gunderson and was introduced by commit
f7cb8886335d ("sit/gre6: don't try to add the same route two times").

root@morgental:~# ip tunnel add foo mode gre remote 1.2.3.4 ttl 64
root@morgental:~# ip link set foo up mtu 1468
root@morgental:~# ip -6 route show dev foo
fe80::/64  proto kernel  metric 256

but after the above commit, no such route shows up.

There is no link local route because dev-&gt;dev_addr is 0 (because local ipv4
address is 0), hence no link local address is configured.

In this scenario, the link local address is added manually: 'ip -6 addr add
fe80::1 dev foo' and because prefix is /128, no link local route is added by the
kernel.

Even if the right things to do is to add the link local address with a /64
prefix, we need to restore the previous behavior to avoid breaking userpace.

Reported-by: Steinar H. Gunderson &lt;sesse@samfundet.no&gt;
Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.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 08b44656c08c8c2f73cdac2a058be2880e3361f2 ]

This bug was reported by Steinar H. Gunderson and was introduced by commit
f7cb8886335d ("sit/gre6: don't try to add the same route two times").

root@morgental:~# ip tunnel add foo mode gre remote 1.2.3.4 ttl 64
root@morgental:~# ip link set foo up mtu 1468
root@morgental:~# ip -6 route show dev foo
fe80::/64  proto kernel  metric 256

but after the above commit, no such route shows up.

There is no link local route because dev-&gt;dev_addr is 0 (because local ipv4
address is 0), hence no link local address is configured.

In this scenario, the link local address is added manually: 'ip -6 addr add
fe80::1 dev foo' and because prefix is /128, no link local route is added by the
kernel.

Even if the right things to do is to add the link local address with a /64
prefix, we need to restore the previous behavior to avoid breaking userpace.

Reported-by: Steinar H. Gunderson &lt;sesse@samfundet.no&gt;
Signed-off-by: Nicolas Dichtel &lt;nicolas.dichtel@6wind.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 memory leak if TPROXY used with TCP early demux</title>
<updated>2014-02-06T19:34:08+00:00</updated>
<author>
<name>Holger Eitzenberger</name>
<email>holger@eitzenberger.org</email>
</author>
<published>2014-01-27T09:33:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0fdedfaac984ec03e8012362fdbd2f2aab77a4ac'/>
<id>0fdedfaac984ec03e8012362fdbd2f2aab77a4ac</id>
<content type='text'>
[ Upstream commit a452ce345d63ddf92cd101e4196569f8718ad319 ]

I see a memory leak when using a transparent HTTP proxy using TPROXY
together with TCP early demux and Kernel v3.8.13.15 (Ubuntu stable):

unreferenced object 0xffff88008cba4a40 (size 1696):
  comm "softirq", pid 0, jiffies 4294944115 (age 8907.520s)
  hex dump (first 32 bytes):
    0a e0 20 6a 40 04 1b 37 92 be 32 e2 e8 b4 00 00  .. j@..7..2.....
    02 00 07 01 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;ffffffff810b710a&gt;] kmem_cache_alloc+0xad/0xb9
    [&lt;ffffffff81270185&gt;] sk_prot_alloc+0x29/0xc5
    [&lt;ffffffff812702cf&gt;] sk_clone_lock+0x14/0x283
    [&lt;ffffffff812aaf3a&gt;] inet_csk_clone_lock+0xf/0x7b
    [&lt;ffffffff8129a893&gt;] netlink_broadcast+0x14/0x16
    [&lt;ffffffff812c1573&gt;] tcp_create_openreq_child+0x1b/0x4c3
    [&lt;ffffffff812c033e&gt;] tcp_v4_syn_recv_sock+0x38/0x25d
    [&lt;ffffffff812c13e4&gt;] tcp_check_req+0x25c/0x3d0
    [&lt;ffffffff812bf87a&gt;] tcp_v4_do_rcv+0x287/0x40e
    [&lt;ffffffff812a08a7&gt;] ip_route_input_noref+0x843/0xa55
    [&lt;ffffffff812bfeca&gt;] tcp_v4_rcv+0x4c9/0x725
    [&lt;ffffffff812a26f4&gt;] ip_local_deliver_finish+0xe9/0x154
    [&lt;ffffffff8127a927&gt;] __netif_receive_skb+0x4b2/0x514
    [&lt;ffffffff8127aa77&gt;] process_backlog+0xee/0x1c5
    [&lt;ffffffff8127c949&gt;] net_rx_action+0xa7/0x200
    [&lt;ffffffff81209d86&gt;] add_interrupt_randomness+0x39/0x157

But there are many more, resulting in the machine going OOM after some
days.

From looking at the TPROXY code, and with help from Florian, I see
that the memory leak is introduced in tcp_v4_early_demux():

  void tcp_v4_early_demux(struct sk_buff *skb)
  {
    /* ... */

    iph = ip_hdr(skb);
    th = tcp_hdr(skb);

    if (th-&gt;doff &lt; sizeof(struct tcphdr) / 4)
        return;

    sk = __inet_lookup_established(dev_net(skb-&gt;dev), &amp;tcp_hashinfo,
                       iph-&gt;saddr, th-&gt;source,
                       iph-&gt;daddr, ntohs(th-&gt;dest),
                       skb-&gt;skb_iif);
    if (sk) {
        skb-&gt;sk = sk;

where the socket is assigned unconditionally to skb-&gt;sk, also bumping
the refcnt on it.  This is problematic, because in our case the skb
has already a socket assigned in the TPROXY target.  This then results
in the leak I see.

The very same issue seems to be with IPv6, but haven't tested.

Reviewed-by: Florian Westphal &lt;fw@strlen.de&gt;
Signed-off-by: Holger Eitzenberger &lt;holger@eitzenberger.org&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 a452ce345d63ddf92cd101e4196569f8718ad319 ]

I see a memory leak when using a transparent HTTP proxy using TPROXY
together with TCP early demux and Kernel v3.8.13.15 (Ubuntu stable):

unreferenced object 0xffff88008cba4a40 (size 1696):
  comm "softirq", pid 0, jiffies 4294944115 (age 8907.520s)
  hex dump (first 32 bytes):
    0a e0 20 6a 40 04 1b 37 92 be 32 e2 e8 b4 00 00  .. j@..7..2.....
    02 00 07 01 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [&lt;ffffffff810b710a&gt;] kmem_cache_alloc+0xad/0xb9
    [&lt;ffffffff81270185&gt;] sk_prot_alloc+0x29/0xc5
    [&lt;ffffffff812702cf&gt;] sk_clone_lock+0x14/0x283
    [&lt;ffffffff812aaf3a&gt;] inet_csk_clone_lock+0xf/0x7b
    [&lt;ffffffff8129a893&gt;] netlink_broadcast+0x14/0x16
    [&lt;ffffffff812c1573&gt;] tcp_create_openreq_child+0x1b/0x4c3
    [&lt;ffffffff812c033e&gt;] tcp_v4_syn_recv_sock+0x38/0x25d
    [&lt;ffffffff812c13e4&gt;] tcp_check_req+0x25c/0x3d0
    [&lt;ffffffff812bf87a&gt;] tcp_v4_do_rcv+0x287/0x40e
    [&lt;ffffffff812a08a7&gt;] ip_route_input_noref+0x843/0xa55
    [&lt;ffffffff812bfeca&gt;] tcp_v4_rcv+0x4c9/0x725
    [&lt;ffffffff812a26f4&gt;] ip_local_deliver_finish+0xe9/0x154
    [&lt;ffffffff8127a927&gt;] __netif_receive_skb+0x4b2/0x514
    [&lt;ffffffff8127aa77&gt;] process_backlog+0xee/0x1c5
    [&lt;ffffffff8127c949&gt;] net_rx_action+0xa7/0x200
    [&lt;ffffffff81209d86&gt;] add_interrupt_randomness+0x39/0x157

But there are many more, resulting in the machine going OOM after some
days.

From looking at the TPROXY code, and with help from Florian, I see
that the memory leak is introduced in tcp_v4_early_demux():

  void tcp_v4_early_demux(struct sk_buff *skb)
  {
    /* ... */

    iph = ip_hdr(skb);
    th = tcp_hdr(skb);

    if (th-&gt;doff &lt; sizeof(struct tcphdr) / 4)
        return;

    sk = __inet_lookup_established(dev_net(skb-&gt;dev), &amp;tcp_hashinfo,
                       iph-&gt;saddr, th-&gt;source,
                       iph-&gt;daddr, ntohs(th-&gt;dest),
                       skb-&gt;skb_iif);
    if (sk) {
        skb-&gt;sk = sk;

where the socket is assigned unconditionally to skb-&gt;sk, also bumping
the refcnt on it.  This is problematic, because in our case the skb
has already a socket assigned in the TPROXY target.  This then results
in the leak I see.

The very same issue seems to be with IPv6, but haven't tested.

Reviewed-by: Florian Westphal &lt;fw@strlen.de&gt;
Signed-off-by: Holger Eitzenberger &lt;holger@eitzenberger.org&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>ipv6: simplify detection of first operational link-local address on interface</title>
<updated>2014-01-18T02:10:01+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2014-01-16T19:13:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=11ffff752c6a5adc86f7dd397b2f75af8f917c51'/>
<id>11ffff752c6a5adc86f7dd397b2f75af8f917c51</id>
<content type='text'>
In commit 1ec047eb4751e3 ("ipv6: introduce per-interface counter for
dad-completed ipv6 addresses") I build the detection of the first
operational link-local address much to complex. Additionally this code
now has a race condition.

Replace it with a much simpler variant, which just scans the address
list when duplicate address detection completes, to check if this is
the first valid link local address and send RS and MLD reports then.

Fixes: 1ec047eb4751e3 ("ipv6: introduce per-interface counter for dad-completed ipv6 addresses")
Reported-by: Jiri Pirko &lt;jiri@resnulli.us&gt;
Cc: Flavio Leitner &lt;fbl@redhat.com&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Acked-by: Flavio Leitner &lt;fbl@redhat.com&gt;
Acked-by: Jiri Pirko &lt;jiri@resnulli.us&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 commit 1ec047eb4751e3 ("ipv6: introduce per-interface counter for
dad-completed ipv6 addresses") I build the detection of the first
operational link-local address much to complex. Additionally this code
now has a race condition.

Replace it with a much simpler variant, which just scans the address
list when duplicate address detection completes, to check if this is
the first valid link local address and send RS and MLD reports then.

Fixes: 1ec047eb4751e3 ("ipv6: introduce per-interface counter for dad-completed ipv6 addresses")
Reported-by: Jiri Pirko &lt;jiri@resnulli.us&gt;
Cc: Flavio Leitner &lt;fbl@redhat.com&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Acked-by: Flavio Leitner &lt;fbl@redhat.com&gt;
Acked-by: Jiri Pirko &lt;jiri@resnulli.us&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: avoid reference counter overflows on fib_rules in multicast forwarding</title>
<updated>2014-01-15T01:37:25+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2014-01-13T01:45:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=95f4a45de1a0f172b35451fc52283290adb21f6e'/>
<id>95f4a45de1a0f172b35451fc52283290adb21f6e</id>
<content type='text'>
Bob Falken reported that after 4G packets, multicast forwarding stopped
working. This was because of a rule reference counter overflow which
freed the rule as soon as the overflow happend.

This patch solves this by adding the FIB_LOOKUP_NOREF flag to
fib_rules_lookup calls. This is safe even from non-rcu locked sections
as in this case the flag only implies not taking a reference to the rule,
which we don't need at all.

Rules only hold references to the namespace, which are guaranteed to be
available during the call of the non-rcu protected function reg_vif_xmit
because of the interface reference which itself holds a reference to
the net namespace.

Fixes: f0ad0860d01e47 ("ipv4: ipmr: support multiple tables")
Fixes: d1db275dd3f6e4 ("ipv6: ip6mr: support multiple tables")
Reported-by: Bob Falken &lt;NetFestivalHaveFun@gmx.com&gt;
Cc: Patrick McHardy &lt;kaber@trash.net&gt;
Cc: Thomas Graf &lt;tgraf@suug.ch&gt;
Cc: Julian Anastasov &lt;ja@ssi.bg&gt;
Cc: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Acked-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>
Bob Falken reported that after 4G packets, multicast forwarding stopped
working. This was because of a rule reference counter overflow which
freed the rule as soon as the overflow happend.

This patch solves this by adding the FIB_LOOKUP_NOREF flag to
fib_rules_lookup calls. This is safe even from non-rcu locked sections
as in this case the flag only implies not taking a reference to the rule,
which we don't need at all.

Rules only hold references to the namespace, which are guaranteed to be
available during the call of the non-rcu protected function reg_vif_xmit
because of the interface reference which itself holds a reference to
the net namespace.

Fixes: f0ad0860d01e47 ("ipv4: ipmr: support multiple tables")
Fixes: d1db275dd3f6e4 ("ipv6: ip6mr: support multiple tables")
Reported-by: Bob Falken &lt;NetFestivalHaveFun@gmx.com&gt;
Cc: Patrick McHardy &lt;kaber@trash.net&gt;
Cc: Thomas Graf &lt;tgraf@suug.ch&gt;
Cc: Julian Anastasov &lt;ja@ssi.bg&gt;
Cc: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Acked-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>ipv6: add link-local, sit and loopback address with INFINITY_LIFE_TIME</title>
<updated>2014-01-10T04:07:47+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2014-01-08T14:43:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=07edd741c838e376933b445bbf2692f83b6774e6'/>
<id>07edd741c838e376933b445bbf2692f83b6774e6</id>
<content type='text'>
In the past the IFA_PERMANENT flag indicated, that the valid and preferred
lifetime where ignored. Since change fad8da3e085ddf ("ipv6 addrconf: fix
preferred lifetime state-changing behavior while valid_lft is infinity")
we honour at least the preferred lifetime on those addresses. As such
the valid lifetime gets recalculated and updated to 0.

If loopback address is added manually this problem does not occur.
Also if NetworkManager manages IPv6, those addresses will get added via
inet6_rtm_newaddr and thus will have a correct lifetime, too.

Reported-by: François-Xavier Le Bail &lt;fx.lebail@yahoo.com&gt;
Reported-by: Damien Wyart &lt;damien.wyart@gmail.com&gt;
Fixes: fad8da3e085ddf ("ipv6 addrconf: fix preferred lifetime state-changing behavior while valid_lft is infinity")
Cc: Yasushi Asano &lt;yasushi.asano@jp.fujitsu.com&gt;
Signed-off-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>
In the past the IFA_PERMANENT flag indicated, that the valid and preferred
lifetime where ignored. Since change fad8da3e085ddf ("ipv6 addrconf: fix
preferred lifetime state-changing behavior while valid_lft is infinity")
we honour at least the preferred lifetime on those addresses. As such
the valid lifetime gets recalculated and updated to 0.

If loopback address is added manually this problem does not occur.
Also if NetworkManager manages IPv6, those addresses will get added via
inet6_rtm_newaddr and thus will have a correct lifetime, too.

Reported-by: François-Xavier Le Bail &lt;fx.lebail@yahoo.com&gt;
Reported-by: Damien Wyart &lt;damien.wyart@gmail.com&gt;
Fixes: fad8da3e085ddf ("ipv6 addrconf: fix preferred lifetime state-changing behavior while valid_lft is infinity")
Cc: Yasushi Asano &lt;yasushi.asano@jp.fujitsu.com&gt;
Signed-off-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>ipv6: pcpu_tstats.syncp should be initialised in ip6_vti.c</title>
<updated>2014-01-07T19:12:46+00:00</updated>
<author>
<name>Li RongQing</name>
<email>roy.qing.li@gmail.com</email>
</author>
<published>2014-01-07T07:39:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=657e5d19657542631461e72fdc375b1e83e72070'/>
<id>657e5d19657542631461e72fdc375b1e83e72070</id>
<content type='text'>
initialise pcpu_tstats.syncp to kill the calltrace
[   11.973950] Call Trace:
[   11.973950]  [&lt;819bbaff&gt;] dump_stack+0x48/0x60
[   11.973950]  [&lt;819bbaff&gt;] dump_stack+0x48/0x60
[   11.973950]  [&lt;81078dcf&gt;] __lock_acquire.isra.22+0x1bf/0xc10
[   11.973950]  [&lt;81078dcf&gt;] __lock_acquire.isra.22+0x1bf/0xc10
[   11.973950]  [&lt;81079fa7&gt;] lock_acquire+0x77/0xa0
[   11.973950]  [&lt;81079fa7&gt;] lock_acquire+0x77/0xa0
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;8183862d&gt;] ip_tunnel_get_stats64+0x6d/0x230
[   11.973950]  [&lt;8183862d&gt;] ip_tunnel_get_stats64+0x6d/0x230
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;811cf8c1&gt;] ? __nla_reserve+0x21/0xd0
[   11.973950]  [&lt;811cf8c1&gt;] ? __nla_reserve+0x21/0xd0
[   11.973950]  [&lt;817ca7ab&gt;] dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817ca7ab&gt;] dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817d5409&gt;] rtnl_fill_ifinfo+0x569/0xe20
[   11.973950]  [&lt;817d5409&gt;] rtnl_fill_ifinfo+0x569/0xe20
[   11.973950]  [&lt;810352e0&gt;] ? kvm_clock_read+0x20/0x30
[   11.973950]  [&lt;810352e0&gt;] ? kvm_clock_read+0x20/0x30
[   11.973950]  [&lt;81008e38&gt;] ? sched_clock+0x8/0x10
[   11.973950]  [&lt;81008e38&gt;] ? sched_clock+0x8/0x10
[   11.973950]  [&lt;8106ba45&gt;] ? sched_clock_local+0x25/0x170
[   11.973950]  [&lt;8106ba45&gt;] ? sched_clock_local+0x25/0x170
[   11.973950]  [&lt;810da6bd&gt;] ? __kmalloc+0x3d/0x90
[   11.973950]  [&lt;810da6bd&gt;] ? __kmalloc+0x3d/0x90
[   11.973950]  [&lt;817b8c10&gt;] ? __kmalloc_reserve.isra.41+0x20/0x70
[   11.973950]  [&lt;817b8c10&gt;] ? __kmalloc_reserve.isra.41+0x20/0x70
[   11.973950]  [&lt;810da81a&gt;] ? slob_alloc_node+0x2a/0x60
[   11.973950]  [&lt;810da81a&gt;] ? slob_alloc_node+0x2a/0x60
[   11.973950]  [&lt;817b919a&gt;] ? __alloc_skb+0x6a/0x2b0
[   11.973950]  [&lt;817b919a&gt;] ? __alloc_skb+0x6a/0x2b0
[   11.973950]  [&lt;817d8795&gt;] rtmsg_ifinfo+0x65/0xe0
[   11.973950]  [&lt;817d8795&gt;] rtmsg_ifinfo+0x65/0xe0
[   11.973950]  [&lt;817cbd31&gt;] register_netdevice+0x531/0x5a0
[   11.973950]  [&lt;817cbd31&gt;] register_netdevice+0x531/0x5a0
[   11.973950]  [&lt;81892b87&gt;] ? ip6_tnl_get_cap+0x27/0x90
[   11.973950]  [&lt;81892b87&gt;] ? ip6_tnl_get_cap+0x27/0x90
[   11.973950]  [&lt;817cbdb6&gt;] register_netdev+0x16/0x30
[   11.973950]  [&lt;817cbdb6&gt;] register_netdev+0x16/0x30
[   11.973950]  [&lt;81f574a6&gt;] vti6_init_net+0x1c4/0x1d4
[   11.973950]  [&lt;81f574a6&gt;] vti6_init_net+0x1c4/0x1d4
[   11.973950]  [&lt;81f573af&gt;] ? vti6_init_net+0xcd/0x1d4
[   11.973950]  [&lt;81f573af&gt;] ? vti6_init_net+0xcd/0x1d4
[   11.973950]  [&lt;817c16df&gt;] ops_init.constprop.11+0x17f/0x1c0
[   11.973950]  [&lt;817c16df&gt;] ops_init.constprop.11+0x17f/0x1c0
[   11.973950]  [&lt;817c1779&gt;] register_pernet_operations.isra.9+0x59/0x90
[   11.973950]  [&lt;817c1779&gt;] register_pernet_operations.isra.9+0x59/0x90
[   11.973950]  [&lt;817c18d1&gt;] register_pernet_device+0x21/0x60
[   11.973950]  [&lt;817c18d1&gt;] register_pernet_device+0x21/0x60
[   11.973950]  [&lt;81f574b6&gt;] ? vti6_init_net+0x1d4/0x1d4
[   11.973950]  [&lt;81f574b6&gt;] ? vti6_init_net+0x1d4/0x1d4
[   11.973950]  [&lt;81f574c7&gt;] vti6_tunnel_init+0x11/0x68
[   11.973950]  [&lt;81f574c7&gt;] vti6_tunnel_init+0x11/0x68
[   11.973950]  [&lt;81f572a1&gt;] ? mip6_init+0x73/0xb4
[   11.973950]  [&lt;81f572a1&gt;] ? mip6_init+0x73/0xb4
[   11.973950]  [&lt;81f0cba4&gt;] do_one_initcall+0xbb/0x15b
[   11.973950]  [&lt;81f0cba4&gt;] do_one_initcall+0xbb/0x15b
[   11.973950]  [&lt;811a00d8&gt;] ? sha_transform+0x528/0x1150
[   11.973950]  [&lt;811a00d8&gt;] ? sha_transform+0x528/0x1150
[   11.973950]  [&lt;81f0c544&gt;] ? repair_env_string+0x12/0x51
[   11.973950]  [&lt;81f0c544&gt;] ? repair_env_string+0x12/0x51
[   11.973950]  [&lt;8105c30d&gt;] ? parse_args+0x2ad/0x440
[   11.973950]  [&lt;8105c30d&gt;] ? parse_args+0x2ad/0x440
[   11.973950]  [&lt;810546be&gt;] ? __usermodehelper_set_disable_depth+0x3e/0x50
[   11.973950]  [&lt;810546be&gt;] ? __usermodehelper_set_disable_depth+0x3e/0x50
[   11.973950]  [&lt;81f0cd27&gt;] kernel_init_freeable+0xe3/0x182
[   11.973950]  [&lt;81f0cd27&gt;] kernel_init_freeable+0xe3/0x182
[   11.973950]  [&lt;81f0c532&gt;] ? do_early_param+0x7a/0x7a
[   11.973950]  [&lt;81f0c532&gt;] ? do_early_param+0x7a/0x7a
[   11.973950]  [&lt;819b5b1b&gt;] kernel_init+0xb/0x100
[   11.973950]  [&lt;819b5b1b&gt;] kernel_init+0xb/0x100
[   11.973950]  [&lt;819cebf7&gt;] ret_from_kernel_thread+0x1b/0x28
[   11.973950]  [&lt;819cebf7&gt;] ret_from_kernel_thread+0x1b/0x28
[   11.973950]  [&lt;819b5b10&gt;] ? rest_init+0xc0/0xc0
[   11.973950]  [&lt;819b5b10&gt;] ? rest_init+0xc0/0xc0

Before 469bdcefdc ("ipv6: fix the use of pcpu_tstats in ip6_vti.c"),
the pcpu_tstats.syncp is not used to pretect the 64bit elements of
pcpu_tstats, so not appear this calltrace.

Reported-by: Fengguang Wu &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Li RongQing &lt;roy.qing.li@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>
initialise pcpu_tstats.syncp to kill the calltrace
[   11.973950] Call Trace:
[   11.973950]  [&lt;819bbaff&gt;] dump_stack+0x48/0x60
[   11.973950]  [&lt;819bbaff&gt;] dump_stack+0x48/0x60
[   11.973950]  [&lt;81078dcf&gt;] __lock_acquire.isra.22+0x1bf/0xc10
[   11.973950]  [&lt;81078dcf&gt;] __lock_acquire.isra.22+0x1bf/0xc10
[   11.973950]  [&lt;81079fa7&gt;] lock_acquire+0x77/0xa0
[   11.973950]  [&lt;81079fa7&gt;] lock_acquire+0x77/0xa0
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;8183862d&gt;] ip_tunnel_get_stats64+0x6d/0x230
[   11.973950]  [&lt;8183862d&gt;] ip_tunnel_get_stats64+0x6d/0x230
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817ca7ab&gt;] ? dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;811cf8c1&gt;] ? __nla_reserve+0x21/0xd0
[   11.973950]  [&lt;811cf8c1&gt;] ? __nla_reserve+0x21/0xd0
[   11.973950]  [&lt;817ca7ab&gt;] dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817ca7ab&gt;] dev_get_stats+0xcb/0x130
[   11.973950]  [&lt;817d5409&gt;] rtnl_fill_ifinfo+0x569/0xe20
[   11.973950]  [&lt;817d5409&gt;] rtnl_fill_ifinfo+0x569/0xe20
[   11.973950]  [&lt;810352e0&gt;] ? kvm_clock_read+0x20/0x30
[   11.973950]  [&lt;810352e0&gt;] ? kvm_clock_read+0x20/0x30
[   11.973950]  [&lt;81008e38&gt;] ? sched_clock+0x8/0x10
[   11.973950]  [&lt;81008e38&gt;] ? sched_clock+0x8/0x10
[   11.973950]  [&lt;8106ba45&gt;] ? sched_clock_local+0x25/0x170
[   11.973950]  [&lt;8106ba45&gt;] ? sched_clock_local+0x25/0x170
[   11.973950]  [&lt;810da6bd&gt;] ? __kmalloc+0x3d/0x90
[   11.973950]  [&lt;810da6bd&gt;] ? __kmalloc+0x3d/0x90
[   11.973950]  [&lt;817b8c10&gt;] ? __kmalloc_reserve.isra.41+0x20/0x70
[   11.973950]  [&lt;817b8c10&gt;] ? __kmalloc_reserve.isra.41+0x20/0x70
[   11.973950]  [&lt;810da81a&gt;] ? slob_alloc_node+0x2a/0x60
[   11.973950]  [&lt;810da81a&gt;] ? slob_alloc_node+0x2a/0x60
[   11.973950]  [&lt;817b919a&gt;] ? __alloc_skb+0x6a/0x2b0
[   11.973950]  [&lt;817b919a&gt;] ? __alloc_skb+0x6a/0x2b0
[   11.973950]  [&lt;817d8795&gt;] rtmsg_ifinfo+0x65/0xe0
[   11.973950]  [&lt;817d8795&gt;] rtmsg_ifinfo+0x65/0xe0
[   11.973950]  [&lt;817cbd31&gt;] register_netdevice+0x531/0x5a0
[   11.973950]  [&lt;817cbd31&gt;] register_netdevice+0x531/0x5a0
[   11.973950]  [&lt;81892b87&gt;] ? ip6_tnl_get_cap+0x27/0x90
[   11.973950]  [&lt;81892b87&gt;] ? ip6_tnl_get_cap+0x27/0x90
[   11.973950]  [&lt;817cbdb6&gt;] register_netdev+0x16/0x30
[   11.973950]  [&lt;817cbdb6&gt;] register_netdev+0x16/0x30
[   11.973950]  [&lt;81f574a6&gt;] vti6_init_net+0x1c4/0x1d4
[   11.973950]  [&lt;81f574a6&gt;] vti6_init_net+0x1c4/0x1d4
[   11.973950]  [&lt;81f573af&gt;] ? vti6_init_net+0xcd/0x1d4
[   11.973950]  [&lt;81f573af&gt;] ? vti6_init_net+0xcd/0x1d4
[   11.973950]  [&lt;817c16df&gt;] ops_init.constprop.11+0x17f/0x1c0
[   11.973950]  [&lt;817c16df&gt;] ops_init.constprop.11+0x17f/0x1c0
[   11.973950]  [&lt;817c1779&gt;] register_pernet_operations.isra.9+0x59/0x90
[   11.973950]  [&lt;817c1779&gt;] register_pernet_operations.isra.9+0x59/0x90
[   11.973950]  [&lt;817c18d1&gt;] register_pernet_device+0x21/0x60
[   11.973950]  [&lt;817c18d1&gt;] register_pernet_device+0x21/0x60
[   11.973950]  [&lt;81f574b6&gt;] ? vti6_init_net+0x1d4/0x1d4
[   11.973950]  [&lt;81f574b6&gt;] ? vti6_init_net+0x1d4/0x1d4
[   11.973950]  [&lt;81f574c7&gt;] vti6_tunnel_init+0x11/0x68
[   11.973950]  [&lt;81f574c7&gt;] vti6_tunnel_init+0x11/0x68
[   11.973950]  [&lt;81f572a1&gt;] ? mip6_init+0x73/0xb4
[   11.973950]  [&lt;81f572a1&gt;] ? mip6_init+0x73/0xb4
[   11.973950]  [&lt;81f0cba4&gt;] do_one_initcall+0xbb/0x15b
[   11.973950]  [&lt;81f0cba4&gt;] do_one_initcall+0xbb/0x15b
[   11.973950]  [&lt;811a00d8&gt;] ? sha_transform+0x528/0x1150
[   11.973950]  [&lt;811a00d8&gt;] ? sha_transform+0x528/0x1150
[   11.973950]  [&lt;81f0c544&gt;] ? repair_env_string+0x12/0x51
[   11.973950]  [&lt;81f0c544&gt;] ? repair_env_string+0x12/0x51
[   11.973950]  [&lt;8105c30d&gt;] ? parse_args+0x2ad/0x440
[   11.973950]  [&lt;8105c30d&gt;] ? parse_args+0x2ad/0x440
[   11.973950]  [&lt;810546be&gt;] ? __usermodehelper_set_disable_depth+0x3e/0x50
[   11.973950]  [&lt;810546be&gt;] ? __usermodehelper_set_disable_depth+0x3e/0x50
[   11.973950]  [&lt;81f0cd27&gt;] kernel_init_freeable+0xe3/0x182
[   11.973950]  [&lt;81f0cd27&gt;] kernel_init_freeable+0xe3/0x182
[   11.973950]  [&lt;81f0c532&gt;] ? do_early_param+0x7a/0x7a
[   11.973950]  [&lt;81f0c532&gt;] ? do_early_param+0x7a/0x7a
[   11.973950]  [&lt;819b5b1b&gt;] kernel_init+0xb/0x100
[   11.973950]  [&lt;819b5b1b&gt;] kernel_init+0xb/0x100
[   11.973950]  [&lt;819cebf7&gt;] ret_from_kernel_thread+0x1b/0x28
[   11.973950]  [&lt;819cebf7&gt;] ret_from_kernel_thread+0x1b/0x28
[   11.973950]  [&lt;819b5b10&gt;] ? rest_init+0xc0/0xc0
[   11.973950]  [&lt;819b5b10&gt;] ? rest_init+0xc0/0xc0

Before 469bdcefdc ("ipv6: fix the use of pcpu_tstats in ip6_vti.c"),
the pcpu_tstats.syncp is not used to pretect the 64bit elements of
pcpu_tstats, so not appear this calltrace.

Reported-by: Fengguang Wu &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Li RongQing &lt;roy.qing.li@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
