From patchwork Wed Jun 15 14:27:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Alin_N=C4=83stac?= X-Patchwork-Id: 635903 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rV86q1HQBz9t1T for ; Thu, 16 Jun 2016 00:29:55 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=UcNkm51w; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1bDBo5-0003d6-3t; Wed, 15 Jun 2016 14:28:37 +0000 Received: from mail-lb0-x242.google.com ([2a00:1450:4010:c04::242]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1bDBnp-00033P-E1 for lede-dev@lists.infradead.org; Wed, 15 Jun 2016 14:28:33 +0000 Received: by mail-lb0-x242.google.com with SMTP id t6so331822lbv.1 for ; Wed, 15 Jun 2016 07:28:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=e+n/ypGTmGZ4fZcYEt1ouGCHtCSK7xfKrSd9nnwXAp4=; b=UcNkm51wT7gJx50AGZuBTzEeOScITmVwI7Of1oaps035kEBKvdeyK1c4VSU87fOrJO KbcWxrhrVcexw4n3plxFMb8a/FadszDvysE20qcUNmaSpmliC0mUf2+4Fh53aemHx4A9 x2ISnPnXcnK63M6MSc1e6kk7FVojOj9YZV3yEkH4UfnFEsnODS5oN+OzMweSPN/mK1uP 1bsTQ4Dj3RJWOymay6LVyYsLLi7cTeOZ05bCSe+/x4aft72349V5e9Uxgn6Qsf4dqVOn bVRMrVtkU1gb92tdCg2qfgZaK21J4hDtPT1H4Sod8yd/m2Nrevwxb8BIQGqb8K2U+ko1 Yh4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=e+n/ypGTmGZ4fZcYEt1ouGCHtCSK7xfKrSd9nnwXAp4=; b=cjfJ9co0iQVNmZD5OMa0maQOOGSfImpMO82oRSYfG1QCw10p8kqagaSqe1e6uaMAwN wvZGnlz6mrWCCC/HgydVhj9o5cyWqFklmQvo2efLIFEar2CW5HHpJRw8eREODnLPMVYX l6+CzFAOTvjPY9YJfru7ARRQyN/ly+pc+cii9dd0+dxk9Ku8MEtNGJIrScIi+0uTfWVg 2FMSQMs/PGr8q7UggeqLy6nwuLd/Fs2yqCxiaUt6mY3eWNA9nV4V+L5SZMVZncoO0o+k CbA3iWJ6fDmuM/kQtnnuycN1WV+OFzwX+HGiYqoL1YNtS9WcSZWF5dM3Vhns8A34yPz8 Tw7g== X-Gm-Message-State: ALyK8tI3pJovRX2yprmtFXwnREBZ62WBmm3d9LArOcHrb3ua/YCUI1MWOwLBWRJjTvgAhA== X-Received: by 10.28.31.140 with SMTP id f134mr9914150wmf.69.1466000878442; Wed, 15 Jun 2016 07:27:58 -0700 (PDT) Received: from cplx250.edegem.eu.thmulti.com (14.125.146.82.ipv4.evonet.be. [82.146.125.14]) by smtp.gmail.com with ESMTPSA id r129sm9986001wmr.20.2016.06.15.07.27.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Jun 2016 07:27:57 -0700 (PDT) From: Alin Nastac To: openwrt-devel@lists.openwrt.org, lede-dev@lists.infradead.org Date: Wed, 15 Jun 2016 16:27:53 +0200 Message-Id: <1466000873-14857-1-git-send-email-alin.nastac@gmail.com> X-Mailer: git-send-email 1.7.12.4 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160615_072821_885406_B0387DF3 X-CRM114-Status: GOOD ( 12.62 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2a00:1450:4010:c04:0:0:0:242 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (alin.nastac[at]gmail.com) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid Subject: [LEDE-DEV] [PATCH] libnetfilter_queue: fix UDP checksum computation X-BeenThere: lede-dev@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This patch was copied from http://www.spinics.net/lists/netfilter/msg56704.html . --- .../patches/100-udp_checksum_computation.patch | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 package/libs/libnetfilter-queue/patches/100-udp_checksum_computation.patch diff --git a/package/libs/libnetfilter-queue/patches/100-udp_checksum_computation.patch b/package/libs/libnetfilter-queue/patches/100-udp_checksum_computation.patch new file mode 100644 index 0000000..9939b83 --- /dev/null +++ b/package/libs/libnetfilter-queue/patches/100-udp_checksum_computation.patch @@ -0,0 +1,95 @@ +--- libnetfilter_queue-1.0.2.orig/src/extra/checksum.c ++++ libnetfilter_queue-1.0.2/src/extra/checksum.c +@@ -35,7 +35,7 @@ uint16_t checksum(uint32_t sum, uint16_t + return (uint16_t)(~sum); + } + +-uint16_t checksum_tcpudp_ipv4(struct iphdr *iph) ++uint16_t checksum_tcpudp_ipv4(struct iphdr *iph, uint16_t protocol_id) + { + uint32_t sum = 0; + uint32_t iph_len = iph->ihl*4; +@@ -46,13 +46,13 @@ uint16_t checksum_tcpudp_ipv4(struct iph + sum += (iph->saddr) & 0xFFFF; + sum += (iph->daddr >> 16) & 0xFFFF; + sum += (iph->daddr) & 0xFFFF; +- sum += htons(IPPROTO_TCP); ++ sum += htons(protocol_id); + sum += htons(len); + + return checksum(sum, (uint16_t *)payload, len); + } + +-uint16_t checksum_tcpudp_ipv6(struct ip6_hdr *ip6h, void *transport_hdr) ++uint16_t checksum_tcpudp_ipv6(struct ip6_hdr *ip6h, void *transport_hdr, uint16_t protocol_id) + { + uint32_t sum = 0; + uint32_t hdr_len = (uint32_t *)transport_hdr - (uint32_t *)ip6h; +@@ -68,7 +68,7 @@ uint16_t checksum_tcpudp_ipv6(struct ip6 + sum += (ip6h->ip6_dst.s6_addr16[i] >> 16) & 0xFFFF; + sum += (ip6h->ip6_dst.s6_addr16[i]) & 0xFFFF; + } +- sum += htons(IPPROTO_TCP); ++ sum += htons(protocol_id); + sum += htons(ip6h->ip6_plen); + + return checksum(sum, (uint16_t *)payload, len); +Index: libnetfilter_queue-1.0.2/src/extra/tcp.c +=================================================================== +--- libnetfilter_queue-1.0.2.orig/src/extra/tcp.c ++++ libnetfilter_queue-1.0.2/src/extra/tcp.c +@@ -91,7 +91,7 @@ nfq_tcp_compute_checksum_ipv4(struct tcp + { + /* checksum field in header needs to be zero for calculation. */ + tcph->check = 0; +- tcph->check = checksum_tcpudp_ipv4(iph); ++ tcph->check = checksum_tcpudp_ipv4(iph, IPPROTO_TCP); + } + EXPORT_SYMBOL(nfq_tcp_compute_checksum_ipv4); + +@@ -105,7 +105,7 @@ nfq_tcp_compute_checksum_ipv6(struct tcp + { + /* checksum field in header needs to be zero for calculation. */ + tcph->check = 0; +- tcph->check = checksum_tcpudp_ipv6(ip6h, tcph); ++ tcph->check = checksum_tcpudp_ipv6(ip6h, tcph, IPPROTO_TCP); + } + EXPORT_SYMBOL(nfq_tcp_compute_checksum_ipv6); + +Index: libnetfilter_queue-1.0.2/src/extra/udp.c +=================================================================== +--- libnetfilter_queue-1.0.2.orig/src/extra/udp.c ++++ libnetfilter_queue-1.0.2/src/extra/udp.c +@@ -91,7 +91,7 @@ nfq_udp_compute_checksum_ipv4(struct udp + { + /* checksum field in header needs to be zero for calculation. */ + udph->check = 0; +- udph->check = checksum_tcpudp_ipv4(iph); ++ udph->check = checksum_tcpudp_ipv4(iph, IPPROTO_UDP); + } + EXPORT_SYMBOL(nfq_udp_compute_checksum_ipv4); + +@@ -110,7 +110,7 @@ nfq_udp_compute_checksum_ipv6(struct udp + { + /* checksum field in header needs to be zero for calculation. */ + udph->check = 0; +- udph->check = checksum_tcpudp_ipv6(ip6h, udph); ++ udph->check = checksum_tcpudp_ipv6(ip6h, udph, IPPROTO_UDP); + } + EXPORT_SYMBOL(nfq_udp_compute_checksum_ipv6); + +Index: libnetfilter_queue-1.0.2/src/internal.h +=================================================================== +--- libnetfilter_queue-1.0.2.orig/src/internal.h ++++ libnetfilter_queue-1.0.2/src/internal.h +@@ -13,8 +13,8 @@ struct iphdr; + struct ip6_hdr; + + uint16_t checksum(uint32_t sum, uint16_t *buf, int size); +-uint16_t checksum_tcpudp_ipv4(struct iphdr *iph); +-uint16_t checksum_tcpudp_ipv6(struct ip6_hdr *ip6h, void *transport_hdr); ++uint16_t checksum_tcpudp_ipv4(struct iphdr *iph, uint16_t protocol_id); ++uint16_t checksum_tcpudp_ipv6(struct ip6_hdr *ip6h, void *transport_hdr, uint16_t protocol_id); + + struct pkt_buff { + uint8_t *mac_header;