<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/net/802/garp.c, branch v4.9.331</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=v4.9.331</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=v4.9.331'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2021-08-04T09:58:02+00:00</updated>
<entry>
<title>net/802/garp: fix memleak in garp_request_join()</title>
<updated>2021-08-04T09:58:02+00:00</updated>
<author>
<name>Yang Yingliang</name>
<email>yangyingliang@huawei.com</email>
</author>
<published>2021-06-29T11:53:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=e74d662587847de5b92401ece06ea897dbdf7537'/>
<id>urn:sha1:e74d662587847de5b92401ece06ea897dbdf7537</id>
<content type='text'>
[ Upstream commit 42ca63f980842918560b25f0244307fd83b4777c ]

I got kmemleak report when doing fuzz test:

BUG: memory leak
unreferenced object 0xffff88810c909b80 (size 64):
  comm "syz", pid 957, jiffies 4295220394 (age 399.090s)
  hex dump (first 32 bytes):
    01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 08 00 00 00 01 02 00 04  ................
  backtrace:
    [&lt;00000000ca1f2e2e&gt;] garp_request_join+0x285/0x3d0
    [&lt;00000000bf153351&gt;] vlan_gvrp_request_join+0x15b/0x190
    [&lt;0000000024005e72&gt;] vlan_dev_open+0x706/0x980
    [&lt;00000000dc20c4d4&gt;] __dev_open+0x2bb/0x460
    [&lt;0000000066573004&gt;] __dev_change_flags+0x501/0x650
    [&lt;0000000035b42f83&gt;] rtnl_configure_link+0xee/0x280
    [&lt;00000000a5e69de0&gt;] __rtnl_newlink+0xed5/0x1550
    [&lt;00000000a5258f4a&gt;] rtnl_newlink+0x66/0x90
    [&lt;00000000506568ee&gt;] rtnetlink_rcv_msg+0x439/0xbd0
    [&lt;00000000b7eaeae1&gt;] netlink_rcv_skb+0x14d/0x420
    [&lt;00000000c373ce66&gt;] netlink_unicast+0x550/0x750
    [&lt;00000000ec74ce74&gt;] netlink_sendmsg+0x88b/0xda0
    [&lt;00000000381ff246&gt;] sock_sendmsg+0xc9/0x120
    [&lt;000000008f6a2db3&gt;] ____sys_sendmsg+0x6e8/0x820
    [&lt;000000008d9c1735&gt;] ___sys_sendmsg+0x145/0x1c0
    [&lt;00000000aa39dd8b&gt;] __sys_sendmsg+0xfe/0x1d0

Calling garp_request_leave() after garp_request_join(), the attr-&gt;state
is set to GARP_APPLICANT_VO, garp_attr_destroy() won't be called in last
transmit event in garp_uninit_applicant(), the attr of applicant will be
leaked. To fix this leak, iterate and free each attr of applicant before
rerturning from garp_uninit_applicant().

Reported-by: Hulk Robot &lt;hulkci@huawei.com&gt;
Signed-off-by: Yang Yingliang &lt;yangyingliang@huawei.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>net: replace macros net_random and net_srandom with direct calls to prandom</title>
<updated>2014-01-14T23:15:25+00:00</updated>
<author>
<name>Aruna-Hewapathirane</name>
<email>aruna.hewapathirane@gmail.com</email>
</author>
<published>2014-01-11T12:15:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=63862b5bef7349dd1137e4c70702c67d77565785'/>
<id>urn:sha1:63862b5bef7349dd1137e4c70702c67d77565785</id>
<content type='text'>
This patch removes the net_random and net_srandom macros and replaces
them with direct calls to the prandom ones. As new commits only seem to
use prandom_u32 there is no use to keep them around.
This change makes it easier to grep for users of prandom_u32.

Signed-off-by: Aruna-Hewapathirane &lt;aruna.hewapathirane@gmail.com&gt;
Suggested-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Acked-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>802: fix a possible race condition</title>
<updated>2013-04-07T21:04:17+00:00</updated>
<author>
<name>Cong Wang</name>
<email>amwang@redhat.com</email>
</author>
<published>2013-04-02T21:52:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=cfbe800b8b771afc7d5aa113e19f85ec933b7618'/>
<id>urn:sha1:cfbe800b8b771afc7d5aa113e19f85ec933b7618</id>
<content type='text'>
(Resend with a better changelog)

garp_pdu_queue() should ways be called with this spin lock.
garp_uninit_applicant() only holds rtnl lock which is not
enough here.  A possible race can happen as garp_pdu_rcv()
is called in BH context:

	garp_pdu_rcv()
	  |-&gt;garp_pdu_parse_msg()
	    |-&gt;garp_pdu_parse_attr()
	      |-&gt; garp_gid_event()

Found by code inspection.

Cc: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Cc: "David S. Miller" &lt;davem@davemloft.net&gt;
Cc: David Ward &lt;david.ward@ll.mit.edu&gt;
Cc: "Jorge Boncompte [DTI2]" &lt;jorge@dti2.net&gt;
Signed-off-by: Cong Wang &lt;amwang@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net/garp: fix GID rbtree ordering</title>
<updated>2012-04-13T17:10:33+00:00</updated>
<author>
<name>David Ward</name>
<email>david.ward@ll.mit.edu</email>
</author>
<published>2012-04-09T04:13:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=6f66cdc3e5d3d5ccbb7ee9265b8211cdc24aa401'/>
<id>urn:sha1:6f66cdc3e5d3d5ccbb7ee9265b8211cdc24aa401</id>
<content type='text'>
The comparison operators were backwards in both garp_attr_lookup and
garp_attr_create, so the entire GID rbtree was in reverse order.
(There was no practical side effect to this though, except that PDUs
were sent with attributes listed in reverse order, which is still
valid by the protocol. This change is only for clarity.)

Signed-off-by: David Ward &lt;david.ward@ll.mit.edu&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net/garp: avoid infinite loop if attribute already exists</title>
<updated>2012-04-01T20:47:11+00:00</updated>
<author>
<name>David Ward</name>
<email>david.ward@ll.mit.edu</email>
</author>
<published>2012-03-27T09:01:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=67378563df2e168d32a4054616f244a91aec462d'/>
<id>urn:sha1:67378563df2e168d32a4054616f244a91aec462d</id>
<content type='text'>
An infinite loop occurred if garp_attr_create was called with the values
of an existing attribute. This might happen if a previous leave request
for the attribute has not yet been followed by a PDU transmission (or,
if the application previously issued a join request for the attribute
and is now issuing another one, without having issued a leave request).

If garp_attr_create finds an existing attribute having the same values,
return the address to it. Its state will then get updated (i.e., if it
was in a leaving state, it will move into a non-leaving state and not
get deleted during the next PDU transmission).

To accomplish this fix, collapse garp_attr_insert into garp_attr_create
(which is its only caller).

Thanks to Jorge Boncompte [DTI2] &lt;jorge@dti2.net&gt; for contributing to
this fix.

Signed-off-by: David Ward &lt;david.ward@ll.mit.edu&gt;
Acked-by: Jorge Boncompte [DTI2] &lt;jorge@dti2.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>net: Fix files explicitly needing to include module.h</title>
<updated>2011-10-31T23:30:28+00:00</updated>
<author>
<name>Paul Gortmaker</name>
<email>paul.gortmaker@windriver.com</email>
</author>
<published>2011-05-27T13:12:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=3a9a231d977222eea36eae091df2c358e03ac839'/>
<id>urn:sha1:3a9a231d977222eea36eae091df2c358e03ac839</id>
<content type='text'>
With calls to modular infrastructure, these files really
needs the full module.h header.  Call it out so some of the
cleanups of implicit and unrequired includes elsewhere can be
cleaned up.

Signed-off-by: Paul Gortmaker &lt;paul.gortmaker@windriver.com&gt;
</content>
</entry>
<entry>
<title>rcu: convert uses of rcu_assign_pointer(x, NULL) to RCU_INIT_POINTER</title>
<updated>2011-08-02T11:29:23+00:00</updated>
<author>
<name>Stephen Hemminger</name>
<email>shemminger@vyatta.com</email>
</author>
<published>2011-08-01T16:19:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=a9b3cd7f323b2e57593e7215362a7b02fc933e3a'/>
<id>urn:sha1:a9b3cd7f323b2e57593e7215362a7b02fc933e3a</id>
<content type='text'>
When assigning a NULL value to an RCU protected pointer, no barrier
is needed. The rcu_assign_pointer, used to handle that but will soon
change to not handle the special case.

Convert all rcu_assign_pointer of NULL value.

//smpl
@@ expression P; @@

- rcu_assign_pointer(P, NULL)
+ RCU_INIT_POINTER(P, NULL)

// &lt;/smpl&gt;

Signed-off-by: Stephen Hemminger &lt;shemminger@vyatta.com&gt;
Acked-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>garp: use kfree_rcu()</title>
<updated>2011-05-21T06:05:22+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-20T18:31:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=0a384b226f61b310586701669b573b49cfcbf436'/>
<id>urn:sha1:0a384b226f61b310586701669b573b49cfcbf436</id>
<content type='text'>
Use kfree_rcu() instead of call_rcu(), remove garp_cleanup_module()

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>garp: remove last synchronize_rcu() call</title>
<updated>2011-05-12T21:46:56+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-12T21:46:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=f607a158004d75c9005423ce1ba70dc6ec3dd9c2'/>
<id>urn:sha1:f607a158004d75c9005423ce1ba70dc6ec3dd9c2</id>
<content type='text'>
When removing last vlan from a device, garp_uninit_applicant() calls
synchronize_rcu() to make sure no user can still manipulate struct
garp_applicant before we free it.

Use call_rcu() instead, as a step to further net_device dismantle
optimizations.

Add the temporary garp_cleanup_module() function to make sure no pending
call_rcu() are left at module unload time [ this will be removed when
kfree_rcu() is available ]

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>garp: remove one synchronize_rcu() call</title>
<updated>2011-05-09T18:41:40+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2011-05-09T03:35:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=da37e368763f708d2ae5a81e61ec59372b831cf5'/>
<id>urn:sha1:da37e368763f708d2ae5a81e61ec59372b831cf5</id>
<content type='text'>
Speedup vlan dismantling in CONFIG_VLAN_8021Q_GVRP=y cases,
by using a call_rcu() to free the memory instead of waiting with
expensive synchronize_rcu() [ while RTNL is held ]

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Cc: Ben Greear &lt;greearb@candelatech.com&gt;
Cc: Patrick McHardy &lt;kaber@trash.net&gt;
Cc: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
