Received: by 2002:ac8:4892:0:b0:41c:c224:f26f with SMTP id i18csp828902qtq; Thu, 19 Oct 2023 13:38:37 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFuINvGMLZc33yJtCmwZNHDTZuq+ze5euPmwW/tfVDIzyQJDYAebThzwCC/C39Tn+3dCy6Y X-Received: by 2002:a05:6359:b97:b0:143:96ac:96ec with SMTP id gf23-20020a0563590b9700b0014396ac96ecmr3489475rwb.25.1697747916902; Thu, 19 Oct 2023 13:38:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697747916; cv=none; d=google.com; s=arc-20160816; b=Eyvzvki8ek3OLFMCRXdcMzmOg1bOi0hZGv7eXeu2Ox26fV0508sD4pPi/xvOcR0EL+ z9zawBp9st2z2J4qrRcYlibWsMLOevB9D/weRT7vkwB5bnp9Ri+X4vNQzgxbUW8Hb+PW SoVjH1YmbwXY87W0AxAYUBqSo7TiwWHUAOnS84FhE9tfl9inikIE9yOZpjB4nbJIzaB3 cvyk8kNbq3od8QOAwbKnB/a38xkzATZfN93RXFtkQQJc8bsP0VVVkdrPNkkCH7X1KBpB BC05Uwp5WtAjQRTL/3VdptsWUJ3ptY7eI1otrWDC1821Q0mz+x8sxbsB35X0sWEGxWda XQKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:mime-version:date :dkim-signature:message-id; bh=kMGt99Xkqblx8LvlSkYl/7sJkNjzJz3wZOFEvGWa3Zk=; fh=KFcCPCTTXW/2+IiS4ncv8Z7szL1ocvqOKNCaeEcutqY=; b=mn6Iy5F824n9tPmezpbJ05IQ2kyeNzXb3HYNY09/Wm/OlGWfjvxKr+tDlZ+sOvuFH9 QdeyfS1thoa3ApZoJfnQqmoUeoWKxI6K+R7zA0yx14qdDaXGcA6fSm80UrBlL5jZfF2Q LzQnCC1qV7FQkNV0w3VYyKCULRCr7lM5pKFjhMoLd5AxCALydIKhY8ljgyE57//s7cod az4RO5OaUPlfKm2PAdrj3FBQ8St6vUj3eRBg6/KpGZqaT88xiwJReZTOAK6y5Bon7BpA AfSGF2MAfs1Dk/m0BSjaBRg7S3vRiPd0NObRrbgjhIHHQKdErVYieSzqh3fMmhQeZWsb KFKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=byX+cBYx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id g10-20020aa796aa000000b006b728259b67si405749pfk.177.2023.10.19.13.38.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Oct 2023 13:38:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=byX+cBYx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 4A52E83B818E; Thu, 19 Oct 2023 13:38:34 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235532AbjJSUiI (ORCPT + 99 others); Thu, 19 Oct 2023 16:38:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233208AbjJSUiG (ORCPT ); Thu, 19 Oct 2023 16:38:06 -0400 Received: from out-208.mta1.migadu.com (out-208.mta1.migadu.com [95.215.58.208]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8F49A3 for ; Thu, 19 Oct 2023 13:38:03 -0700 (PDT) Message-ID: <21dc6507-e1f5-a261-7a9c-7e0cb22e1fc7@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1697747882; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kMGt99Xkqblx8LvlSkYl/7sJkNjzJz3wZOFEvGWa3Zk=; b=byX+cBYxDZ4lxvU3JOpwEvNm1++LM4xfxRj161PkE4sJCHcM2Ao3Nlry/GnyZTjyuc5rFq zuzgIHEJ575EHk7r8mdge924ILnz6BefOPHEKiK/53t97CjE9a2Q3++vtNT0LohK67x0zU a53NhybACyDCAr//dG3t8StREr3dGQE= Date: Thu, 19 Oct 2023 13:37:51 -0700 MIME-Version: 1.0 Subject: Re: [PATCH v7 04/11] net/socket: Break down __sys_getsockopt Content-Language: en-US To: Jens Axboe , Breno Leitao Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, io-uring@vger.kernel.org, Kuniyuki Iwashima , Alexander Mikhalitsyn , David Howells , sdf@google.com, asml.silence@gmail.com, willemdebruijn.kernel@gmail.com, kuba@kernel.org, pabeni@redhat.com, krisman@suse.de, Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Song Liu , Yonghong Song , KP Singh , Hao Luo , Jiri Olsa , "David S. Miller" , Eric Dumazet References: <20231016134750.1381153-1-leitao@debian.org> <20231016134750.1381153-5-leitao@debian.org> <1074c1f1-e676-fbe6-04bc-783821d746a1@linux.dev> X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Martin KaFai Lau In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.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 (fry.vger.email [0.0.0.0]); Thu, 19 Oct 2023 13:38:34 -0700 (PDT) On 10/19/23 1:04 PM, Jens Axboe wrote: > On 10/19/23 1:12 PM, Martin KaFai Lau wrote: >> On 10/16/23 6:47?AM, Breno Leitao wrote: >>> diff --git a/net/socket.c b/net/socket.c >>> index 0087f8c071e7..f4c156a1987e 100644 >>> --- a/net/socket.c >>> +++ b/net/socket.c >>> @@ -2350,6 +2350,42 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname, >>> INDIRECT_CALLABLE_DECLARE(bool tcp_bpf_bypass_getsockopt(int level, >>> int optname)); >>> +int do_sock_getsockopt(struct socket *sock, bool compat, int level, >>> + int optname, sockptr_t optval, sockptr_t optlen) >>> +{ >>> + int max_optlen __maybe_unused; >>> + const struct proto_ops *ops; >>> + int err; >>> + >>> + err = security_socket_getsockopt(sock, level, optname); >>> + if (err) >>> + return err; >>> + >>> + ops = READ_ONCE(sock->ops); >>> + if (level == SOL_SOCKET) { >>> + err = sk_getsockopt(sock->sk, level, optname, optval, optlen); >>> + } else if (unlikely(!ops->getsockopt)) { >>> + err = -EOPNOTSUPP; >>> + } else { >>> + if (WARN_ONCE(optval.is_kernel || optlen.is_kernel, >>> + "Invalid argument type")) >>> + return -EOPNOTSUPP; >>> + >>> + err = ops->getsockopt(sock, level, optname, optval.user, >>> + optlen.user); >>> + } >>> + >>> + if (!compat) { >>> + max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen); >> >> The max_optlen was done before the above sk_getsockopt. The bpf CI cannot catch it because it cannot apply patch 5 cleanly. I ran the following out of the linux-block tree: >> >> $> ./test_progs -t sockopt_sk >> test_sockopt_sk:PASS:join_cgroup /sockopt_sk 0 nsec >> run_test:PASS:skel_load 0 nsec >> run_test:PASS:setsockopt_link 0 nsec >> run_test:PASS:getsockopt_link 0 nsec >> (/data/users/kafai/fb-kernel/linux/tools/testing/selftests/bpf/prog_tests/sockopt_sk.c:111: errno: Operation not permitted) Failed to call getsockopt, ret=-1 >> run_test:FAIL:getsetsockopt unexpected error: -1 (errno 1) >> #217 sockopt_sk:FAIL > > Does it work with this incremental? I can fold that in, will rebase > anyway to collect acks. Yes, that should work. Acked-by: Martin KaFai Lau > > > diff --git a/net/socket.c b/net/socket.c > index bccd257e13fe..eb6960958026 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -2344,6 +2344,9 @@ int do_sock_getsockopt(struct socket *sock, bool compat, int level, > if (err) > return err; > > + if (!compat) > + max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen); > + > ops = READ_ONCE(sock->ops); > if (level == SOL_SOCKET) { > err = sk_getsockopt(sock->sk, level, optname, optval, optlen); > @@ -2358,12 +2361,10 @@ int do_sock_getsockopt(struct socket *sock, bool compat, int level, > optlen.user); > } > > - if (!compat) { > - max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen); > + if (!compat) > err = BPF_CGROUP_RUN_PROG_GETSOCKOPT(sock->sk, level, optname, > optval, optlen, max_optlen, > err); > - } > > return err; > } >