From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1BD7C4167B for ; Sun, 6 Dec 2020 02:17:43 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4D8222312F for ; Sun, 6 Dec 2020 02:17:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4D8222312F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:54276 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kljcM-0001b9-8n for qemu-devel@archiver.kernel.org; Sat, 05 Dec 2020 21:17:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1klja2-00008o-SL for qemu-devel@nongnu.org; Sat, 05 Dec 2020 21:15:22 -0500 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]:41964) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kljZz-0004Q7-NY for qemu-devel@nongnu.org; Sat, 05 Dec 2020 21:15:18 -0500 Received: by mail-qk1-x743.google.com with SMTP id 19so1846914qkm.8 for ; Sat, 05 Dec 2020 18:15:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=2Uiiq4qQjczyfuHIEkIt5O5wZUUpd/eN4ovFrUj9k4g=; b=QaRMgZdQg83Xz+dMoZULdSf0W6EXZe08iGDYRJ5niglK8PSgsPol5wRXwnLusiv59G dS20Kb4NX74womh4Nghrsh6XszHa8jbPWv8UYhzWTjK2IMUxjgse+6Mma82eGasRMy6U BprWxLmLUdcYyFtGvGzl+PT0PPZ5D5PEfCf4PJTnMi3yabr7QjKw7H3sJtAYZc3Anijk +Z+1V3HbjCYVZAxbxo4oBuGVWuBwvrGaeUUeP5rg6/m5cnxc1m7StMwc4YHV+OrrrgFs v6FMRZzpTcgOYG07vdJ9eCExqodNAtw+KwsW71o8XsNVoRv2dZgKyrW+nWXhUWRTGx4O FSsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=2Uiiq4qQjczyfuHIEkIt5O5wZUUpd/eN4ovFrUj9k4g=; b=JGadR5u38UUis5d7/ekn9lg5+xNeOAhwLiX+d7i/nvi0lgsMga0RoUZ2+nfOtF5Kn2 jSIPtShb+UosvRLc3EpG8xARIQxFPE/Cf6SU4o9hsH3WcUozRI0KiKANLZfWGD81OiNZ FbEArlxJNr0X+A2Gdyer510X/RpgFP3sX1ALKCp1jwmgHx0V/HWdy7lq2CRUJVbBpu/g hauDxriI9g2n1pBXRwv4b5U5Mh5oplPyXvIy5JENXJhUSpyHKJAI1cIyX0P5ZCwJFNiE 9OCp90PRVO+qdOirMWo20zjFN8p76tkAque2ec2qHOluS3LSLjhbcYqxbXgBTlwrB3BT ExCw== X-Gm-Message-State: AOAM532jUCRnXjGkc6P9evjePJVN/6LG0Tuz8flyt6U0zzcp8wBW/T59 VTT4fwCl/LreSLX9TeIxaUnWJqv7kLY= X-Google-Smtp-Source: ABdhPJwCNEKJ4A+fdNq1Fe7S2rSJEtlBTrnv5uQ8r3EVQagGIWqkooEimKsTh70C6OnENgpxnaItsA== X-Received: by 2002:a37:a402:: with SMTP id n2mr17076189qke.131.1607220914097; Sat, 05 Dec 2020 18:15:14 -0800 (PST) Received: from pek-vx-bsp2.wrs.com (unknown-124-94.windriver.com. [147.11.124.94]) by smtp.gmail.com with ESMTPSA id g18sm9296306qtv.79.2020.12.05.18.15.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 05 Dec 2020 18:15:13 -0800 (PST) From: Bin Meng To: qemu-devel@nongnu.org Subject: [PATCH 1/3] net: checksum: Skip fragmented IP packets Date: Sun, 6 Dec 2020 10:14:05 +0800 Message-Id: <1607220847-24096-1-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 2.7.4 Received-SPF: pass client-ip=2607:f8b0:4864:20::743; envelope-from=bmeng.cn@gmail.com; helo=mail-qk1-x743.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Bin Meng , Markus Carlstedt Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" From: Markus Carlstedt To calculate the TCP/UDP checksum we need the whole datagram. Unless the hardware has some logic to collect all fragments before sending the whole datagram first, it can only be done by the network stack, which is normally the case for the NICs we have seen so far. Skip these fragmented IP packets to avoid checksum corruption. Signed-off-by: Markus Carlstedt Signed-off-by: Bin Meng --- net/checksum.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/checksum.c b/net/checksum.c index aaa4000..5cb8b2c 100644 --- a/net/checksum.c +++ b/net/checksum.c @@ -106,6 +106,10 @@ void net_checksum_calculate(uint8_t *data, int length) return; /* not IPv4 */ } + if (IP4_IS_FRAGMENT(ip)) { + return; /* a fragmented IP packet */ + } + ip_len = lduw_be_p(&ip->ip_len); /* Last, check that we have enough data for the all IP frame */ -- 2.7.4