Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ae7b444 authored by Wang Chen's avatar Wang Chen Committed by David S. Miller
Browse files

ipv6: 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.

Signed-off-by: default avatarWang Chen <wangchen@cn.fujitsu.com>
Acked-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bc3f9076
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -595,6 +595,7 @@ static int mif6_add(struct mif6ctl *vifc, int mrtsock)
	int vifi = vifc->mif6c_mifi;
	struct mif_device *v = &vif6_table[vifi];
	struct net_device *dev;
	int err;

	/* Is vif busy ? */
	if (MIF_EXISTS(vifi))
@@ -612,6 +613,11 @@ static int mif6_add(struct mif6ctl *vifc, int mrtsock)
		dev = ip6mr_reg_vif();
		if (!dev)
			return -ENOBUFS;
		err = dev_set_allmulti(dev, 1);
		if (err) {
			unregister_netdevice(dev);
			return err;
		}
		break;
#endif
	case 0:
@@ -619,13 +625,14 @@ static int mif6_add(struct mif6ctl *vifc, int mrtsock)
		if (!dev)
			return -EADDRNOTAVAIL;
		dev_put(dev);
		err = dev_set_allmulti(dev, 1);
		if (err)
			return err;
		break;
	default:
		return -EINVAL;
	}

	dev_set_allmulti(dev, 1);

	/*
	 *	Fill in the VIF structures
	 */