|
@@ -223,11 +223,16 @@ static bool arp_key_eq(const struct neighbour *neigh, const void *pkey)
|
|
|
|
|
|
static int arp_constructor(struct neighbour *neigh)
|
|
|
{
|
|
|
- __be32 addr = *(__be32 *)neigh->primary_key;
|
|
|
+ __be32 addr;
|
|
|
struct net_device *dev = neigh->dev;
|
|
|
struct in_device *in_dev;
|
|
|
struct neigh_parms *parms;
|
|
|
+ u32 inaddr_any = INADDR_ANY;
|
|
|
|
|
|
+ if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
|
|
|
+ memcpy(neigh->primary_key, &inaddr_any, arp_tbl.key_len);
|
|
|
+
|
|
|
+ addr = *(__be32 *)neigh->primary_key;
|
|
|
rcu_read_lock();
|
|
|
in_dev = __in_dev_get_rcu(dev);
|
|
|
if (!in_dev) {
|