• Wang Chen's avatar
    netdevice: Fix promiscuity and allmulti overflow · dad9b335
    Wang Chen authored
    Max of promiscuity and allmulti plus positive @inc can cause overflow.
    Fox example: when allmulti=0xFFFFFFFF, any caller give dev_set_allmulti() a
    positive @inc will cause allmulti be off.
    This is not what we want, though it's rare case.
    The fix is that only negative @inc will cause allmulti or promiscuity be off
    and when any caller makes the counters touch the roof, we return error.
    
    Change of v2:
    Change void function dev_set_promiscuity/allmulti to return int.
    So callers can get the overflow error.
    Caller's fix will be done later.
    
    Change of v3:
    1. Since we return error to caller, we don't need to print KERN_ERROR,
    KERN_WARNING is enough.
    2. In dev_set_promiscuity(), if __dev_set_promiscuity() failed, we
    return at once.
    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>
    dad9b335
dev.c 113 KB