From patchwork Thu Jun 4 11:06:00 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Herbert Xu X-Patchwork-Id: 28098 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id B228DB6F34 for ; Thu, 4 Jun 2009 21:06:13 +1000 (EST) Received: by ozlabs.org (Postfix) id AB445DDEF5; Thu, 4 Jun 2009 21:06:11 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 4FD65DDFB6 for ; Thu, 4 Jun 2009 21:06:11 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752481AbZFDLGD (ORCPT ); Thu, 4 Jun 2009 07:06:03 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751512AbZFDLGB (ORCPT ); Thu, 4 Jun 2009 07:06:01 -0400 Received: from rhun.apana.org.au ([64.62.148.172]:58267 "EHLO arnor.apana.org.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752002AbZFDLGB (ORCPT ); Thu, 4 Jun 2009 07:06:01 -0400 Received: from gondolin.me.apana.org.au ([192.168.0.6]) by arnor.apana.org.au with esmtp (Exim 4.63 #1 (Debian)) id 1MCAll-0003Rl-Sv; Thu, 04 Jun 2009 21:06:01 +1000 Received: from herbert by gondolin.me.apana.org.au with local (Exim 4.69) (envelope-from ) id 1MCAlk-0007PL-Rx; Thu, 04 Jun 2009 21:06:00 +1000 Date: Thu, 4 Jun 2009 21:06:00 +1000 From: Herbert Xu To: "David S. Miller" , netdev@vger.kernel.org Subject: tun: Optimise handling of bogus gso->hdr_len Message-ID: <20090604110600.GA28453@gondor.apana.org.au> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi: tun: Optimise handling of bogus gso->hdr_len As all current versions of virtio_net generate a value for the header length that's too small, we should optimise this so that we don't copy it twice. This can be done by ensuring that it is at least as large as the place where we'll write the checksum. Signed-off-by: Herbert Xu Cheers, diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 735bf41..00d00ad 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -563,6 +563,10 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, if (memcpy_fromiovec((void *)&gso, iv, sizeof(gso))) return -EFAULT; + if ((gso.flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) && + gso.csum_start + gso.csum_offset + 2 > gso.hdr_len) + gso.hdr_len = gso.csum_start + gso.csum_offset + 2; + if (gso.hdr_len > len) return -EINVAL; }