net/garp: avoid infinite loop if attribute already exists
authorDavid Ward <david.ward@ll.mit.edu>
Tue, 27 Mar 2012 09:01:52 +0000 (09:01 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 1 Apr 2012 20:47:11 +0000 (16:47 -0400)
commit67378563df2e168d32a4054616f244a91aec462d
treeef7a14168f63eedbdcfdc0f3345d48dc21cbd352
parent54f5ffbf308828b588b9d1acd9a512d433be8a09
net/garp: avoid infinite loop if attribute already exists

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] <jorge@dti2.net> for contributing to
this fix.

Signed-off-by: David Ward <david.ward@ll.mit.edu>
Acked-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/802/garp.c