<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/net, branch v2.6.38.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>SUNRPC: Deal with the lack of a SYN_SENT sk-&gt;sk_state_change callback...</title>
<updated>2011-06-03T01:34:47+00:00</updated>
<author>
<name>Trond Myklebust</name>
<email>Trond.Myklebust@netapp.com</email>
</author>
<published>2011-03-19T00:21:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=a0a238f7cb684c0ea76a5817d1c92e2c7b0b7bd2'/>
<id>a0a238f7cb684c0ea76a5817d1c92e2c7b0b7bd2</id>
<content type='text'>
commit fe19a96b10032035a35779f42ad59e35d6dd8ffd upstream.

The TCP connection state code depends on the state_change() callback
being called when the SYN_SENT state is set. However the networking layer
doesn't actually call us back in that case.

Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&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>
commit fe19a96b10032035a35779f42ad59e35d6dd8ffd upstream.

The TCP connection state code depends on the state_change() callback
being called when the SYN_SENT state is set. However the networking layer
doesn't actually call us back in that case.

Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>atm: expose ATM device index in sysfs</title>
<updated>2011-06-03T01:34:44+00:00</updated>
<author>
<name>Dan Williams</name>
<email>dcbw@redhat.com</email>
</author>
<published>2011-05-27T04:51:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9854d5778eb446a332fb34ad17ff4d04c6440999'/>
<id>9854d5778eb446a332fb34ad17ff4d04c6440999</id>
<content type='text'>
commit e7a46b4d0839c2a3aa2e0ae0b145f293f6738498 upstream.

It's currently exposed only through /proc which, besides requiring
screen-scraping, doesn't allow userspace to distinguish between two
identical ATM adapters with different ATM indexes.  The ATM device index
is required when using PPPoATM on a system with multiple ATM adapters.

Signed-off-by: Dan Williams &lt;dcbw@redhat.com&gt;
Reviewed-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Tested-by: David Woodhouse &lt;dwmw2@infradead.org&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>
commit e7a46b4d0839c2a3aa2e0ae0b145f293f6738498 upstream.

It's currently exposed only through /proc which, besides requiring
screen-scraping, doesn't allow userspace to distinguish between two
identical ATM adapters with different ATM indexes.  The ATM device index
is required when using PPPoATM on a system with multiple ATM adapters.

Signed-off-by: Dan Williams &lt;dcbw@redhat.com&gt;
Reviewed-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Tested-by: David Woodhouse &lt;dwmw2@infradead.org&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>sch_sfq: fix peek() implementation</title>
<updated>2011-06-03T01:34:01+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-25T04:40:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=53280ba65f9fad14cf52bfb3c5ffae09a8c2ea51'/>
<id>53280ba65f9fad14cf52bfb3c5ffae09a8c2ea51</id>
<content type='text'>
[ Upstream commit 07bd8df5df4369487812bf85a237322ff3569b77 ]

Since commit eeaeb068f139 (sch_sfq: allow big packets and be fair),
sfq_peek() can return a different skb that would be normally dequeued by
sfq_dequeue() [ if current slot-&gt;allot is negative ]

Use generic qdisc_peek_dequeued() instead of custom implementation, to
get consistent result.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
CC: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
CC: Patrick McHardy &lt;kaber@trash.net&gt;
CC: Jesper Dangaard Brouer &lt;hawk@diku.dk&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 07bd8df5df4369487812bf85a237322ff3569b77 ]

Since commit eeaeb068f139 (sch_sfq: allow big packets and be fair),
sfq_peek() can return a different skb that would be normally dequeued by
sfq_dequeue() [ if current slot-&gt;allot is negative ]

Use generic qdisc_peek_dequeued() instead of custom implementation, to
get consistent result.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
CC: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
CC: Patrick McHardy &lt;kaber@trash.net&gt;
CC: Jesper Dangaard Brouer &lt;hawk@diku.dk&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>sctp: fix memory leak of the ASCONF queue when free asoc</title>
<updated>2011-06-03T01:34:01+00:00</updated>
<author>
<name>Wei Yongjun</name>
<email>yjwei@cn.fujitsu.com</email>
</author>
<published>2011-05-24T21:48:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=696789e6e980e3f11860a34a57b4724d041f02ab'/>
<id>696789e6e980e3f11860a34a57b4724d041f02ab</id>
<content type='text'>
[ Upstream commit 8b4472cc13136d04727e399c6fdadf58d2218b0a ]

If an ASCONF chunk is outstanding, then the following ASCONF
chunk will be queued for later transmission. But when we free
the asoc, we forget to free the ASCONF queue at the same time,
this will cause memory leak.

Signed-off-by: Wei Yongjun &lt;yjwei@cn.fujitsu.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 8b4472cc13136d04727e399c6fdadf58d2218b0a ]

If an ASCONF chunk is outstanding, then the following ASCONF
chunk will be queued for later transmission. But when we free
the asoc, we forget to free the ASCONF queue at the same time,
this will cause memory leak.

Signed-off-by: Wei Yongjun &lt;yjwei@cn.fujitsu.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>sch_sfq: avoid giving spurious NET_XMIT_CN signals</title>
<updated>2011-06-03T01:34:00+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-23T11:02:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1003a81b92683e72019b8160ac59c7a2651a74e5'/>
<id>1003a81b92683e72019b8160ac59c7a2651a74e5</id>
<content type='text'>
[ Upstream commit 8efa885406359af300d46910642b50ca82c0fe47 ]

While chasing a possible net_sched bug, I found that IP fragments have
litle chance to pass a congestioned SFQ qdisc :

- Say SFQ qdisc is full because one flow is non responsive.
- ip_fragment() wants to send two fragments belonging to an idle flow.
- sfq_enqueue() queues first packet, but see queue limit reached :
- sfq_enqueue() drops one packet from 'big consumer', and returns
NET_XMIT_CN.
- ip_fragment() cancel remaining fragments.

This patch restores fairness, making sure we return NET_XMIT_CN only if
we dropped a packet from the same flow.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
CC: Patrick McHardy &lt;kaber@trash.net&gt;
CC: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
CC: Jamal Hadi Salim &lt;hadi@cyberus.ca&gt;
CC: Stephen Hemminger &lt;shemminger@vyatta.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 8efa885406359af300d46910642b50ca82c0fe47 ]

While chasing a possible net_sched bug, I found that IP fragments have
litle chance to pass a congestioned SFQ qdisc :

- Say SFQ qdisc is full because one flow is non responsive.
- ip_fragment() wants to send two fragments belonging to an idle flow.
- sfq_enqueue() queues first packet, but see queue limit reached :
- sfq_enqueue() drops one packet from 'big consumer', and returns
NET_XMIT_CN.
- ip_fragment() cancel remaining fragments.

This patch restores fairness, making sure we return NET_XMIT_CN only if
we dropped a packet from the same flow.

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
CC: Patrick McHardy &lt;kaber@trash.net&gt;
CC: Jarek Poplawski &lt;jarkao2@gmail.com&gt;
CC: Jamal Hadi Salim &lt;hadi@cyberus.ca&gt;
CC: Stephen Hemminger &lt;shemminger@vyatta.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: add skb_dst_force() in sock_queue_err_skb()</title>
<updated>2011-06-03T01:34:00+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-18T06:21:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=6c063e6ac38b809e6039ebe59d50d28d1db502c6'/>
<id>6c063e6ac38b809e6039ebe59d50d28d1db502c6</id>
<content type='text'>
[ Upstream commit abb57ea48fd9431fa320a5c55f73e6b5a44c2efb ]

Commit 7fee226ad239 (add a noref bit on skb dst) forgot to use
skb_dst_force() on packets queued in sk_error_queue

This triggers following warning, for applications using IP_CMSG_PKTINFO
receiving one error status

------------[ cut here ]------------
WARNING: at include/linux/skbuff.h:457 ip_cmsg_recv_pktinfo+0xa6/0xb0()
Hardware name: 2669UYD
Modules linked in: isofs vboxnetadp vboxnetflt nfsd ebtable_nat ebtables
lib80211_crypt_ccmp uinput xcbc hdaps tp_smapi thinkpad_ec radeonfb fb_ddc
radeon ttm drm_kms_helper drm ipw2200 intel_agp intel_gtt libipw i2c_algo_bit
i2c_i801 agpgart rng_core cfbfillrect cfbcopyarea cfbimgblt video raid10 raid1
raid0 linear md_mod vboxdrv
Pid: 4697, comm: miredo Not tainted 2.6.39-rc6-00569-g5895198-dirty #22
Call Trace:
 [&lt;c17746b6&gt;] ? printk+0x1d/0x1f
 [&lt;c1058302&gt;] warn_slowpath_common+0x72/0xa0
 [&lt;c15bbca6&gt;] ? ip_cmsg_recv_pktinfo+0xa6/0xb0
 [&lt;c15bbca6&gt;] ? ip_cmsg_recv_pktinfo+0xa6/0xb0
 [&lt;c1058350&gt;] warn_slowpath_null+0x20/0x30
 [&lt;c15bbca6&gt;] ip_cmsg_recv_pktinfo+0xa6/0xb0
 [&lt;c15bbdd7&gt;] ip_cmsg_recv+0x127/0x260
 [&lt;c154f82d&gt;] ? skb_dequeue+0x4d/0x70
 [&lt;c1555523&gt;] ? skb_copy_datagram_iovec+0x53/0x300
 [&lt;c178e834&gt;] ? sub_preempt_count+0x24/0x50
 [&lt;c15bdd2d&gt;] ip_recv_error+0x23d/0x270
 [&lt;c15de554&gt;] udp_recvmsg+0x264/0x2b0
 [&lt;c15ea659&gt;] inet_recvmsg+0xd9/0x130
 [&lt;c1547752&gt;] sock_recvmsg+0xf2/0x120
 [&lt;c11179cb&gt;] ? might_fault+0x4b/0xa0
 [&lt;c15546bc&gt;] ? verify_iovec+0x4c/0xc0
 [&lt;c1547660&gt;] ? sock_recvmsg_nosec+0x100/0x100
 [&lt;c1548294&gt;] __sys_recvmsg+0x114/0x1e0
 [&lt;c1093895&gt;] ? __lock_acquire+0x365/0x780
 [&lt;c1148b66&gt;] ? fget_light+0xa6/0x3e0
 [&lt;c1148b7f&gt;] ? fget_light+0xbf/0x3e0
 [&lt;c1148aee&gt;] ? fget_light+0x2e/0x3e0
 [&lt;c1549f29&gt;] sys_recvmsg+0x39/0x60

Close bug https://bugzilla.kernel.org/show_bug.cgi?id=34622

Reported-by: Witold Baryluk &lt;baryluk@smp.if.uj.edu.pl&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
CC: Stephen Hemminger &lt;shemminger@vyatta.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 abb57ea48fd9431fa320a5c55f73e6b5a44c2efb ]

Commit 7fee226ad239 (add a noref bit on skb dst) forgot to use
skb_dst_force() on packets queued in sk_error_queue

This triggers following warning, for applications using IP_CMSG_PKTINFO
receiving one error status

------------[ cut here ]------------
WARNING: at include/linux/skbuff.h:457 ip_cmsg_recv_pktinfo+0xa6/0xb0()
Hardware name: 2669UYD
Modules linked in: isofs vboxnetadp vboxnetflt nfsd ebtable_nat ebtables
lib80211_crypt_ccmp uinput xcbc hdaps tp_smapi thinkpad_ec radeonfb fb_ddc
radeon ttm drm_kms_helper drm ipw2200 intel_agp intel_gtt libipw i2c_algo_bit
i2c_i801 agpgart rng_core cfbfillrect cfbcopyarea cfbimgblt video raid10 raid1
raid0 linear md_mod vboxdrv
Pid: 4697, comm: miredo Not tainted 2.6.39-rc6-00569-g5895198-dirty #22
Call Trace:
 [&lt;c17746b6&gt;] ? printk+0x1d/0x1f
 [&lt;c1058302&gt;] warn_slowpath_common+0x72/0xa0
 [&lt;c15bbca6&gt;] ? ip_cmsg_recv_pktinfo+0xa6/0xb0
 [&lt;c15bbca6&gt;] ? ip_cmsg_recv_pktinfo+0xa6/0xb0
 [&lt;c1058350&gt;] warn_slowpath_null+0x20/0x30
 [&lt;c15bbca6&gt;] ip_cmsg_recv_pktinfo+0xa6/0xb0
 [&lt;c15bbdd7&gt;] ip_cmsg_recv+0x127/0x260
 [&lt;c154f82d&gt;] ? skb_dequeue+0x4d/0x70
 [&lt;c1555523&gt;] ? skb_copy_datagram_iovec+0x53/0x300
 [&lt;c178e834&gt;] ? sub_preempt_count+0x24/0x50
 [&lt;c15bdd2d&gt;] ip_recv_error+0x23d/0x270
 [&lt;c15de554&gt;] udp_recvmsg+0x264/0x2b0
 [&lt;c15ea659&gt;] inet_recvmsg+0xd9/0x130
 [&lt;c1547752&gt;] sock_recvmsg+0xf2/0x120
 [&lt;c11179cb&gt;] ? might_fault+0x4b/0xa0
 [&lt;c15546bc&gt;] ? verify_iovec+0x4c/0xc0
 [&lt;c1547660&gt;] ? sock_recvmsg_nosec+0x100/0x100
 [&lt;c1548294&gt;] __sys_recvmsg+0x114/0x1e0
 [&lt;c1093895&gt;] ? __lock_acquire+0x365/0x780
 [&lt;c1148b66&gt;] ? fget_light+0xa6/0x3e0
 [&lt;c1148b7f&gt;] ? fget_light+0xbf/0x3e0
 [&lt;c1148aee&gt;] ? fget_light+0x2e/0x3e0
 [&lt;c1549f29&gt;] sys_recvmsg+0x39/0x60

Close bug https://bugzilla.kernel.org/show_bug.cgi?id=34622

Reported-by: Witold Baryluk &lt;baryluk@smp.if.uj.edu.pl&gt;
Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
CC: Stephen Hemminger &lt;shemminger@vyatta.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>igmp: call ip_mc_clear_src() only when we have no users of ip_mc_list</title>
<updated>2011-06-03T01:34:00+00:00</updated>
<author>
<name>Veaceslav Falico</name>
<email>vfalico@redhat.com</email>
</author>
<published>2011-05-23T23:15:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7c4acccbb07cddc422a1283f8569e48613f328c2'/>
<id>7c4acccbb07cddc422a1283f8569e48613f328c2</id>
<content type='text'>
[ Upstream commit 24cf3af3fed5edcf90bc2a0ed181e6ce1513d2dc ]

In igmp_group_dropped() we call ip_mc_clear_src(), which resets the number
of source filters per mulitcast. However, igmp_group_dropped() is also
called on NETDEV_DOWN, NETDEV_PRE_TYPE_CHANGE and NETDEV_UNREGISTER, which
means that the group might get added back on NETDEV_UP, NETDEV_REGISTER and
NETDEV_POST_TYPE_CHANGE respectively, leaving us with broken source
filters.

To fix that, we must clear the source filters only when there are no users
in the ip_mc_list, i.e. in ip_mc_dec_group() and on device destroy.

Acked-by: David L Stevens &lt;dlstevens@us.ibm.com&gt;
Signed-off-by: Veaceslav Falico &lt;vfalico@redhat.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 24cf3af3fed5edcf90bc2a0ed181e6ce1513d2dc ]

In igmp_group_dropped() we call ip_mc_clear_src(), which resets the number
of source filters per mulitcast. However, igmp_group_dropped() is also
called on NETDEV_DOWN, NETDEV_PRE_TYPE_CHANGE and NETDEV_UNREGISTER, which
means that the group might get added back on NETDEV_UP, NETDEV_REGISTER and
NETDEV_POST_TYPE_CHANGE respectively, leaving us with broken source
filters.

To fix that, we must clear the source filters only when there are no users
in the ip_mc_list, i.e. in ip_mc_dec_group() and on device destroy.

Acked-by: David L Stevens &lt;dlstevens@us.ibm.com&gt;
Signed-off-by: Veaceslav Falico &lt;vfalico@redhat.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>vlan: fix GVRP at dismantle time MIME-Version: 1.0</title>
<updated>2011-06-03T01:33:59+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-10T19:22:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b404cdd3aaa697187fcac36157aed7e4a596a8ef'/>
<id>b404cdd3aaa697187fcac36157aed7e4a596a8ef</id>
<content type='text'>
[ Upstream commit 0442277740ec56109c5b5f7bcfded299cf9e72bd ]

ip link add link eth2 eth2.103 type vlan id 103 gvrp on loose_binding on
ip link set eth2.103 up
rmmod tg3    # driver providing eth2

 BUG: unable to handle kernel NULL pointer dereference at           (null)
 IP: [&lt;ffffffffa0030c9e&gt;] garp_request_leave+0x3e/0xc0 [garp]
 PGD 11d251067 PUD 11b9e0067 PMD 0
 Oops: 0000 [#1] SMP
 last sysfs file: /sys/devices/virtual/net/eth2.104/ifindex
 CPU 0
 Modules linked in: tg3(-) 8021q garp nfsd lockd auth_rpcgss sunrpc libphy sg [last unloaded: x_tables]

 Pid: 11494, comm: rmmod Tainted: G        W   2.6.39-rc6-00261-gfd71257-dirty #580 HP ProLiant BL460c G6
 RIP: 0010:[&lt;ffffffffa0030c9e&gt;]  [&lt;ffffffffa0030c9e&gt;] garp_request_leave+0x3e/0xc0 [garp]
 RSP: 0018:ffff88007a19bae8  EFLAGS: 00010286
 RAX: 0000000000000000 RBX: ffff88011b5e2000 RCX: 0000000000000002
 RDX: 0000000000000000 RSI: 0000000000000175 RDI: ffffffffa0030d5b
 RBP: ffff88007a19bb18 R08: 0000000000000001 R09: ffff88011bd64a00
 R10: ffff88011d34ec00 R11: 0000000000000000 R12: 0000000000000002
 R13: ffff88007a19bc48 R14: ffff88007a19bb88 R15: 0000000000000001
 FS:  0000000000000000(0000) GS:ffff88011fc00000(0063) knlGS:00000000f77d76c0
 CS:  0010 DS: 002b ES: 002b CR0: 000000008005003b
 CR2: 0000000000000000 CR3: 000000011a675000 CR4: 00000000000006f0
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
 Process rmmod (pid: 11494, threadinfo ffff88007a19a000, task ffff8800798595c0)
 Stack:
  ffff88007a19bb36 ffff88011c84b800 ffff88011b5e2000 ffff88007a19bc48
  ffff88007a19bb88 0000000000000006 ffff88007a19bb38 ffffffffa003a5f6
  ffff88007a19bb38 670088007a19bba8 ffff88007a19bb58 ffffffffa00397e7
 Call Trace:
  [&lt;ffffffffa003a5f6&gt;] vlan_gvrp_request_leave+0x46/0x50 [8021q]
  [&lt;ffffffffa00397e7&gt;] vlan_dev_stop+0xb7/0xc0 [8021q]
  [&lt;ffffffff8137e427&gt;] __dev_close_many+0x87/0xe0
  [&lt;ffffffff8137e507&gt;] dev_close_many+0x87/0x110
  [&lt;ffffffff8137e630&gt;] rollback_registered_many+0xa0/0x240
  [&lt;ffffffff8137e7e9&gt;] unregister_netdevice_many+0x19/0x60
  [&lt;ffffffffa00389eb&gt;] vlan_device_event+0x53b/0x550 [8021q]
  [&lt;ffffffff8143f448&gt;] ? ip6mr_device_event+0xa8/0xd0
  [&lt;ffffffff81479d03&gt;] notifier_call_chain+0x53/0x80
  [&lt;ffffffff81062539&gt;] __raw_notifier_call_chain+0x9/0x10
  [&lt;ffffffff81062551&gt;] raw_notifier_call_chain+0x11/0x20
  [&lt;ffffffff8137df82&gt;] call_netdevice_notifiers+0x32/0x60
  [&lt;ffffffff8137e69f&gt;] rollback_registered_many+0x10f/0x240
  [&lt;ffffffff8137e85f&gt;] rollback_registered+0x2f/0x40
  [&lt;ffffffff8137e8c8&gt;] unregister_netdevice_queue+0x58/0x90
  [&lt;ffffffff8137e9eb&gt;] unregister_netdev+0x1b/0x30
  [&lt;ffffffffa005d73f&gt;] tg3_remove_one+0x6f/0x10b [tg3]

We should call vlan_gvrp_request_leave() from unregister_vlan_dev(),
not from vlan_dev_stop(), because vlan_gvrp_uninit_applicant()
is called right after unregister_netdevice_queue(). In batch mode,
unregister_netdevice_queue() doesn’t immediately call vlan_dev_stop().

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 0442277740ec56109c5b5f7bcfded299cf9e72bd ]

ip link add link eth2 eth2.103 type vlan id 103 gvrp on loose_binding on
ip link set eth2.103 up
rmmod tg3    # driver providing eth2

 BUG: unable to handle kernel NULL pointer dereference at           (null)
 IP: [&lt;ffffffffa0030c9e&gt;] garp_request_leave+0x3e/0xc0 [garp]
 PGD 11d251067 PUD 11b9e0067 PMD 0
 Oops: 0000 [#1] SMP
 last sysfs file: /sys/devices/virtual/net/eth2.104/ifindex
 CPU 0
 Modules linked in: tg3(-) 8021q garp nfsd lockd auth_rpcgss sunrpc libphy sg [last unloaded: x_tables]

 Pid: 11494, comm: rmmod Tainted: G        W   2.6.39-rc6-00261-gfd71257-dirty #580 HP ProLiant BL460c G6
 RIP: 0010:[&lt;ffffffffa0030c9e&gt;]  [&lt;ffffffffa0030c9e&gt;] garp_request_leave+0x3e/0xc0 [garp]
 RSP: 0018:ffff88007a19bae8  EFLAGS: 00010286
 RAX: 0000000000000000 RBX: ffff88011b5e2000 RCX: 0000000000000002
 RDX: 0000000000000000 RSI: 0000000000000175 RDI: ffffffffa0030d5b
 RBP: ffff88007a19bb18 R08: 0000000000000001 R09: ffff88011bd64a00
 R10: ffff88011d34ec00 R11: 0000000000000000 R12: 0000000000000002
 R13: ffff88007a19bc48 R14: ffff88007a19bb88 R15: 0000000000000001
 FS:  0000000000000000(0000) GS:ffff88011fc00000(0063) knlGS:00000000f77d76c0
 CS:  0010 DS: 002b ES: 002b CR0: 000000008005003b
 CR2: 0000000000000000 CR3: 000000011a675000 CR4: 00000000000006f0
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
 Process rmmod (pid: 11494, threadinfo ffff88007a19a000, task ffff8800798595c0)
 Stack:
  ffff88007a19bb36 ffff88011c84b800 ffff88011b5e2000 ffff88007a19bc48
  ffff88007a19bb88 0000000000000006 ffff88007a19bb38 ffffffffa003a5f6
  ffff88007a19bb38 670088007a19bba8 ffff88007a19bb58 ffffffffa00397e7
 Call Trace:
  [&lt;ffffffffa003a5f6&gt;] vlan_gvrp_request_leave+0x46/0x50 [8021q]
  [&lt;ffffffffa00397e7&gt;] vlan_dev_stop+0xb7/0xc0 [8021q]
  [&lt;ffffffff8137e427&gt;] __dev_close_many+0x87/0xe0
  [&lt;ffffffff8137e507&gt;] dev_close_many+0x87/0x110
  [&lt;ffffffff8137e630&gt;] rollback_registered_many+0xa0/0x240
  [&lt;ffffffff8137e7e9&gt;] unregister_netdevice_many+0x19/0x60
  [&lt;ffffffffa00389eb&gt;] vlan_device_event+0x53b/0x550 [8021q]
  [&lt;ffffffff8143f448&gt;] ? ip6mr_device_event+0xa8/0xd0
  [&lt;ffffffff81479d03&gt;] notifier_call_chain+0x53/0x80
  [&lt;ffffffff81062539&gt;] __raw_notifier_call_chain+0x9/0x10
  [&lt;ffffffff81062551&gt;] raw_notifier_call_chain+0x11/0x20
  [&lt;ffffffff8137df82&gt;] call_netdevice_notifiers+0x32/0x60
  [&lt;ffffffff8137e69f&gt;] rollback_registered_many+0x10f/0x240
  [&lt;ffffffff8137e85f&gt;] rollback_registered+0x2f/0x40
  [&lt;ffffffff8137e8c8&gt;] unregister_netdevice_queue+0x58/0x90
  [&lt;ffffffff8137e9eb&gt;] unregister_netdev+0x1b/0x30
  [&lt;ffffffffa005d73f&gt;] tg3_remove_one+0x6f/0x10b [tg3]

We should call vlan_gvrp_request_leave() from unregister_vlan_dev(),
not from vlan_dev_stop(), because vlan_gvrp_uninit_applicant()
is called right after unregister_netdevice_queue(). In batch mode,
unregister_netdevice_queue() doesn’t immediately call vlan_dev_stop().

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>tcp: len check is unnecessarily devastating, change to WARN_ON</title>
<updated>2011-06-03T01:33:59+00:00</updated>
<author>
<name>Ilpo Järvinen</name>
<email>ilpo.jarvinen@helsinki.fi</email>
</author>
<published>2011-04-02T04:47:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=21fdc47e2e3238412559703663e5a04cbebb4309'/>
<id>21fdc47e2e3238412559703663e5a04cbebb4309</id>
<content type='text'>
[ Upstream commit 2fceec13375e5d98ef033c6b0ee03943fc460950 ]

All callers are prepared for alloc failures anyway, so this error
can safely be boomeranged to the callers domain without super
bad consequences. ...At worst the connection might go into a state
where each RTO tries to (unsuccessfully) re-fragment with such
a mis-sized value and eventually dies.

Signed-off-by: Ilpo Järvinen &lt;ilpo.jarvinen@helsinki.fi&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 2fceec13375e5d98ef033c6b0ee03943fc460950 ]

All callers are prepared for alloc failures anyway, so this error
can safely be boomeranged to the callers domain without super
bad consequences. ...At worst the connection might go into a state
where each RTO tries to (unsuccessfully) re-fragment with such
a mis-sized value and eventually dies.

Signed-off-by: Ilpo Järvinen &lt;ilpo.jarvinen@helsinki.fi&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>SCTP: fix race between sctp_bind_addr_free() and sctp_bind_addr_conflict()</title>
<updated>2011-06-03T01:33:58+00:00</updated>
<author>
<name>Jacek Luczak</name>
<email>difrost.kernel@gmail.com</email>
</author>
<published>2011-05-19T09:55:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=29ad44a2c7365a4094772be7bbc81aff279295fc'/>
<id>29ad44a2c7365a4094772be7bbc81aff279295fc</id>
<content type='text'>
[ Upstream commit c182f90bc1f22ce5039b8722e45621d5f96862c2 ]

During the sctp_close() call, we do not use rcu primitives to
destroy the address list attached to the endpoint.  At the same
time, we do the removal of addresses from this list before
attempting to remove the socket from the port hash

As a result, it is possible for another process to find the socket
in the port hash that is in the process of being closed.  It then
proceeds to traverse the address list to find the conflict, only
to have that address list suddenly disappear without rcu() critical
section.

Fix issue by closing address list removal inside RCU critical
section.

Race can result in a kernel crash with general protection fault or
kernel NULL pointer dereference:

kernel: general protection fault: 0000 [#1] SMP
kernel: RIP: 0010:[&lt;ffffffffa02f3dde&gt;]  [&lt;ffffffffa02f3dde&gt;] sctp_bind_addr_conflict+0x64/0x82 [sctp]
kernel: Call Trace:
kernel:  [&lt;ffffffffa02f415f&gt;] ? sctp_get_port_local+0x17b/0x2a3 [sctp]
kernel:  [&lt;ffffffffa02f3d45&gt;] ? sctp_bind_addr_match+0x33/0x68 [sctp]
kernel:  [&lt;ffffffffa02f4416&gt;] ? sctp_do_bind+0xd3/0x141 [sctp]
kernel:  [&lt;ffffffffa02f5030&gt;] ? sctp_bindx_add+0x4d/0x8e [sctp]
kernel:  [&lt;ffffffffa02f5183&gt;] ? sctp_setsockopt_bindx+0x112/0x4a4 [sctp]
kernel:  [&lt;ffffffff81089e82&gt;] ? generic_file_aio_write+0x7f/0x9b
kernel:  [&lt;ffffffffa02f763e&gt;] ? sctp_setsockopt+0x14f/0xfee [sctp]
kernel:  [&lt;ffffffff810c11fb&gt;] ? do_sync_write+0xab/0xeb
kernel:  [&lt;ffffffff810e82ab&gt;] ? fsnotify+0x239/0x282
kernel:  [&lt;ffffffff810c2462&gt;] ? alloc_file+0x18/0xb1
kernel:  [&lt;ffffffff8134a0b1&gt;] ? compat_sys_setsockopt+0x1a5/0x1d9
kernel:  [&lt;ffffffff8134aaf1&gt;] ? compat_sys_socketcall+0x143/0x1a4
kernel:  [&lt;ffffffff810467dc&gt;] ? sysenter_dispatch+0x7/0x32

Signed-off-by: Jacek Luczak &lt;luczak.jacek@gmail.com&gt;
Acked-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
CC: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Reviewed-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 c182f90bc1f22ce5039b8722e45621d5f96862c2 ]

During the sctp_close() call, we do not use rcu primitives to
destroy the address list attached to the endpoint.  At the same
time, we do the removal of addresses from this list before
attempting to remove the socket from the port hash

As a result, it is possible for another process to find the socket
in the port hash that is in the process of being closed.  It then
proceeds to traverse the address list to find the conflict, only
to have that address list suddenly disappear without rcu() critical
section.

Fix issue by closing address list removal inside RCU critical
section.

Race can result in a kernel crash with general protection fault or
kernel NULL pointer dereference:

kernel: general protection fault: 0000 [#1] SMP
kernel: RIP: 0010:[&lt;ffffffffa02f3dde&gt;]  [&lt;ffffffffa02f3dde&gt;] sctp_bind_addr_conflict+0x64/0x82 [sctp]
kernel: Call Trace:
kernel:  [&lt;ffffffffa02f415f&gt;] ? sctp_get_port_local+0x17b/0x2a3 [sctp]
kernel:  [&lt;ffffffffa02f3d45&gt;] ? sctp_bind_addr_match+0x33/0x68 [sctp]
kernel:  [&lt;ffffffffa02f4416&gt;] ? sctp_do_bind+0xd3/0x141 [sctp]
kernel:  [&lt;ffffffffa02f5030&gt;] ? sctp_bindx_add+0x4d/0x8e [sctp]
kernel:  [&lt;ffffffffa02f5183&gt;] ? sctp_setsockopt_bindx+0x112/0x4a4 [sctp]
kernel:  [&lt;ffffffff81089e82&gt;] ? generic_file_aio_write+0x7f/0x9b
kernel:  [&lt;ffffffffa02f763e&gt;] ? sctp_setsockopt+0x14f/0xfee [sctp]
kernel:  [&lt;ffffffff810c11fb&gt;] ? do_sync_write+0xab/0xeb
kernel:  [&lt;ffffffff810e82ab&gt;] ? fsnotify+0x239/0x282
kernel:  [&lt;ffffffff810c2462&gt;] ? alloc_file+0x18/0xb1
kernel:  [&lt;ffffffff8134a0b1&gt;] ? compat_sys_setsockopt+0x1a5/0x1d9
kernel:  [&lt;ffffffff8134aaf1&gt;] ? compat_sys_socketcall+0x143/0x1a4
kernel:  [&lt;ffffffff810467dc&gt;] ? sysenter_dispatch+0x7/0x32

Signed-off-by: Jacek Luczak &lt;luczak.jacek@gmail.com&gt;
Acked-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
CC: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Reviewed-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>
</feed>
