Received: by 2002:a05:7412:8521:b0:e2:908c:2ebd with SMTP id t33csp2219391rdf; Mon, 6 Nov 2023 07:58:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IGkyJRsWPMRcSGf73qWC2TRkkk2+U9N8BEnSodJJj1gqsMDW3EeZA9wsV9dIq1d+TMWmvyl X-Received: by 2002:a17:902:d552:b0:1cc:50ea:d5db with SMTP id z18-20020a170902d55200b001cc50ead5dbmr28698028plf.4.1699286304769; Mon, 06 Nov 2023 07:58:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699286304; cv=none; d=google.com; s=arc-20160816; b=yCTM0dRn0CV049rBhg/GvtQXSgqCEsBCCL2MNzWKMSqgNKGufIGQvQu9Js8dkVeR3u aIpbBJW9Bj+cHW5CRXg++BRYQy5NYcKXnuZ1+810NDuqb88JyB19im5F32YZEfP1Jcif 6a4c68/zEYNAYQtRKHLuYDq080f0OLkrMquX9pUuommD2uGDMFB7L8kY/7dRiSIcwmZH kMY+iDNzRVT2s6ECQF32MtZzq3JqC75ElDl98W58LFKV8vQvUnKQNwEFQodtKWD5grbL CT8YXObNm5giwee20zl99Jl0da1fpEKBCKPsNCbdLVypaMzj6ALUHpZQHh/Bi3Y3q/xN UGwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=4MtHX/lP2RTeYKD2u0EuYeb05l5YiN5A+lnZc47vZy0=; fh=/zeVIn1pdx+E6RGTxig8dxqnsM1cbEljY/P37mlXOnc=; b=U+BzbVk/rHlHke8U1uzSn/ZNR++WClgZmHbGPnO+2eCr1ojdDh+DsKGowUI2AEi0j7 lwPiSYIZb0WiXxN9FNpdajPBAeyDN9uKGTIU02V4AUGoEcw8JU6JOyEv0n+/4QEL70wa e/QykISsAZBTjE5U08Q1In8Rz8NDdhr+Cizf6urjMYFJnlIP4Ws7OgKXoAZbRyXpO5bi BXv3GSny834Yhi25BhoD3bpNvvWuHG5fWIzkZqj1tRdsuK1GC8pbRV0lZoiC4Z63awYY dWzyIyV/Sxz1vtV4CB/t9ig734VwU8isZ3iPwX02Kw6hXr4LDBzVwBI3nxrLwAevqWs0 0nQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=jVpno2AD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id i5-20020a170902c94500b001cc5899113asi9118377pla.361.2023.11.06.07.58.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Nov 2023 07:58:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=jVpno2AD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 18182803A539; Mon, 6 Nov 2023 07:58:22 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232064AbjKFP6M (ORCPT + 99 others); Mon, 6 Nov 2023 10:58:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231929AbjKFP6L (ORCPT ); Mon, 6 Nov 2023 10:58:11 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EFADA107 for ; Mon, 6 Nov 2023 07:58:08 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6326C433C8; Mon, 6 Nov 2023 15:58:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699286288; bh=mdCc81ZkKWiCWgh0DtK923uhvIGiH7XK/k1z5kL2ckc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=jVpno2ADWZzo2xf5ZUTtn0YL9/ygi4EpKLhqUMgJow50tSO1nxdvrrC2av4reY9CE aCNR/Ks5ICeomvaqfiOel5d9nG5SS9mZHe3jlroaKuN+vrWWCs97gwzYTEcD2IDcKM v8sX8al7SpfPBoSwW+vjtSqXZ85J0aeAWiCTImGWQSY4dB+X+TamwBbPXVTbLhdWkE Dm39mJ8u8jYxZN7J4eLXDH4ko7fmrUklGnmooQ6uRk9ithUWd0zRY/Zr5mMh7p0LOi OoRSIOBPovrjb53n4nalOPH5FQwzjorT8cBOP+inXtCB1V8U6OmNxBIV19xHpFXvf+ ITxTKa9mM8iIg== Date: Mon, 6 Nov 2023 08:58:06 -0700 From: Nathan Chancellor To: Eric Dumazet Cc: davem@davemloft.net, dsahern@kernel.org, kuba@kernel.org, pabeni@redhat.com, ndesaulniers@google.com, trix@redhat.com, 0x7f454c46@gmail.com, noureddine@arista.com, hch@infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, patches@lists.linux.dev Subject: Re: [PATCH net v2] tcp: Fix -Wc23-extensions in tcp_options_write() Message-ID: <20231106155806.GA1181828@dev-arch.thelio-3990X> References: <20231106-tcp-ao-fix-label-in-compound-statement-warning-v2-1-91eff6e1648c@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 06 Nov 2023 07:58:22 -0800 (PST) On Mon, Nov 06, 2023 at 04:52:52PM +0100, Eric Dumazet wrote: > On Mon, Nov 6, 2023 at 4:36 PM Nathan Chancellor wrote: > > > > Clang warns (or errors with CONFIG_WERROR=y) when CONFIG_TCP_AO is set: > > > > net/ipv4/tcp_output.c:663:2: error: label at end of compound statement is a C23 extension [-Werror,-Wc23-extensions] > > 663 | } > > | ^ > > 1 error generated. > > > > On earlier releases (such as clang-11, the current minimum supported > > version for building the kernel) that do not support C23, this was a > > hard error unconditionally: > > > > net/ipv4/tcp_output.c:663:2: error: expected statement > > } > > ^ > > 1 error generated. > > > > While adding a semicolon after the label would resolve this, it is more > > in line with the kernel as a whole to refactor this block into a > > standalone function, which means the goto a label construct can just be > > replaced with a simple return. Do so to resolve the warning. > > > > Closes: https://github.com/ClangBuiltLinux/linux/issues/1953 > > Fixes: 1e03d32bea8e ("net/tcp: Add TCP-AO sign to outgoing packets") > > Signed-off-by: Nathan Chancellor > > --- > > Please let me know if this function should have a different name. I > > think I got all the changes of the function shuffle correct but some > > testing would be appreciated. > > > > Changes in v2: > > - Break out problematic block into its own function so that goto can be > > replaced with a simple return, instead of the simple semicolon > > approach of v1 (Christoph) > > - Link to v1: https://lore.kernel.org/r/20231031-tcp-ao-fix-label-in-compound-statement-warning-v1-1-c9731d115f17@kernel.org > > --- > > net/ipv4/tcp_output.c | 69 ++++++++++++++++++++++++++++----------------------- > > 1 file changed, 38 insertions(+), 31 deletions(-) > > > > diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c > > index 0d8dd5b7e2e5..3f8dc74fbf40 100644 > > --- a/net/ipv4/tcp_output.c > > +++ b/net/ipv4/tcp_output.c > > @@ -601,6 +601,43 @@ static void bpf_skops_write_hdr_opt(struct sock *sk, struct sk_buff *skb, > > } > > #endif > > > > +static void process_tcp_ao_options(struct tcp_sock *tp, > > + const struct tcp_request_sock *tcprsk, > > + struct tcp_out_options *opts, > > + struct tcp_out_options *opts, > > ptr has a different type than in the caller, this is a bit confusing > > I would use > > static __be32 * process_tcp_ao_options(struct tcp_sock *tp, const > struct tcp_request_sock *tcprsk, > struct tcp_out_options *opts,struct tcp_key *key, __be32 *ptr) Ah, this suggestion is much better, thanks. I'll make this adjustment and send a v3 later today in case others have any suggested changes (I know netdev prefers waiting 24 hours for another revision but I'd like to get this warning cleared up by -rc1 so it does not proliferate into other trees and I sent v1 almost a week ago). > > +{ > > +#ifdef CONFIG_TCP_AO > > + u8 maclen = tcp_ao_maclen(key->ao_key); > > + > > + if (tcprsk) { > > + u8 aolen = maclen + sizeof(struct tcp_ao_hdr); > > + > > + *(*ptr)++ = htonl((TCPOPT_AO << 24) | (aolen << 16) | > > + (tcprsk->ao_keyid << 8) | > > + (tcprsk->ao_rcv_next)); > > > *ptr++ = ... > > (and in all other *ptr uses in this helper) > > > + } else { > > + struct tcp_ao_key *rnext_key; > > + struct tcp_ao_info *ao_info; > > + > > + ao_info = rcu_dereference_check(tp->ao_info, > > + lockdep_sock_is_held(&tp->inet_conn.icsk_inet.sk)); > > + rnext_key = READ_ONCE(ao_info->rnext_key); > > + if (WARN_ON_ONCE(!rnext_key)) > > + return; > > + *(*ptr)++ = htonl((TCPOPT_AO << 24) | > > + (tcp_ao_len(key->ao_key) << 16) | > > + (key->ao_key->sndid << 8) | > > + (rnext_key->rcvid)); > > + } > > + opts->hash_location = (__u8 *)(*ptr); > > + *ptr += maclen / sizeof(**ptr); > > + if (unlikely(maclen % sizeof(**ptr))) { > > + memset(*ptr, TCPOPT_NOP, sizeof(**ptr)); > > + (*ptr)++; > > + } > > +#endif > > return ptr; > +} > > + > > /* Write previously computed TCP options to the packet. > > * > > * Beware: Something in the Internet is very sensitive to the ordering of > > @@ -629,37 +666,7 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp, > > opts->hash_location = (__u8 *)ptr; > > ptr += 4; > > } else if (tcp_key_is_ao(key)) { > > -#ifdef CONFIG_TCP_AO > > - u8 maclen = tcp_ao_maclen(key->ao_key); > > - > > - if (tcprsk) { > > - u8 aolen = maclen + sizeof(struct tcp_ao_hdr); > > - > > - *ptr++ = htonl((TCPOPT_AO << 24) | (aolen << 16) | > > - (tcprsk->ao_keyid << 8) | > > - (tcprsk->ao_rcv_next)); > > - } else { > > - struct tcp_ao_key *rnext_key; > > - struct tcp_ao_info *ao_info; > > - > > - ao_info = rcu_dereference_check(tp->ao_info, > > - lockdep_sock_is_held(&tp->inet_conn.icsk_inet.sk)); > > - rnext_key = READ_ONCE(ao_info->rnext_key); > > - if (WARN_ON_ONCE(!rnext_key)) > > - goto out_ao; > > - *ptr++ = htonl((TCPOPT_AO << 24) | > > - (tcp_ao_len(key->ao_key) << 16) | > > - (key->ao_key->sndid << 8) | > > - (rnext_key->rcvid)); > > - } > > - opts->hash_location = (__u8 *)ptr; > > - ptr += maclen / sizeof(*ptr); > > - if (unlikely(maclen % sizeof(*ptr))) { > > - memset(ptr, TCPOPT_NOP, sizeof(*ptr)); > > - ptr++; > > - } > > -out_ao: > > -#endif > > + process_tcp_ao_options(tp, tcprsk, opts, key, &ptr); > > ptr = process_tcp_ao_options(tp, tcprsk, opts, key, ptr); > > > > } > > if (unlikely(opts->mss)) { > > *ptr++ = htonl((TCPOPT_MSS << 24) | > > > > --- > > base-commit: c1ed833e0b3b7b9edc82b97b73b2a8a10ceab241 > > change-id: 20231031-tcp-ao-fix-label-in-compound-statement-warning-ebd6c9978498 > > > > Best regards, > > -- > > Nathan Chancellor > >