|
@@ -736,8 +736,18 @@ static __inline__ ssize_t tun_put_user(struct tun_struct *tun,
|
|
|
gso.gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
|
|
|
else if (sinfo->gso_type & SKB_GSO_UDP)
|
|
|
gso.gso_type = VIRTIO_NET_HDR_GSO_UDP;
|
|
|
- else
|
|
|
- BUG();
|
|
|
+ else {
|
|
|
+ printk(KERN_ERR "tun: unexpected GSO type: "
|
|
|
+ "0x%x, gso_size %d, hdr_len %d\n",
|
|
|
+ sinfo->gso_type, gso.gso_size,
|
|
|
+ gso.hdr_len);
|
|
|
+ print_hex_dump(KERN_ERR, "tun: ",
|
|
|
+ DUMP_PREFIX_NONE,
|
|
|
+ 16, 1, skb->head,
|
|
|
+ min((int)gso.hdr_len, 64), true);
|
|
|
+ WARN_ON_ONCE(1);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
if (sinfo->gso_type & SKB_GSO_TCP_ECN)
|
|
|
gso.gso_type |= VIRTIO_NET_HDR_GSO_ECN;
|
|
|
} else
|