Loading include/net/neighbour.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -174,6 +174,7 @@ struct pneigh_entry { struct pneigh_entry *next; struct pneigh_entry *next; possible_net_t net; possible_net_t net; struct net_device *dev; struct net_device *dev; netdevice_tracker dev_tracker; u32 flags; u32 flags; u8 protocol; u8 protocol; u8 key[]; u8 key[]; Loading net/core/neighbour.c +4 −4 Original line number Original line Diff line number Diff line Loading @@ -771,10 +771,10 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl, write_pnet(&n->net, net); write_pnet(&n->net, net); memcpy(n->key, pkey, key_len); memcpy(n->key, pkey, key_len); n->dev = dev; n->dev = dev; dev_hold(dev); dev_hold_track(dev, &n->dev_tracker, GFP_KERNEL); if (tbl->pconstructor && tbl->pconstructor(n)) { if (tbl->pconstructor && tbl->pconstructor(n)) { dev_put(dev); dev_put_track(dev, &n->dev_tracker); kfree(n); kfree(n); n = NULL; n = NULL; goto out; goto out; Loading Loading @@ -806,7 +806,7 @@ int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey, write_unlock_bh(&tbl->lock); write_unlock_bh(&tbl->lock); if (tbl->pdestructor) if (tbl->pdestructor) tbl->pdestructor(n); tbl->pdestructor(n); dev_put(n->dev); dev_put_track(n->dev, &n->dev_tracker); kfree(n); kfree(n); return 0; return 0; } } Loading Loading @@ -839,7 +839,7 @@ static int pneigh_ifdown_and_unlock(struct neigh_table *tbl, n->next = NULL; n->next = NULL; if (tbl->pdestructor) if (tbl->pdestructor) tbl->pdestructor(n); tbl->pdestructor(n); dev_put(n->dev); dev_put_track(n->dev, &n->dev_tracker); kfree(n); kfree(n); } } return -ENOENT; return -ENOENT; Loading Loading
include/net/neighbour.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -174,6 +174,7 @@ struct pneigh_entry { struct pneigh_entry *next; struct pneigh_entry *next; possible_net_t net; possible_net_t net; struct net_device *dev; struct net_device *dev; netdevice_tracker dev_tracker; u32 flags; u32 flags; u8 protocol; u8 protocol; u8 key[]; u8 key[]; Loading
net/core/neighbour.c +4 −4 Original line number Original line Diff line number Diff line Loading @@ -771,10 +771,10 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl, write_pnet(&n->net, net); write_pnet(&n->net, net); memcpy(n->key, pkey, key_len); memcpy(n->key, pkey, key_len); n->dev = dev; n->dev = dev; dev_hold(dev); dev_hold_track(dev, &n->dev_tracker, GFP_KERNEL); if (tbl->pconstructor && tbl->pconstructor(n)) { if (tbl->pconstructor && tbl->pconstructor(n)) { dev_put(dev); dev_put_track(dev, &n->dev_tracker); kfree(n); kfree(n); n = NULL; n = NULL; goto out; goto out; Loading Loading @@ -806,7 +806,7 @@ int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey, write_unlock_bh(&tbl->lock); write_unlock_bh(&tbl->lock); if (tbl->pdestructor) if (tbl->pdestructor) tbl->pdestructor(n); tbl->pdestructor(n); dev_put(n->dev); dev_put_track(n->dev, &n->dev_tracker); kfree(n); kfree(n); return 0; return 0; } } Loading Loading @@ -839,7 +839,7 @@ static int pneigh_ifdown_and_unlock(struct neigh_table *tbl, n->next = NULL; n->next = NULL; if (tbl->pdestructor) if (tbl->pdestructor) tbl->pdestructor(n); tbl->pdestructor(n); dev_put(n->dev); dev_put_track(n->dev, &n->dev_tracker); kfree(n); kfree(n); } } return -ENOENT; return -ENOENT; Loading