rocker: fix a neigh entry leak issue
Once we get a neighbour through looking up arp cache or creating a new one in rocker_port_ipv4_resolve(), the neighbour's refcount is already taken. But as we don't put the refcount again after it's used, this makes the neighbour entry leaked. Suggested-by: Eric Dumazet <edumazet@google.com> Acked-by: Jiri Pirko <jiri@resnulli.us> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Ying Xue <ying.xue@windriver.com> Acked-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
86b5e7de07
Коммит
1f9993f682
|
@ -2921,10 +2921,11 @@ static int rocker_port_ipv4_resolve(struct rocker_port *rocker_port,
|
|||
struct neighbour *n = __ipv4_neigh_lookup(dev, (__force u32)ip_addr);
|
||||
int err = 0;
|
||||
|
||||
if (!n)
|
||||
if (!n) {
|
||||
n = neigh_create(&arp_tbl, &ip_addr, dev);
|
||||
if (!n)
|
||||
return -ENOMEM;
|
||||
if (IS_ERR(n))
|
||||
return IS_ERR(n);
|
||||
}
|
||||
|
||||
/* If the neigh is already resolved, then go ahead and
|
||||
* install the entry, otherwise start the ARP process to
|
||||
|
@ -2936,6 +2937,7 @@ static int rocker_port_ipv4_resolve(struct rocker_port *rocker_port,
|
|||
else
|
||||
neigh_event_send(n, NULL);
|
||||
|
||||
neigh_release(n);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче