• Jakub Kicinski's avatar
    net: validate veth and vxcan peer ifindexes · f534f658
    Jakub Kicinski authored
    veth and vxcan need to make sure the ifindexes of the peer
    are not negative, core does not validate this.
    
    Using iproute2 with user-space-level checking removed:
    
    Before:
    
      # ./ip link add index 10 type veth peer index -1
      # ip link show
      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:74:b2:03 brd ff:ff:ff:ff:ff:ff
      10: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
        link/ether 8a:90:ff:57:6d:5d brd ff:ff:ff:ff:ff:ff
      -1: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
        link/ether ae:ed:18:e6:fa:7f brd ff:ff:ff:ff:ff:ff
    
    Now:
    
      $ ./ip link add index 10 type veth peer index -1
      Error: ifindex can't be negative.
    
    This problem surfaced in net-next because an explicit WARN()
    was added, the root cause is older.
    
    Fixes: e6f8f1a7 ("veth: Allow to create peer link with given ifindex")
    Fixes: a8f820a3 ("can: add Virtual CAN Tunnel driver (vxcan)")
    Reported-by: syzbot+5ba06978f34abb058571@syzkaller.appspotmail.com
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f534f658
rtnetlink.c 160 KB