ipv4: Check return of dev_set_allmulti
Subsystems (3)
PATCH 6/8 ipv4: Check return of dev_set_allmulti
allmulti might overflow.
Commit: "netdevice: Fix promiscuity and allmulti overflow" in net-next makes dev_set_promiscuity/allmulti return error number if overflow happened.
Here, we check the positive increment for allmulti to get error return.
--- net/ipv4/ipmr.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
net/ipv4/ipmr.c +5 -1
@@ -398,6 +398,7 @@ static int vif_add(struct vifctl *vifc, int mrtsock)struct vif_device *v = &vif_table[vifi];struct net_device *dev;struct in_device *in_dev; +int err;/* Is vif busy ? */ if (VIF_EXISTS (vifi))
@@ -435,7 +436,10 @@ static int vif_add(struct vifctl *vifc, int mrtsock)if ((in_dev =__in_dev_get_rtnl (dev)) ==NULL )return -EADDRNOTAVAIL ;IPV4_DEVCONF (in_dev->cnf,MC_FORWARDING )++; -dev_set_allmulti (dev,+1 ); +/* Check whether allmulti overflow */ + err =dev_set_allmulti (dev,1 ); +if (err) +return err;ip_rt_multicast_event (in_dev);/*
Signature · 1 line
1.5.3.4
David Miller
maintainerFrom: Wang Chen <[email protected]>
Date: Fri, 20 Jun 2008 08:55:32 +0800
net/ipv4/ipmr.c static int vif_add(struct vifctl *vifc, int mrtsock) · line 442
Quoted 9 lines
net/ipv4/ipmr.c +4
-1@@ -435,7 +436,10 @@ static int vif_add(struct vifctl *vifc, int mrtsock)if ((in_dev =__in_dev_get_rtnl (dev)) ==NULL )return -EADDRNOTAVAIL ;IPV4_DEVCONF (in_dev->cnf,MC_FORWARDING )++; -dev_set_allmulti (dev,+1 ); +/* Check whether allmulti overflow */ + err =dev_set_allmulti (dev,1 ); +if (err) +return err;
Please delete comment.
David Miller said the following on 2008-6-20 10:09:
Quoted 2 lines
Please delete comment.
allmulti might overflow.
Commit: "netdevice: Fix promiscuity and allmulti overflow" in net-next makes dev_set_promiscuity/allmulti return error number if overflow happened.
Here, we check the positive increment for allmulti to get error return.
--- net/ipv4/ipmr.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)
net/ipv4/ipmr.c +4 -1
@@ -398,6 +398,7 @@ static int vif_add(struct vifctl *vifc, int mrtsock)struct vif_device *v = &vif_table[vifi];struct net_device *dev;struct in_device *in_dev; +int err;/* Is vif busy ? */ if (VIF_EXISTS (vifi))
@@ -435,7 +436,9 @@ static int vif_add(struct vifctl *vifc, int mrtsock)if ((in_dev =__in_dev_get_rtnl (dev)) ==NULL )return -EADDRNOTAVAIL ;IPV4_DEVCONF (in_dev->cnf,MC_FORWARDING )++; -dev_set_allmulti (dev,+1 ); + err =dev_set_allmulti (dev,1 ); +if (err) +return err;ip_rt_multicast_event (in_dev);/*
Signature · 1 line
1.5.3.4