Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2708512rwd; Fri, 26 May 2023 10:03:16 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5X5MeOr95otIOq+QvI/ySssPXE4gHxxHyn++DxSfSyDpshjGHs0k2uB1LeqXgq80wfDDum X-Received: by 2002:a05:6a00:2193:b0:62d:d045:392 with SMTP id h19-20020a056a00219300b0062dd0450392mr4750603pfi.32.1685120596455; Fri, 26 May 2023 10:03:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685120596; cv=none; d=google.com; s=arc-20160816; b=lKtGWIyY7fMtG2GTiLVtF9qj0HsVVf2gfzwM24N59QPeSHCkPmc7V286d5BKuZ8ifS k52+dZ5aCwBod6jEH7R//yLFtB/iaCtuNDfDMcBj/2dLqOUSZGuHlK5nOgYaPFaNzfWa f/tbK7D9pcX/MenEtOc9be2lAtdYrYmiMjQefuYoEOT3oZ7Fyy7QM6StzRdLh/F9zPSH WyxfhjS+hFcanzohfi4g9PAwstEBErddnHI0WQfoKfd9B8WS8VG3LlyVacDOVYGwCOQu bXPoyse0prstAYtwiGniNgo324U5UUD8aePrvupGqBus+XHUmYp8hkcD/e71dfaERi2D tT8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=OQypiCBwLug/0iNSH44aWt+z5fa/mlixwMi4GartHM0=; b=rmThp09f5PIzKNGbR7qb+bwZ9c+HkRYLR6vIY9q/cW9aXo5o2G5srFWs+oTFxWoepV hWdbNyQPJ2vgVjOwksB9quYCwhzSHQ4uWQYcVo+gPPW1t20YwwF+pJZlIQHrgwCCDTm5 rH5FGzxoqBO/DS0MgBCsr8OkNNDOejJcHpklImuIjH2akAPGyEbZYvyCXEn9gf/RovJ8 9WYwZcrrtu7kksyaZEdiw7ujAYVnWloUIHcZiFUXQ2/4wySfOfJqhCFeeDSEFEUfdzvj dN4IYPlYmtTZMFapxYuOhJnMSL/SLSBL5ylvc4FVFC0USyGvS2Hbsyoa2P+5MWB0VM6x 2eTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Gl+ikmk2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x21-20020aa78f15000000b00642ea71f6d9si478764pfr.336.2023.05.26.10.03.01; Fri, 26 May 2023 10:03:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Gl+ikmk2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237092AbjEZQqV (ORCPT + 99 others); Fri, 26 May 2023 12:46:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46498 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236942AbjEZQqU (ORCPT ); Fri, 26 May 2023 12:46:20 -0400 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 729A8125 for ; Fri, 26 May 2023 09:46:18 -0700 (PDT) Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-3f5dbd8f677so325e9.1 for ; Fri, 26 May 2023 09:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685119577; x=1687711577; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=OQypiCBwLug/0iNSH44aWt+z5fa/mlixwMi4GartHM0=; b=Gl+ikmk2cb05CjmCFREepzfL7BWw54b7H+Ki+DPwzP0esDIW+1wgi9TpO63y9oRMB0 nh5s+qCsdOX+FDsPf901C0+qjRnScLo7OaTt5B0G9eneJ/gkWJMtsBBz3NWgDASdcD4c u7M3hoaZfNn5gHEt+UeS5zPFg0NjUkNJOVGn9XmwPuqoUttyizJQjXeBynCG/z0E/1+8 IyvyilgyWsK3UPx7JjnTizNwPQAtyiDpqI1LL9Es9PFIKVlj8Ots/OqHWePWnc3cUWPT fu++w0sTarD1t3FIgbVcFUCLV7hFxkqcxufAU7bwKPcFjNvUzP2OKemzXBkgO6znv9v9 ugFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685119577; x=1687711577; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OQypiCBwLug/0iNSH44aWt+z5fa/mlixwMi4GartHM0=; b=DPV/wr9zASL1ORXT5IY+bbFcm1ljrY1V+eHScg8SQu0FTkheVXQia74dYDXFnOVPNY Etn1pEUg21NydhrEd/+hqmq2pN43KWdPTdAhdQNRIE5XjjiH2ht+X7ZzhbFEquTXxacs Q/4HWfypeExK0ZDHo7Tr6T2yeJ7oUMlxqnWtq4m1f9ccJ/wmtCgvW/TkwAX2G4JE6cL9 3d08rrOflfafKyr9Vcl2wgaKWdMESaedyjCGsMZruuUzIUOl1+yQr1Kjx9HqsP65uh/c oTPO850c1vYixJKCPZ7BSyUfot3llfNaZLkOQ0JY3s/WF0mhkx4cM5dEjtqaZRe5Aap7 pJeQ== X-Gm-Message-State: AC+VfDxn3EeiElpvq/GIMJOiEErzq+6Pl4XHv1aFmPORZgyt8f8DcYRG gNqUiNOsoN6/kg3gHgD6CzMMGBVHcKDOl5ktvfJfRg== X-Received: by 2002:a05:600c:3c93:b0:3f4:2594:118a with SMTP id bg19-20020a05600c3c9300b003f42594118amr134216wmb.2.1685119576702; Fri, 26 May 2023 09:46:16 -0700 (PDT) MIME-Version: 1.0 References: <20230526150806.1457828-1-VEfanov@ispras.ru> In-Reply-To: From: Eric Dumazet Date: Fri, 26 May 2023 18:46:04 +0200 Message-ID: Subject: Re: [PATCH] udp6: Fix race condition in udp6_sendmsg & connect To: Vlad Efanov Cc: Willem de Bruijn , "David S. Miller" , David Ahern , Jakub Kicinski , Paolo Abeni , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, lvc-project@linuxtesting.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=unavailable 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 On Fri, May 26, 2023 at 6:09=E2=80=AFPM Vlad Efanov wro= te: > > Eric, > > > udp6_sendmsg() currently still locks the socket (on line 1595). > Not really, look more closely at lines 1580 -> 1594 > > Best regards, > > Vlad. > > > On 26.05.2023 18:29, Eric Dumazet wrote: > > On Fri, May 26, 2023 at 5:08=E2=80=AFPM Vladislav Efanov wrote: > >> Syzkaller got the following report: > >> BUG: KASAN: use-after-free in sk_setup_caps+0x621/0x690 net/core/sock.= c:2018 > >> Read of size 8 at addr ffff888027f82780 by task syz-executor276/3255 > > Please include a full report. > > > >> The function sk_setup_caps (called by ip6_sk_dst_store_flow-> > >> ip6_dst_store) referenced already freed memory as this memory was > >> freed by parallel task in udpv6_sendmsg->ip6_sk_dst_lookup_flow-> > >> sk_dst_check. > >> > >> task1 (connect) task2 (udp6_sendmsg) > >> sk_setup_caps->sk_dst_set | > >> | sk_dst_check-> > >> | sk_dst_set > >> | dst_release > >> sk_setup_caps references | > >> to already freed dst_entry| > > > >> The reason for this race condition is: udp6_sendmsg() calls > >> ip6_sk_dst_lookup() without lock for sock structure and tries to > >> allocate/add dst_entry structure to sock structure in parallel with > >> "connect" task. > >> > >> Found by Linux Verification Center (linuxtesting.org) with syzkaller. > >> > >> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") > > This is a bogus Fixes: tag > > > > In old times, UDP sendmsg() was using the socket lock. > > > > Then, in linux-4.0 Vlad Yasevich made UDP v6 sendmsg() lockless (and > > racy in many points) > > > > > >> Signed-off-by: Vladislav Efanov > >> --- > >> net/ipv6/udp.c | 3 +++ > >> 1 file changed, 3 insertions(+) > >> > >> diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c > >> index e5a337e6b970..a5ecd5d93b0a 100644 > >> --- a/net/ipv6/udp.c > >> +++ b/net/ipv6/udp.c > >> @@ -1563,12 +1563,15 @@ int udpv6_sendmsg(struct sock *sk, struct msgh= dr *msg, size_t len) > >> > >> fl6->flowlabel =3D ip6_make_flowinfo(ipc6.tclass, fl6->flowla= bel); > >> > >> + lock_sock(sk); > >> dst =3D ip6_sk_dst_lookup_flow(sk, fl6, final_p, connected); > >> if (IS_ERR(dst)) { > >> err =3D PTR_ERR(dst); > >> dst =3D NULL; > >> + release_sock(sk); > >> goto out; > >> } > >> + release_sock(sk); > >> > >> if (ipc6.hlimit < 0) > >> ipc6.hlimit =3D ip6_sk_dst_hoplimit(np, fl6, dst); > >> -- > >> 2.34.1 > >> > > There must be another way really. > > You just killed UDP performance.