macsec: restrict to ethernet devices
authorWillem de Bruijn <willemb@google.com>
Sun, 22 Mar 2020 17:51:13 +0000 (13:51 -0400)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Mar 2020 04:34:59 +0000 (21:34 -0700)
Only attach macsec to ethernet devices.

Syzbot was able to trigger a KMSAN warning in macsec_handle_frame
by attaching to a phonet device.

Macvlan has a similar check in macvlan_port_create.

v1->v2
  - fix commit message typo

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macsec.c

index 6ec6fc191a6e469d1149d9e7c79009e5ae55be1b..92bc2b2df6603956825198cb1c2b0dd887c439c2 100644 (file)
@@ -19,6 +19,7 @@
 #include <net/gro_cells.h>
 #include <net/macsec.h>
 #include <linux/phy.h>
+#include <linux/if_arp.h>
 
 #include <uapi/linux/if_macsec.h>
 
@@ -3665,6 +3666,8 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
        real_dev = __dev_get_by_index(net, nla_get_u32(tb[IFLA_LINK]));
        if (!real_dev)
                return -ENODEV;
+       if (real_dev->type != ARPHRD_ETHER)
+               return -EINVAL;
 
        dev->priv_flags |= IFF_MACSEC;