diff options
Diffstat (limited to 'drivers/net/tun.c')
| -rw-r--r-- | drivers/net/tun.c | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 6ad6fe70631..63042596f0c 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -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  |