• Vlad Buslov's avatar
    macvlan: Don't propagate promisc change to lower dev in passthru · 7e1caeac
    Vlad Buslov authored
    Macvlan device in passthru mode sets its lower device promiscuous mode
    according to its MACVLAN_FLAG_NOPROMISC flag instead of synchronizing it to
    its own promiscuity setting. However, macvlan_change_rx_flags() function
    doesn't check the mode before propagating such changes to the lower device
    which can cause net_device->promiscuity counter overflow as illustrated by
    reproduction example [0] and resulting dmesg log [1]. Fix the issue by
    first verifying the mode in macvlan_change_rx_flags() function before
    propagating promiscuous mode change to the lower device.
    
    [0]:
    ip link add macvlan1 link enp8s0f0 type macvlan mode passthru
    ip link set macvlan1 promisc on
    ip l set dev macvlan1 up
    ip link set macvlan1 promisc off
    ip l set dev macvlan1 down
    ip l set dev macvlan1 up
    
    [1]:
    [ 5156.281724] macvlan1: entered promiscuous mode
    [ 5156.285467] mlx5_core 0000:08:00.0 enp8s0f0: entered promiscuous mode
    [ 5156.287639] macvlan1: left promiscuous mode
    [ 5156.288339] mlx5_core 0000:08:00.0 enp8s0f0: left promiscuous mode
    [ 5156.290907] mlx5_core 0000:08:00.0 enp8s0f0: entered promiscuous mode
    [ 5156.317197] mlx5_core 0000:08:00.0 enp8s0f0: promiscuity touches roof, set promiscuity failed. promiscuity feature of device might be broken.
    
    Fixes: efdbd2b3 ("macvlan: Propagate promiscuity setting to lower devices.")
    Reviewed-by: default avatarGal Pressman <gal@nvidia.com>
    Signed-off-by: default avatarVlad Buslov <vladbu@nvidia.com>
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Link: https://lore.kernel.org/r/20231114175915.1649154-1-vladbu@nvidia.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    7e1caeac
macvlan.c 48.2 KB