diff options
Diffstat (limited to 'drivers/net/macvtap.c')
-rw-r--r-- | drivers/net/macvtap.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index ff111a89e17f..3381c4f91a8c 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c | |||
@@ -322,6 +322,15 @@ static rx_handler_result_t macvtap_handle_frame(struct sk_buff **pskb) | |||
322 | segs = nskb; | 322 | segs = nskb; |
323 | } | 323 | } |
324 | } else { | 324 | } else { |
325 | /* If we receive a partial checksum and the tap side | ||
326 | * doesn't support checksum offload, compute the checksum. | ||
327 | * Note: it doesn't matter which checksum feature to | ||
328 | * check, we either support them all or none. | ||
329 | */ | ||
330 | if (skb->ip_summed == CHECKSUM_PARTIAL && | ||
331 | !(features & NETIF_F_ALL_CSUM) && | ||
332 | skb_checksum_help(skb)) | ||
333 | goto drop; | ||
325 | skb_queue_tail(&q->sk.sk_receive_queue, skb); | 334 | skb_queue_tail(&q->sk.sk_receive_queue, skb); |
326 | } | 335 | } |
327 | 336 | ||