From patchwork Wed May 7 23:52:39 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 346855 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4B2DB1400A3 for ; Thu, 8 May 2014 09:52:45 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752806AbaEGXwl (ORCPT ); Wed, 7 May 2014 19:52:41 -0400 Received: from mail-qc0-f201.google.com ([209.85.216.201]:51428 "EHLO mail-qc0-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752300AbaEGXwk (ORCPT ); Wed, 7 May 2014 19:52:40 -0400 Received: by mail-qc0-f201.google.com with SMTP id l6so271856qcy.2 for ; Wed, 07 May 2014 16:52:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=date:from:to:subject:message-id:user-agent:mime-version :content-type; bh=Iv2EFt5qHOUlyEhJ4w2r5VAz8czyRDxDoxbXM/YuBgg=; b=UTtzNGpAd6eUSR/6sl7JgALbEJuhqWWUBR/3zyTIzBtpJORVeg5mC0XQ42E9gzdaZP 2jYi8fX0mS+IbKyV1VcqTUMebTpqafG5HT4jgo/J0jDnzxsj6hhnZ7IRFdBckioF5VCh gnLJxUNJQkPnIU/d1nwEgvV83Wfw0IK985m90Goq5qhCBdN4KUUPCuFZD0t6N5fQl3rp PjfBTOHGHazNWnEOns9o6aEe3bFhmZRTHmXi+4UE7puoJTGUGaCHd91IlWIoqL5tSUds YC+XkMXz/O82p96R42qTRwVcDzZx/feQ2Zw/+SFtmF3kATcDUZYakojMyTc3FzswoLH6 tvLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:user-agent :mime-version:content-type; bh=Iv2EFt5qHOUlyEhJ4w2r5VAz8czyRDxDoxbXM/YuBgg=; b=Lj2VEbyzTkoNhmBjB2g0/Rc8qHJsAwXtsUlu+2oGsHR8Bl5bTqhQC1P0UHUh5ziVXc fjMfWRJ6SUFA8tqO6FpTBYXRJIDOpx9hofP8Ug0O+esKGb63XwgdOEGqYpxtDyEIH3j8 rgYwfaxWaGDGej5tF2dLsrBm7dfrOqwmkjAi1k3UwpV0xZt4L+iSq1hp1BRcBOb1w2ip 98Qe/YB12aNe82fZwbWePcRr/h6vcnbzakL5fytB1W9u4zDxNczeytTSermPVyGpKo+C pyQCVIAI+SrcQGglcUyfMNni6rGw4/yGxpR8+MOoF0l2ISZYiFM08Mizg5pJJyle/UFn aHsg== X-Gm-Message-State: ALoCoQkaa5AqaqHm1nE0GM+cMyMmZ+AEXi+ZB7RKWehzu6Z6O+F96abq/IwDZdXxZJvQCCQHECkm X-Received: by 10.58.30.78 with SMTP id q14mr147344veh.10.1399506759778; Wed, 07 May 2014 16:52:39 -0700 (PDT) Received: from corp2gmr1-2.hot.corp.google.com (corp2gmr1-2.hot.corp.google.com [172.24.189.93]) by gmr-mx.google.com with ESMTPS id c50si764948yhl.7.2014.05.07.16.52.39 for (version=TLSv1.1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 07 May 2014 16:52:39 -0700 (PDT) Received: from tomh.mtv.corp.google.com (tomh.mtv.corp.google.com [172.18.117.126]) by corp2gmr1-2.hot.corp.google.com (Postfix) with ESMTP id 9D7005A41A5; Wed, 7 May 2014 16:52:39 -0700 (PDT) Received: by tomh.mtv.corp.google.com (Postfix, from userid 60832) id 61D5620095C; Wed, 7 May 2014 16:52:39 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by tomh.mtv.corp.google.com (Postfix) with ESMTP id 5865420042C; Wed, 7 May 2014 16:52:39 -0700 (PDT) Date: Wed, 7 May 2014 16:52:39 -0700 (PDT) From: Tom Herbert To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH 6/7] net: Verify UDP checksum before handoff to encap Message-ID: User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Moving validation of UDP checksum to be done in UDP not encap layer. Signed-off-by: Tom Herbert --- net/ipv4/udp.c | 4 ++++ net/ipv6/udp.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index f2d05d7..54ea0a3 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1495,6 +1495,10 @@ int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) if (skb->len > sizeof(struct udphdr) && encap_rcv != NULL) { int ret; + /* Verify checksum before giving to encap */ + if (udp_lib_checksum_complete(skb)) + goto csum_error; + ret = encap_rcv(sk, skb); if (ret <= 0) { UDP_INC_STATS_BH(sock_net(sk), diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index fc2be63..7edf096 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -634,6 +634,10 @@ int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) if (skb->len > sizeof(struct udphdr) && encap_rcv != NULL) { int ret; + /* Verify checksum before giving to encap */ + if (udp_lib_checksum_complete(skb)) + goto csum_error; + ret = encap_rcv(sk, skb); if (ret <= 0) { UDP_INC_STATS_BH(sock_net(sk),