Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp791321pxp; Fri, 11 Mar 2022 15:13:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJxg9YaFf5lzfHMyBlU3MEPvem9NHQD5xs5N2LK+1WoOMCIgv+tk0U9xnmBgUr+fiF+iS3WL X-Received: by 2002:a17:90a:1108:b0:1be:e1bd:e2f0 with SMTP id d8-20020a17090a110800b001bee1bde2f0mr13269996pja.144.1647040432384; Fri, 11 Mar 2022 15:13:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1647040432; cv=none; d=google.com; s=arc-20160816; b=gGiJwW/DftvNqkEFuA7FhAbunw9KVV0oRVoqv+ax3FkfgUV2VsuAKKmRQUIPAq5aRK Pv4R0dwpLzhZyvep3V1/fn2HGQLkfe/IQD6k/EEt/9md2WFyAiaS1weaZpCNC3SrvSne 0Vn3i+xBygEVj11+fXVFhjZ9Jp04PyCLp8tWEDX/Kh3SjB1g+RuB8Wg7WQwCcp4XVS/t dcRuvOSzXoR/rhGUMEdn1JrVe3fUlF8WaOUS7EfExKRWm0mLkwYEai07vY3cqkdQUfbZ /0KjRQGbCetBhpLeG1N8K27ToCx3+JOtrLhZR5mCap/A+r4CcXWiockvBpC6Q1Vn4IWD JRUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UzG3xwxvfaLfshaLysPhOgwGVwb5K3wxbNsB2PeYW8Y=; b=q1bbaEYtARFapuNYAR3QehQ9dC0WdbH+UZgefzuThZ18AViVGVIW8iI0Ms8A+JVlkw rPJroXDd5F1uwtDu37nOQSYTp2sih5mMcotBGuo2NLD1d2xf3s16oZCaWSg5kg+6uclm jgZS9zrz1sEoIOW8ZMGU3N2tLSe/j/x9oIjyMSBl5whZ2K1jMVpeq7bdXvvXoA86E6Lm taz3kbv7UFpMZigqqGaLvrgxkdD0RgwJ1WmFgeS6KSCYoLMlH6lszI3ZIhrvEgge6yI3 0jX0Viz2KdCK3Ks6pd2CBwaqkqf0vjZpeyDM82q2lYwVrPMvkpEclDUXxqCN4Yyj3jkC e1SQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=xIIfbSPN; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id t7-20020a056a0021c700b004f72d2cba73si9022671pfj.199.2022.03.11.15.13.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Mar 2022 15:13:52 -0800 (PST) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=xIIfbSPN; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 8214D2220D1; Fri, 11 Mar 2022 14:13:04 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344328AbiCJWPH (ORCPT + 99 others); Thu, 10 Mar 2022 17:15:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344329AbiCJWPF (ORCPT ); Thu, 10 Mar 2022 17:15:05 -0500 Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43763197B43 for ; Thu, 10 Mar 2022 14:14:03 -0800 (PST) Received: by mail-pg1-x533.google.com with SMTP id q19so5866351pgm.6 for ; Thu, 10 Mar 2022 14:14:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UzG3xwxvfaLfshaLysPhOgwGVwb5K3wxbNsB2PeYW8Y=; b=xIIfbSPNUV8Ow0wLvcRQdP2Qe7loeLLVXmOTwxDaXkfmDW5jCezViM98w7q1uQr1I2 g2Io5NWjZjlegDBMXHuSk+kWVxbfISQOzk7UR0mcoCMj/FP9XMU5QzSH338gEXdaQMm3 FXAYA8/XXSntazYo0o5GiyvFgBJ5bUFtmxaHVcpBwZuxVnkcFSokFlDIb88U/Nadisgb 0oJnJDk7Jub0KO+awAzgiGlZfGkXRooPIu/ule2CbLNwTSSxC0BqhuV/puIYC3k0Vyfy RyQvzHYY0FabRV9wwYNpG983O9ytwUKxe98ekoHczUocjnhzjEjkhPo1bf/CT3OgdcV4 gsVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UzG3xwxvfaLfshaLysPhOgwGVwb5K3wxbNsB2PeYW8Y=; b=x6k+NHZAysKhlI0a2VlZjW0NW8xclwpMVbGLMl52gYwa0KmGMmxwjp295MqpoqgbW3 eRMYjliLYNGHxkKb6b53lLxb/HoV0nDdntdcMFZq6BuXdNylrkk2a6eUM/uISePQt7fL AodBnTc4t+CiKU+lZQvZ94oGik+Yz8BrG2CsNJcARLK5EJnb5b+EPvYLLJMZSmriuTFO IqQI+DNhaMndtGr1ndmRZ4QaCLNaphJ+bRsTGCH8MhXele5DJ6y3rDGFECtUTZY6PhNC N875Gof8IGM3ZJT+hnj6hP1/cXRYCla/57yYOoSfEcNuLVupDOHZLC+iyTL4BDmM/oIW NTyw== X-Gm-Message-State: AOAM530Tf8AiMkDXRbnJLSJIW+n6C5vLtdPoRw1K4qSGnBZvIdZOtkQ9 i3lo2X0sPqzDzh57CMKEb99aSw== X-Received: by 2002:a05:6a00:843:b0:4f7:2830:6d81 with SMTP id q3-20020a056a00084300b004f728306d81mr6965380pfk.76.1646950442784; Thu, 10 Mar 2022 14:14:02 -0800 (PST) Received: from localhost.localdomain ([50.39.160.154]) by smtp.gmail.com with ESMTPSA id nn15-20020a17090b38cf00b001bfceefd8cfsm3511915pjb.48.2022.03.10.14.14.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Mar 2022 14:14:02 -0800 (PST) From: Tadeusz Struk To: davem@davemloft.net Cc: Tadeusz Struk , Willem de Bruijn , Hideaki YOSHIFUJI , David Ahern , Jakub Kicinski , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , netdev@vger.kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, syzbot+e223cf47ec8ae183f2a0@syzkaller.appspotmail.com Subject: [PATCH v2] net: ipv6: fix skb_over_panic in __ip6_append_data Date: Thu, 10 Mar 2022 14:13:28 -0800 Message-Id: <20220310221328.877987-1-tadeusz.struk@linaro.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Syzbot found a kernel bug in the ipv6 stack: LINK: https://syzkaller.appspot.com/bug?id=205d6f11d72329ab8d62a610c44c5e7e25415580 The reproducer triggers it by sending a crafted message via sendmmsg() call, which triggers skb_over_panic, and crashes the kernel: skbuff: skb_over_panic: text:ffffffff84647fb4 len:65575 put:65575 head:ffff888109ff0000 data:ffff888109ff0088 tail:0x100af end:0xfec0 dev: Add a check that prevents an invalid packet with MTU equall to the fregment header size to eat up all the space for payload. The reproducer can be found here: LINK: https://syzkaller.appspot.com/text?tag=ReproC&x=1648c83fb00000 Cc: Willem de Bruijn Cc: David S. Miller Cc: Hideaki YOSHIFUJI Cc: David Ahern Cc: Jakub Kicinski Cc: Alexei Starovoitov Cc: Daniel Borkmann Cc: Andrii Nakryiko Cc: Martin KaFai Lau Cc: Song Liu Cc: Yonghong Song Cc: John Fastabend Cc: KP Singh Cc: netdev@vger.kernel.org Cc: bpf@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: stable@vger.kernel.org Reported-by: syzbot+e223cf47ec8ae183f2a0@syzkaller.appspotmail.com Signed-off-by: Tadeusz Struk --- v2: Instead of updating the alloclen add a check that prevents an invalid packet with MTU equall to the fregment header size to eat up all the space for payload. Fix suggested by Willem de Bruijn --- net/ipv6/ip6_output.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 4788f6b37053..6d45112322a0 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -1649,6 +1649,16 @@ static int __ip6_append_data(struct sock *sk, skb->protocol = htons(ETH_P_IPV6); skb->ip_summed = csummode; skb->csum = 0; + + /* + * Check if there is still room for payload + */ + if (fragheaderlen >= mtu) { + err = -EMSGSIZE; + kfree_skb(skb); + goto error; + } + /* reserve for fragmentation and ipsec header */ skb_reserve(skb, hh_len + sizeof(struct frag_hdr) + dst_exthdrlen); -- 2.35.1