|
@@ -339,6 +339,11 @@ static void macvtap_sock_write_space(struct sock *sk)
|
|
|
wake_up_interruptible_poll(wqueue, POLLOUT | POLLWRNORM | POLLWRBAND);
|
|
|
}
|
|
|
|
|
|
+static void macvtap_sock_destruct(struct sock *sk)
|
|
|
+{
|
|
|
+ skb_queue_purge(&sk->sk_receive_queue);
|
|
|
+}
|
|
|
+
|
|
|
static int macvtap_open(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
struct net *net = current->nsproxy->net_ns;
|
|
@@ -369,6 +374,7 @@ static int macvtap_open(struct inode *inode, struct file *file)
|
|
|
q->sock.ops = &macvtap_socket_ops;
|
|
|
sock_init_data(&q->sock, &q->sk);
|
|
|
q->sk.sk_write_space = macvtap_sock_write_space;
|
|
|
+ q->sk.sk_destruct = macvtap_sock_destruct;
|
|
|
q->flags = IFF_VNET_HDR | IFF_NO_PI | IFF_TAP;
|
|
|
q->vnet_hdr_sz = sizeof(struct virtio_net_hdr);
|
|
|
|