<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/net/ipv6/ip6_output.c, branch linux-3.1.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>net: introduce DST_NOPEER dst flag</title>
<updated>2012-01-06T22:17:31+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-12-22T04:15:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=d23270aae3214c26691f95922a63c70549232c22'/>
<id>d23270aae3214c26691f95922a63c70549232c22</id>
<content type='text'>
[ Upstream commit e688a604807647c9450f9c12a7cb6d027150a895 ]

Chris Boot reported crashes occurring in ipv6_select_ident().

[  461.457562] RIP: 0010:[&lt;ffffffff812dde61&gt;]  [&lt;ffffffff812dde61&gt;]
ipv6_select_ident+0x31/0xa7

[  461.578229] Call Trace:
[  461.580742] &lt;IRQ&gt;
[  461.582870]  [&lt;ffffffff812efa7f&gt;] ? udp6_ufo_fragment+0x124/0x1a2
[  461.589054]  [&lt;ffffffff812dbfe0&gt;] ? ipv6_gso_segment+0xc0/0x155
[  461.595140]  [&lt;ffffffff812700c6&gt;] ? skb_gso_segment+0x208/0x28b
[  461.601198]  [&lt;ffffffffa03f236b&gt;] ? ipv6_confirm+0x146/0x15e
[nf_conntrack_ipv6]
[  461.608786]  [&lt;ffffffff81291c4d&gt;] ? nf_iterate+0x41/0x77
[  461.614227]  [&lt;ffffffff81271d64&gt;] ? dev_hard_start_xmit+0x357/0x543
[  461.620659]  [&lt;ffffffff81291cf6&gt;] ? nf_hook_slow+0x73/0x111
[  461.626440]  [&lt;ffffffffa0379745&gt;] ? br_parse_ip_options+0x19a/0x19a
[bridge]
[  461.633581]  [&lt;ffffffff812722ff&gt;] ? dev_queue_xmit+0x3af/0x459
[  461.639577]  [&lt;ffffffffa03747d2&gt;] ? br_dev_queue_push_xmit+0x72/0x76
[bridge]
[  461.646887]  [&lt;ffffffffa03791e3&gt;] ? br_nf_post_routing+0x17d/0x18f
[bridge]
[  461.653997]  [&lt;ffffffff81291c4d&gt;] ? nf_iterate+0x41/0x77
[  461.659473]  [&lt;ffffffffa0374760&gt;] ? br_flood+0xfa/0xfa [bridge]
[  461.665485]  [&lt;ffffffff81291cf6&gt;] ? nf_hook_slow+0x73/0x111
[  461.671234]  [&lt;ffffffffa0374760&gt;] ? br_flood+0xfa/0xfa [bridge]
[  461.677299]  [&lt;ffffffffa0379215&gt;] ?
nf_bridge_update_protocol+0x20/0x20 [bridge]
[  461.684891]  [&lt;ffffffffa03bb0e5&gt;] ? nf_ct_zone+0xa/0x17 [nf_conntrack]
[  461.691520]  [&lt;ffffffffa0374760&gt;] ? br_flood+0xfa/0xfa [bridge]
[  461.697572]  [&lt;ffffffffa0374812&gt;] ? NF_HOOK.constprop.8+0x3c/0x56
[bridge]
[  461.704616]  [&lt;ffffffffa0379031&gt;] ?
nf_bridge_push_encap_header+0x1c/0x26 [bridge]
[  461.712329]  [&lt;ffffffffa037929f&gt;] ? br_nf_forward_finish+0x8a/0x95
[bridge]
[  461.719490]  [&lt;ffffffffa037900a&gt;] ?
nf_bridge_pull_encap_header+0x1c/0x27 [bridge]
[  461.727223]  [&lt;ffffffffa0379974&gt;] ? br_nf_forward_ip+0x1c0/0x1d4 [bridge]
[  461.734292]  [&lt;ffffffff81291c4d&gt;] ? nf_iterate+0x41/0x77
[  461.739758]  [&lt;ffffffffa03748cc&gt;] ? __br_deliver+0xa0/0xa0 [bridge]
[  461.746203]  [&lt;ffffffff81291cf6&gt;] ? nf_hook_slow+0x73/0x111
[  461.751950]  [&lt;ffffffffa03748cc&gt;] ? __br_deliver+0xa0/0xa0 [bridge]
[  461.758378]  [&lt;ffffffffa037533a&gt;] ? NF_HOOK.constprop.4+0x56/0x56
[bridge]

This is caused by bridge netfilter special dst_entry (fake_rtable), a
special shared entry, where attaching an inetpeer makes no sense.

Problem is present since commit 87c48fa3b46 (ipv6: make fragment
identifications less predictable)

Introduce DST_NOPEER dst flag and make sure ipv6_select_ident() and
__ip_select_ident() fallback to the 'no peer attached' handling.

Reported-by: Chris Boot &lt;bootc@bootc.net&gt;
Tested-by: Chris Boot &lt;bootc@bootc.net&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit e688a604807647c9450f9c12a7cb6d027150a895 ]

Chris Boot reported crashes occurring in ipv6_select_ident().

[  461.457562] RIP: 0010:[&lt;ffffffff812dde61&gt;]  [&lt;ffffffff812dde61&gt;]
ipv6_select_ident+0x31/0xa7

[  461.578229] Call Trace:
[  461.580742] &lt;IRQ&gt;
[  461.582870]  [&lt;ffffffff812efa7f&gt;] ? udp6_ufo_fragment+0x124/0x1a2
[  461.589054]  [&lt;ffffffff812dbfe0&gt;] ? ipv6_gso_segment+0xc0/0x155
[  461.595140]  [&lt;ffffffff812700c6&gt;] ? skb_gso_segment+0x208/0x28b
[  461.601198]  [&lt;ffffffffa03f236b&gt;] ? ipv6_confirm+0x146/0x15e
[nf_conntrack_ipv6]
[  461.608786]  [&lt;ffffffff81291c4d&gt;] ? nf_iterate+0x41/0x77
[  461.614227]  [&lt;ffffffff81271d64&gt;] ? dev_hard_start_xmit+0x357/0x543
[  461.620659]  [&lt;ffffffff81291cf6&gt;] ? nf_hook_slow+0x73/0x111
[  461.626440]  [&lt;ffffffffa0379745&gt;] ? br_parse_ip_options+0x19a/0x19a
[bridge]
[  461.633581]  [&lt;ffffffff812722ff&gt;] ? dev_queue_xmit+0x3af/0x459
[  461.639577]  [&lt;ffffffffa03747d2&gt;] ? br_dev_queue_push_xmit+0x72/0x76
[bridge]
[  461.646887]  [&lt;ffffffffa03791e3&gt;] ? br_nf_post_routing+0x17d/0x18f
[bridge]
[  461.653997]  [&lt;ffffffff81291c4d&gt;] ? nf_iterate+0x41/0x77
[  461.659473]  [&lt;ffffffffa0374760&gt;] ? br_flood+0xfa/0xfa [bridge]
[  461.665485]  [&lt;ffffffff81291cf6&gt;] ? nf_hook_slow+0x73/0x111
[  461.671234]  [&lt;ffffffffa0374760&gt;] ? br_flood+0xfa/0xfa [bridge]
[  461.677299]  [&lt;ffffffffa0379215&gt;] ?
nf_bridge_update_protocol+0x20/0x20 [bridge]
[  461.684891]  [&lt;ffffffffa03bb0e5&gt;] ? nf_ct_zone+0xa/0x17 [nf_conntrack]
[  461.691520]  [&lt;ffffffffa0374760&gt;] ? br_flood+0xfa/0xfa [bridge]
[  461.697572]  [&lt;ffffffffa0374812&gt;] ? NF_HOOK.constprop.8+0x3c/0x56
[bridge]
[  461.704616]  [&lt;ffffffffa0379031&gt;] ?
nf_bridge_push_encap_header+0x1c/0x26 [bridge]
[  461.712329]  [&lt;ffffffffa037929f&gt;] ? br_nf_forward_finish+0x8a/0x95
[bridge]
[  461.719490]  [&lt;ffffffffa037900a&gt;] ?
nf_bridge_pull_encap_header+0x1c/0x27 [bridge]
[  461.727223]  [&lt;ffffffffa0379974&gt;] ? br_nf_forward_ip+0x1c0/0x1d4 [bridge]
[  461.734292]  [&lt;ffffffff81291c4d&gt;] ? nf_iterate+0x41/0x77
[  461.739758]  [&lt;ffffffffa03748cc&gt;] ? __br_deliver+0xa0/0xa0 [bridge]
[  461.746203]  [&lt;ffffffff81291cf6&gt;] ? nf_hook_slow+0x73/0x111
[  461.751950]  [&lt;ffffffffa03748cc&gt;] ? __br_deliver+0xa0/0xa0 [bridge]
[  461.758378]  [&lt;ffffffffa037533a&gt;] ? NF_HOOK.constprop.4+0x56/0x56
[bridge]

This is caused by bridge netfilter special dst_entry (fake_rtable), a
special shared entry, where attaching an inetpeer makes no sense.

Problem is present since commit 87c48fa3b46 (ipv6: make fragment
identifications less predictable)

Introduce DST_NOPEER dst flag and make sure ipv6_select_ident() and
__ip_select_ident() fallback to the 'no peer attached' handling.

Reported-by: Chris Boot &lt;bootc@bootc.net&gt;
Tested-by: Chris Boot &lt;bootc@bootc.net&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: fix NULL dereferences in check_peer_redir()</title>
<updated>2011-08-03T10:34:12+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-07-29T19:00:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=f2c31e32b378a6653f8de606149d963baf11d7d3'/>
<id>f2c31e32b378a6653f8de606149d963baf11d7d3</id>
<content type='text'>
Gergely Kalman reported crashes in check_peer_redir().

It appears commit f39925dbde778 (ipv4: Cache learned redirect
information in inetpeer.) added a race, leading to possible NULL ptr
dereference.

Since we can now change dst neighbour, we should make sure a reader can
safely use a neighbour.

Add RCU protection to dst neighbour, and make sure check_peer_redir()
can be called safely by different cpus in parallel.

As neighbours are already freed after one RCU grace period, this patch
should not add typical RCU penalty (cache cold effects)

Many thanks to Gergely for providing a pretty report pointing to the
bug.

Reported-by: Gergely Kalman &lt;synapse@hippy.csoma.elte.hu&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@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>
Gergely Kalman reported crashes in check_peer_redir().

It appears commit f39925dbde778 (ipv4: Cache learned redirect
information in inetpeer.) added a race, leading to possible NULL ptr
dereference.

Since we can now change dst neighbour, we should make sure a reader can
safely use a neighbour.

Add RCU protection to dst neighbour, and make sure check_peer_redir()
can be called safely by different cpus in parallel.

As neighbours are already freed after one RCU grace period, this patch
should not add typical RCU penalty (cache cold effects)

Many thanks to Gergely for providing a pretty report pointing to the
bug.

Reported-by: Gergely Kalman &lt;synapse@hippy.csoma.elte.hu&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipv6: make fragment identifications less predictable</title>
<updated>2011-07-22T04:25:58+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-07-22T04:25:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=87c48fa3b4630905f98268dde838ee43626a060c'/>
<id>87c48fa3b4630905f98268dde838ee43626a060c</id>
<content type='text'>
IPv6 fragment identification generation is way beyond what we use for
IPv4 : It uses a single generator. Its not scalable and allows DOS
attacks.

Now inetpeer is IPv6 aware, we can use it to provide a more secure and
scalable frag ident generator (per destination, instead of system wide)

This patch :
1) defines a new secure_ipv6_id() helper
2) extends inet_getid() to provide 32bit results
3) extends ipv6_select_ident() with a new dest parameter

Reported-by: Fernando Gont &lt;fernando@gont.com.ar&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@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>
IPv6 fragment identification generation is way beyond what we use for
IPv4 : It uses a single generator. Its not scalable and allows DOS
attacks.

Now inetpeer is IPv6 aware, we can use it to provide a more secure and
scalable frag ident generator (per destination, instead of system wide)

This patch :
1) defines a new secure_ipv6_id() helper
2) extends inet_getid() to provide 32bit results
3) extends ipv6_select_ident() with a new dest parameter

Reported-by: Fernando Gont &lt;fernando@gont.com.ar&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: Abstract dst-&gt;neighbour accesses behind helpers.</title>
<updated>2011-07-18T06:11:35+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2011-07-18T06:09:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=69cce1d1404968f78b177a0314f5822d5afdbbfb'/>
<id>69cce1d1404968f78b177a0314f5822d5afdbbfb</id>
<content type='text'>
dst_{get,set}_neighbour()

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
dst_{get,set}_neighbour()

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: Create and use new helper, neigh_output().</title>
<updated>2011-07-17T00:26:00+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2011-07-17T00:26:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=05e3aa0949c138803185f92bd7db9be59cfca1be'/>
<id>05e3aa0949c138803185f92bd7db9be59cfca1be</id>
<content type='text'>
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipv6: Use calculated 'neigh' instead of re-evaluating dst-&gt;neighbour</title>
<updated>2011-07-16T21:30:47+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2011-07-16T21:30:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=a29282972cc9b80126d4e4d68251c6712bdad051'/>
<id>a29282972cc9b80126d4e4d68251c6712bdad051</id>
<content type='text'>
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: Embed hh_cache inside of struct neighbour.</title>
<updated>2011-07-14T14:53:20+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2011-07-14T14:53:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=f6b72b6217f8c24f2a54988e58af858b4e66024d'/>
<id>f6b72b6217f8c24f2a54988e58af858b4e66024d</id>
<content type='text'>
Now that there is a one-to-one correspondance between neighbour
and hh_cache entries, we no longer need:

1) dynamic allocation
2) attachment to dst-&gt;hh
3) refcounting

Initialization of the hh_cache entry is indicated by hh_len
being non-zero, and such initialization is always done with
the neighbour's lock held as a writer.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Now that there is a one-to-one correspondance between neighbour
and hh_cache entries, we no longer need:

1) dynamic allocation
2) attachment to dst-&gt;hh
3) refcounting

Initialization of the hh_cache entry is indicated by hh_len
being non-zero, and such initialization is always done with
the neighbour's lock held as a writer.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>inet: Decrease overhead of on-stack inet_cork.</title>
<updated>2011-05-06T22:37:57+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2011-05-06T22:02:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=bdc712b4c2baf9515887de3a52e7ecd89fafc0c7'/>
<id>bdc712b4c2baf9515887de3a52e7ecd89fafc0c7</id>
<content type='text'>
When we fast path datagram sends to avoid locking by putting
the inet_cork on the stack we use up lots of space that isn't
necessary.

This is because inet_cork contains a "struct flowi" which isn't
used in these code paths.

Split inet_cork to two parts, "inet_cork" and "inet_cork_full".
Only the latter of which has the "struct flowi" and is what is
stored in inet_sock.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Acked-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When we fast path datagram sends to avoid locking by putting
the inet_cork on the stack we use up lots of space that isn't
necessary.

This is because inet_cork contains a "struct flowi" which isn't
used in these code paths.

Split inet_cork to two parts, "inet_cork" and "inet_cork_full".
Only the latter of which has the "struct flowi" and is what is
stored in inet_sock.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Acked-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>inet: constify ip headers and in6_addr</title>
<updated>2011-04-22T18:04:14+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-04-22T04:53:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=b71d1d426d263b0b6cb5760322efebbfc89d4463'/>
<id>b71d1d426d263b0b6cb5760322efebbfc89d4463</id>
<content type='text'>
Add const qualifiers to structs iphdr, ipv6hdr and in6_addr pointers
where possible, to make code intention more obvious.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@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>
Add const qualifiers to structs iphdr, ipv6hdr and in6_addr pointers
where possible, to make code intention more obvious.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipv6: RTA_PREFSRC support for ipv6 route source address selection</title>
<updated>2011-04-15T22:44:37+00:00</updated>
<author>
<name>Daniel Walter</name>
<email>sahne@0x90.at</email>
</author>
<published>2011-04-13T21:10:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=c3968a857a6b6c3d2ef4ead35776b055fb664d74'/>
<id>c3968a857a6b6c3d2ef4ead35776b055fb664d74</id>
<content type='text'>
[ipv6] Add support for RTA_PREFSRC

This patch allows a user to select the preferred source address
for a specific IPv6-Route. It can be set via a netlink message
setting RTA_PREFSRC to a valid IPv6 address which must be
up on the device the route will be bound to.

Signed-off-by: Daniel Walter &lt;dwalter@barracuda.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>
[ipv6] Add support for RTA_PREFSRC

This patch allows a user to select the preferred source address
for a specific IPv6-Route. It can be set via a netlink message
setting RTA_PREFSRC to a valid IPv6 address which must be
up on the device the route will be bound to.

Signed-off-by: Daniel Walter &lt;dwalter@barracuda.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
