From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EFC241F7EC; Thu, 16 Jul 2026 13:01:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206918; cv=none; b=WrX1+/e/AhlrxCxtKUMHxWbFLJsV5rtiAf1KXoxaaSo7PBWy4mrA03jX5fWd8MbxGs1a6+icUIl64swxcqFTCWwIOg09mD8iGhF49cHgdgPbtqb+2JRr9pvzPFyRg8uy4KIcQIkkQmE8OYXWamLsITz0XnO9V+P9uAln5I5c+kQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206918; c=relaxed/simple; bh=c5PglPwUQC5mxsBdp2RPxVvoUHdq1cPtE8naNu9cnIA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kYQBXu8EduHwabfbLSJCzFOdeu+YaS1ITw+uJTwwEaJTQ1oDhp+GKgwDyMBOHapmmdKe5JZ5WmQkSdJv9uKYJTOyFl9kKZwvGkWEMP9WPPqnBkL3aB1+RaYKrekHnsOt9KI7uSBxqWInK9DWlIyb2fmtEJIcRLnQyowvNfwj0pI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=fDIZA9eW; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="fDIZA9eW" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=XC51hEuGBD77AWqPRk8uGjYTB9yK3f3l1kdf5Rac8+0=; b=fDIZA9eW68iFFwYmEf3KQxG85y pMEf95m8Ib6u9Gua7zaebrempeKJMxNo65UAM/bhi8viQdX8ZSKxVKrq0Sn5KFTeKNNfukbDlGQg4 VQJ9G6cYxx8sK8ljTfji3yVPkmPo7m8jyC6da8uzMjyGvrGKx1GffewLjsdZAv9MJaY4EFY07LG+T Px+Q4iyURbaqwihNNf6C1MBhNLLkSZ6EFhX5l05jBVU3lneDx8QF2eiU4HwBAMHJfINNSfFsivwTz BC9xNQcRvtVRyPsA7ZrIRIVkEv/wM6sSUi5xVRnBEVktpvDk5TfOSa60KvXrzMgQEPQQcfvi02HSi HCAAiuzg==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLio-003q6G-0k; Thu, 16 Jul 2026 13:01:50 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 05:59:59 -0700 Subject: [PATCH net-next 1/7] ipv6: raw: drop unused level argument from do_rawv6_getsockopt Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-1-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=1318; i=leitao@debian.org; h=from:subject:message-id; bh=c5PglPwUQC5mxsBdp2RPxVvoUHdq1cPtE8naNu9cnIA=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY0h32R7rkywIx559Uynp1WfmV3umKVOj3Xt nO9mXXXTveJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bcoRD/kB01Z0rx9N9J/Bha0kXR8tivdHpeBuZXx1Mhewr2WscbzSKnd4S1BrpXy0oGoVKTOR7cu TiWWb080AIkz39o1FBOly+blxhJKJ/lnHq8qBE0hCW7Y3rWPwQwJaynMkU7lhqpB9ebonxJFEnS Rbiya+clIIFx3EkH9pg/DgSMs0iyNDof7ZDSG9RhIN2wP3E863XInHtezNHmjflesi2QL6I1dgb d6do1ZYq9biRIH6do6YykslTzLI/Az8FMQVozuMBm6K38qcTUI+QTtd1qg46jIa26O6AFi9cN3J 5kgidKZq0Xp0zzRsoPsElNvUqnmArWSkQkJSNX2dcsMdPTlVOSH4xrvdUg7a8xZh/9lamLVQk9R LvfEmqgHfmt9ZgGAwUxYdGt2+TzVyrAhQYFeP/K8brwvNWywwZ+54BOUkCtdz4k8d/uX7g0s29N S+65ltCmrqwdN9Pg++Gyq0wlQbnSuoJlrnbl3JdQsuWlXkx+D8DxzhratwfhEBv8M/BpQrsjvFR E6w1+mDwmwW6pBvcXgv5Q0MB4QVCN2zXyYvk1e+7hYpgs8yKsW4rlZzLSKhWljoQ56LPwBZt0xZ TzOk7+kPHf7FC/Z3OeE78aK7tVP3omn4fi+5++mNGGKuTr+sS1nfe5VxCinQZIgelzYyZvVCaD/ poAcfIc2L6jUd1A== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao do_rawv6_getsockopt() takes a level argument but never uses it; the level dispatch is handled by the caller, rawv6_getsockopt(). Drop it, matching ipv4's do_raw_getsockopt(). No functional change. Signed-off-by: Breno Leitao --- net/ipv6/raw.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 3cc58698cbbd3..99eec36796fb9 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -1051,8 +1051,8 @@ static int rawv6_setsockopt(struct sock *sk, int leve= l, int optname, return do_rawv6_setsockopt(sk, level, optname, optval, optlen); } =20 -static int do_rawv6_getsockopt(struct sock *sk, int level, int optname, - char __user *optval, int __user *optlen) +static int do_rawv6_getsockopt(struct sock *sk, int optname, + char __user *optval, int __user *optlen) { struct raw6_sock *rp =3D raw6_sk(sk); int val, len; @@ -1109,7 +1109,7 @@ static int rawv6_getsockopt(struct sock *sk, int leve= l, int optname, return ipv6_getsockopt(sk, level, optname, optval, optlen); } =20 - return do_rawv6_getsockopt(sk, level, optname, optval, optlen); + return do_rawv6_getsockopt(sk, optname, optval, optlen); } =20 static int rawv6_ioctl(struct sock *sk, int cmd, int *karg) --=20 2.53.0-Meta From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E094B4218B7; Thu, 16 Jul 2026 13:01:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206921; cv=none; b=G/OYJTi7vAUb2m8kj43lq88xmjFeHpASufFzy2Lq5gc3c06Jih0fvUbTFhkOrJrQpfpw2vgz6uKu1hcuqamm7MqGPbnlzqB8DbUbTJmXMSHOq4Z7lS1AX9T3LZTcJclYrW770ABzkrtG+qDUyQ/xmrnyqdusQnIUNum4GXcmKAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206921; c=relaxed/simple; bh=uQw9+P8SQcNospiW32OdIyj9mAmuKVQRv/ZlolZJPjE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IsbwqZnpvJjjiEziskYnkHwgZT1rnIhkmZNLLnKNbESQAHSkG4G6613v9J4t2Prax7fZDAX4leY1MIwLOPBKqGjgN666uDXbP/E22s/SOODH46obyO2bfKE3NDbOZlAamA2n/4kQHmc3foB22Qt4U+VP5WZKD+rceQ6mf8cl4cE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=UFwdLbsE; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="UFwdLbsE" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=p3olImzVCvMhNN+6I0jr7pI95BV7NvZBpFe/CbmtjVI=; b=UFwdLbsExjAVEJpoyhbUk6X0kD /sD1JxfYOPlysOCg3Vb63eOrY67/hmMNQpSIJx72tosjVo8t5MtE3BQfOLvhRSXLtv+BUZGSY0+V+ MSy2hN1Y+S5lb6XKv6on+Vo8Wz+BN5TNGqjSnvc5b1xI84GjB+dk30FImkt1R1g3yVjdVqTxUFLxJ mwEeMOXJ1hzRw656p8UyC+SwVS6U9hOHDUrqAm9HxLXp4CnNNS5nAgPLs9et3VZrSS10yq57Bat4w i4F1vH5tYCzLK3FSyNl0cW2Zs3CIAVxXnjm3CGxpBXsdNhdA6zPoAthPOq4PrtC7KzUidNErPc0A7 3QhRQErQ==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLit-003q6V-0j; Thu, 16 Jul 2026 13:01:55 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 06:00:00 -0700 Subject: [PATCH net-next 2/7] ipv6: raw: convert do_rawv6_getsockopt to sockopt_t Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-2-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=2266; i=leitao@debian.org; h=from:subject:message-id; bh=uQw9+P8SQcNospiW32OdIyj9mAmuKVQRv/ZlolZJPjE=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY03APvwX1D7EqMUjHiOoA/gBnHjgZMUrP1U jEjneGK6juJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bYpfD/9xnxHPKs5oBP5XLDv7OiS5ujz/eAUjzMPDI6zQSHGiNKjlv8oaslzWZKvK8Isxx4RIMF+ BgnonQWyV6WZM5VrI/W2X2RpurIOCZoOrlKCCHJO9mo2mG/6DZaXDjcA4hraAUjFhPcLS4t9NS5 y0S6cu6MCzoBDJbBkQiVGzZeQAi4n5ppuN2koUM99l/WQHCADqO6oR92PoRp+J6nf28QqBs5o+s geFAjch0XBmC7EAmeahMSapt0WMsCgUuexKIPBQpT266VnM608BFyEK7LMZP8FVuzUzFf5FTdNh H0BBpEfFbiipDM3RTFMI/x4etdmG7s0bEjmKw0XqO9whv6FF5epNl5HYVpkKuPYdd9Cg2qZXNKg Z2BvIqiSGjQ1hae48IuoMY2a/V0ZQWB55+YtMnXzeC/9R1BW0N25cqmaYfpz1rGzJnCYBAWN/Qq MEqO1ugWpvS//KXHExoEhBRq4N910Iyaa/5acRjtaU4znskPmvnW5v/PGPTVhwrcRJCylMQoliD rGhpWSbgC+T+rDtam41jtSoMAOqhJwHqAXnS8YyfuE6Uirrin5hyjOZGZyNliNfL6PZASGCo+xb cCs9tyHp+hPnXRPpym9/UNB4kXLqzQ/VbT8WozWDFuI7OGuI2cDo2ZHdbvr90igul9dY/0ve0aw Z68P2hQAtbO8O/A== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Convert do_rawv6_getsockopt to the new sockopt_t model, mirroring what we have in ipv4. The overall goal is to move these callbacks gradually from __user points to use sockopt_t, and this part touches do_rawv6_getsockopt. No functional change. Signed-off-by: Breno Leitao --- net/ipv6/raw.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 99eec36796fb9..1f15942d14163 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -1051,14 +1051,12 @@ static int rawv6_setsockopt(struct sock *sk, int le= vel, int optname, return do_rawv6_setsockopt(sk, level, optname, optval, optlen); } =20 -static int do_rawv6_getsockopt(struct sock *sk, int optname, - char __user *optval, int __user *optlen) +static int do_rawv6_getsockopt(struct sock *sk, int optname, sockopt_t *op= t) { struct raw6_sock *rp =3D raw6_sk(sk); int val, len; =20 - if (get_user(len, optlen)) - return -EFAULT; + len =3D opt->optlen; =20 switch (optname) { case IPV6_HDRINCL: @@ -1082,9 +1080,8 @@ static int do_rawv6_getsockopt(struct sock *sk, int o= ptname, =20 len =3D min_t(unsigned int, sizeof(int), len); =20 - if (put_user(len, optlen)) - return -EFAULT; - if (copy_to_user(optval, &val, len)) + opt->optlen =3D len; + if (copy_to_iter(&val, len, &opt->iter_out) !=3D len) return -EFAULT; return 0; } @@ -1092,6 +1089,9 @@ static int do_rawv6_getsockopt(struct sock *sk, int o= ptname, static int rawv6_getsockopt(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen) { + sockopt_t opt; + int err; + switch (level) { case SOL_RAW: break; @@ -1109,7 +1109,18 @@ static int rawv6_getsockopt(struct sock *sk, int lev= el, int optname, return ipv6_getsockopt(sk, level, optname, optval, optlen); } =20 - return do_rawv6_getsockopt(sk, optname, optval, optlen); + err =3D sockopt_init_user(&opt, optval, optlen); + if (err) + return err; + + err =3D do_rawv6_getsockopt(sk, optname, &opt); + if (err) + return err; + + if (put_user(opt.optlen, optlen)) + return -EFAULT; + + return 0; } =20 static int rawv6_ioctl(struct sock *sk, int cmd, int *karg) --=20 2.53.0-Meta From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45329422555; Thu, 16 Jul 2026 13:02:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206925; cv=none; b=KltOheNc2oYz3s8ekUNeq4qZdquIbg1q7HLXNLh71pjuNliWCTllf1LsjKrSKlcHZKy/NRgMNsP4s+su+UpZSFGcNKL+iH846Mw0HNbVhIEnTUas/9h0K6wMPNShva74jxMqEnv0Jx8iSDYdUPsBx9FBFacGpv8Q1bMn7wt9AWQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206925; c=relaxed/simple; bh=cAMTjzFtWpssYhGMnYLYloL7+e38m8IMj+86usmagk8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ddm57HfS2tjt9DMando5lmkJ7dBZRLnkH+kzT9kInU3TdZlIeJwgUgR94x+BABb2JGqTJrvdFzHdcNXX//Orz37uew4qO1pGcpjaJL5RhoT439jiSY65l+Z1A+mcyW6p/6KDnnNNmfsch8FgUYqLC1kUiWPs427Vw6uaHsGF7GQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=o2CZB8RX; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="o2CZB8RX" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=/ULuSXe8cMJt1jfaDloF8ljpZjBOJlHguRmjs+r/CiQ=; b=o2CZB8RXCyL+1mY6ivSVh1CScu KMYrZeF8IqX0wytJwihn8mxXjCbkISgazGAlHPHiP44KHgIwPBjUMmAWLfvdnuExNPnrepHnHTadO ktaj24cVnUEURRZs+g9rkeu4TRTPmv2p3dQRvSRARF1Q3X8OR8RkAyO5Eyrsx1Ak8kBamRUXNnR7v PotAGdt9mH8qJ3HOREqsSPPNNVUiaDFjJX01ybbU63satV/vpqYLaFBI/fuqgEklFXEcqQ1/zZx8+ 5v1eQIjnSkM1CDwLR/Zun/RTWIjyl4Q8nPhVw7vIs0jwhOfmuo90BGbODSX2pagrE3yZ1Y9WlJOnC V59MEpAw==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLiy-003q6h-0f; Thu, 16 Jul 2026 13:02:00 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 06:00:01 -0700 Subject: [PATCH net-next 3/7] ieee802154: convert dgram getsockopt to sockopt_t Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-3-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=1998; i=leitao@debian.org; h=from:subject:message-id; bh=cAMTjzFtWpssYhGMnYLYloL7+e38m8IMj+86usmagk8=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY0Z2IW793tC3PkXGaq6JPsqxAJ3yimolzQ7 WQjXLsQl6KJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bfQ1D/0c5UKoMN66y1FjrvjsWn8xg+C2Yqn2/WAorSfPmPiMI+mWsr+n+BPgcVtWEaVLvb2xXNg GnvK5+KGAOzF7j39vGXdGs3eKerGhqkCQW4bEIR6jj4WZsBBQzXCu+kGLxR/k5zHzptc7jJ3Z3M h0ii3I1IB27RxZQmyWXaDzdggcTh59LO+AC399iJT6dxqjhgcpzQd8hlGtN2STGNskCZ5oDFIvt p6icDiczgQOGcFcumEiKL/z8Rv2Ai4ypiyUwmLSOQmyV7TDSZ2KuvOuDY+Gli0yTIWYZzUMLm7V qYiyAmS7Gdv3UmmpEWahWj4Ga4B+g4X+2/y5jf1jAOItmq91zuoVrK0RGgfNcf/mwHpRcOztAMs 6FiVBB6tGGlZdeViXbWV4d9ZhLd5ncwR9cqukOUMQ/p4Yqgid6QcdA3f2pPsBxQRIrtBJY7wbk6 TUgFFGU8XHp7KSCHGNYWPAwLQy6rh3yzpjEkJbkW8Jd2/fchDnAraZFGOm23f4I1FkIpHLKnbYc czPcEhtxsPulp/cw4zxLz6nAfZ92580I4ec/DBiByDkvS34oigfbYxkL+Hl4pC+yigNqQR4pwWr 9wcLzWcEyUEoBAybaUMiCpgKcHJM+TU1WmoV0L9ytCWJQ3NUFq4zvI9TcAF85smnzlI+7P0Vsdt GeWZJ26OhTbsvwQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Continue converting the proto-layer getsockopt callbacks to the sockopt_t interface, splitting dgram_getsockopt() into a do_dgram_getsockopt() helper that takes a sockopt_t. No functional change. Signed-off-by: Breno Leitao --- net/ieee802154/socket.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c index 85dce296d7513..763f63e48afe4 100644 --- a/net/ieee802154/socket.c +++ b/net/ieee802154/socket.c @@ -831,20 +831,12 @@ static int ieee802154_dgram_deliver(struct net_device= *dev, struct sk_buff *skb) return ret; } =20 -static int dgram_getsockopt(struct sock *sk, int level, int optname, - char __user *optval, int __user *optlen) +static int do_dgram_getsockopt(struct sock *sk, int optname, sockopt_t *op= t) { struct dgram_sock *ro =3D dgram_sk(sk); - int val, len; =20 - if (level !=3D SOL_IEEE802154) - return -EOPNOTSUPP; - - if (get_user(len, optlen)) - return -EFAULT; - - len =3D min_t(unsigned int, len, sizeof(int)); + len =3D min_t(unsigned int, opt->optlen, sizeof(int)); =20 switch (optname) { case WPAN_WANTACK: @@ -871,10 +863,32 @@ static int dgram_getsockopt(struct sock *sk, int leve= l, int optname, return -ENOPROTOOPT; } =20 - if (put_user(len, optlen)) + opt->optlen =3D len; + if (copy_to_iter(&val, len, &opt->iter_out) !=3D len) return -EFAULT; - if (copy_to_user(optval, &val, len)) + return 0; +} + +static int dgram_getsockopt(struct sock *sk, int level, int optname, + char __user *optval, int __user *optlen) +{ + sockopt_t opt; + int err; + + if (level !=3D SOL_IEEE802154) + return -EOPNOTSUPP; + + err =3D sockopt_init_user(&opt, optval, optlen); + if (err) + return err; + + err =3D do_dgram_getsockopt(sk, optname, &opt); + if (err) + return err; + + if (put_user(opt.optlen, optlen)) return -EFAULT; + return 0; } =20 --=20 2.53.0-Meta From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B5A442254E; Thu, 16 Jul 2026 13:02:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206932; cv=none; b=SYutC+TIbOiFnY+tvd+xsyCx9Yt0vNBX6Hve8bo4KzKauQyw7ZtHU41izQ6Tt7fyS0a45syh/J7qtsB6DSz9V+EGS5VAUfEG2Ytic6ULbyxNtNk3Jy0ex3D5AG8yX3ncCXGy5sHstq1qX3FCwBVTjKwLHrb/dmxiUr0GlYzZEBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206932; c=relaxed/simple; bh=PoF+I6ssQG2B2zbMCV8FyPh8QahdqUGCIbDFI7Zv1ac=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jUt2LUG1DWk84jnxOj4KZcMYYLkGy/c1BN7CmwLlclm94vyoyW8wu3/Nbv3svSLJJpmpES7AD1bOBp+DJzJ2o+C7GIbCS6r8VtNVSu3DstHUcutQ3eJQt3amp+YwUY8h7VKgSA59TpP9o7+F1AyGrhhnQ7sKObARAhth+oNFXZg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=COYHvFKo; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="COYHvFKo" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=53F5uiFFmgq0z8s+mP8+crYqDFByovEg9NEkQH5u4DA=; b=COYHvFKoZsEl6f4bkGGF4+Cuh9 SudYgt+r104FLKjtCHkYKY6C2qwOKrZYAiaVSVNOIiw3EIXFabwtxmJk8Zd02Mnp5/7+muEdh5rMb h0X4LfFpxBw4kvKWa3JYzuKZsmT8HRTQjnwiaS4e8nvXvx7lSZrjCwiCvrbDlfxF8RrmLqVoscS/I ssaDe1c0JV516pVJeno7cHrA+uvMwAucJqQyJrLAR2b9jZLNmKirzMQ6XO3stHJ8lrDsEjtOUllmj xIQKc9bhVaTGbpDb2TPj5VBAYaIgrxkSvw5B/5L8WtBpS12eqd+t1bJ+3m9ElORMsp8buDz225mPf QN1xKyvg==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLj3-003q76-10; Thu, 16 Jul 2026 13:02:05 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 06:00:02 -0700 Subject: [PATCH net-next 4/7] phonet: pep: do not write beyond optlen in getsockopt Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-4-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=1175; i=leitao@debian.org; h=from:subject:message-id; bh=PoF+I6ssQG2B2zbMCV8FyPh8QahdqUGCIbDFI7Zv1ac=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY0+X23HeBiZQXOrW/HXpXu0zHZNdpQqfVjA cx1Ys8avCaJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bXecD/9anz+ex8bWFkr/bXKcbn15hKPBn/bNiA9P+vAosgkHq8kWyslFSlQKQxWvib7oSdjr+8B /dYeqUOkIIt5uBqGDhSsG7AMmqDFHAfUCZch8sJQnXZGBcxW7Uh0rqihx+3zgZ+59ltkKdXL/EN QWzFgKQ5ZmsbC/bCthhuZ5vU7ZjL/q1kwQaWcACzropG1+Hidy56xtktScowj4hvCnAUiYl6BAI KAKjimwQgk6x4ybRhV4ie7PY/O6vPeyqxkYAWviMEOvc7cKwyY+NqIFn2PN+se9m/wHh2j46Qh0 YMz38FNC5tJR+GEDX09sBM2EQq3YzO4/I0gjKTNK4kcGY/JJGP/mqk6ffJVdpWTsVYRJBHR2SZL damSYCN5dhAKRmoCmw8NRjRvH57xOlmbY2SiVkt+DMTG02x2NlTMErKPiMfKZ6lv2AohuDA52LQ Bhd/p+krZxXEiODHYGpvSd2kx1QsRf2CrPXcz/W76C/AYWT+vyfHHFJG2fCTmSpZDva50pnrZnO kBzgq/he6v7DLg8krrtIlbEdJL8F0Iz1KRsA4AotJ5iYuj8VMDz+KJh++pltmjtugVYoavGRRE7 kylCJMvCPQnqZ8PFOuXA7NbeDz4MJzats1yMZ22vwDw1gtv6ssdvkVwGrhv3xME6478Xhzpe9QD M9AvLXBjSQ+6IjA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao pep_getsockopt() clamps the reported length to the caller's buffer with min_t(), but then stores the value with put_user(val, (int __user *) optval), which always writes sizeof(int) bytes. A getsockopt() call with an optlen smaller than sizeof(int) thus reports the clamped length yet writes a full int, one to three bytes past the user buffer. Write the value with copy_to_user() bounded by len, so at most optlen bytes are copied, matching the length reported back to userspace. Fixes: 02a47617cdce ("Phonet: implement GPRS virtual interface over PEP soc= ket") Signed-off-by: Breno Leitao Acked-by: R=C3=A9mi Denis-Courmont --- net/phonet/pep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/phonet/pep.c b/net/phonet/pep.c index 7069271393933..60d1a5375725b 100644 --- a/net/phonet/pep.c +++ b/net/phonet/pep.c @@ -1115,7 +1115,7 @@ static int pep_getsockopt(struct sock *sk, int level,= int optname, len =3D min_t(unsigned int, sizeof(int), len); if (put_user(len, optlen)) return -EFAULT; - if (put_user(val, (int __user *) optval)) + if (copy_to_user(optval, &val, len)) return -EFAULT; return 0; } --=20 2.53.0-Meta From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11A5B4229D8; Thu, 16 Jul 2026 13:02:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206937; cv=none; b=KBIyCaHax6BanBuCm4xRxjSGtcGA3RwfYN1yDUSbCAUd8xaIQI5RSthAjtP2r2pHC1fsO3LEexhfO9c0ZWwaJrU9DaSO9rS3GaHLORFL8t3EYvsee3HFXulnGtr5utwX8dHfNRBZrXzn1G1u1XEjZSy8dxNczPS/4oUBFrgskd0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206937; c=relaxed/simple; bh=Se87aCwC+fMAly81DUym+4s1VCr+FdNCwHJxoY2el/M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TkQV//gF2fr/hzyobhXCHfyJfvXLvxZer0vwoe4bNccuFkcqVQZ5TYw/vn1ZPdSPa4lXAynCeoyyvC6FaOWo3wVsMAzBzMZmbSTKi0qAMw8qf9hiExYAuMB+EBxTS4zKrTROH81FoSTt+k0xawVynAecuFg/7eLMx2rft689pUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=btyIsQo6; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="btyIsQo6" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=cRVSHKeCMo9N4rQFaonUdaNrdsEEhIRj8z0XSdd0ntc=; b=btyIsQo6gjGBk83Kax8blVhvnM 5p3DAqsxNSergq4O7fYBryuRLpxPJ9m+ZRxWK2fueFIrRsQbrcDNP0d4UHALaTDgegRa4//jxPUBC xBB+FXeIzICjFav4oHuaEAuwsSZDbcxSt0bm3M08i6zv+v5tI83Kb4K3Lkc92/Ha+py/wYaRXL+OK kW9GTXysOv2wi0g5hlxOXGnnGX8a+Mb5yR8LcrL6byqYDYMF1mmprb8VouwYcGm0OqUsrtlIojj31 tsdCbBukGyVFQgJWH+CvJbVh8+afPkUWEWqs/+3B83anwuZpm1sogSdzldjPBFfpYiys3/9bqRnuO RFSCBkDg==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLj8-003q7N-2H; Thu, 16 Jul 2026 13:02:10 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 06:00:03 -0700 Subject: [PATCH net-next 5/7] phonet: pep: convert getsockopt to sockopt_t Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-5-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=2230; i=leitao@debian.org; h=from:subject:message-id; bh=Se87aCwC+fMAly81DUym+4s1VCr+FdNCwHJxoY2el/M=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY0jt3nJWJzYShVpMobhGkyc2S4LTYivPDay 7o5bsp/0iGJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bT+dD/9zc3rl8rsq056KUXMATcYgDNmQhgFtdTEJa/Ff7xNiTR9DcVFmtYsM88sll7ApvpL2FZC Lt9Bh1ZHvMF1womtHsKi2nLJ5ZbCdOFPovVKGiMs2JLwXrO9MpOLANrIpmsDF8gCj4NNnXhtDak hNYW7M3SCEEC5ZXjoMq79ABXSuWUNUmpTa83Rsq1ofvhenDaI5KXSV5dxLWQuG7ibitoEsmC+o2 EBth1mvQXDn3vzGwRyx1eyDIMm5uXV2/JRWRxNhupudriNgwKfUnmrh8n2wGsPnfndW9JE1yHye SYx7iN+Rbm3fS0icyR/wKxknI07KQrPg3eCQNenJqVJPmx8U17XfH2pwrMWlJ5ixzWHGwAqis2W q9ciN3RnDFIiZKzD12ROCAc7mW8pKCk3fMlYcNeicKUCd5MRQ+idBa5fbLSFF1M8TaNW/r+NxXC h8GT0pOQNHHMJmrEzPARUc/jgPW36wawwfRrM2xWi2BRIHx3/+DxaBGooP3xTmC8omqo9PvU9Ya pwXkavZ304m/qGbaRBo9o7QoHj0wCosE/8crnRLsjW8fHV2RMpnlS8/DLX2Qn+Y4087tKSkreGp 4+fZ8VRtHLqJjsU2aGxqRKBG961hTQ84frLuMeA2+SjB+tGGgIzYGQAHNkQVABHBcYG96kmxM25 o2o7/EXgBpAB2Ig== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Continue converting the proto-layer getsockopt callbacks to the sockopt_t interface, splitting pep_getsockopt() into a do_pep_getsockopt() helper that takes a sockopt_t. The thin pep_getsockopt() wrapper keeps its __user signature for now: it builds a user-backed sockopt_t with sockopt_init_user(), calls the helper, and writes the returned length back to optlen. The helper uses copy_to_iter() instead of copy_to_user(). No functional change. Signed-off-by: Breno Leitao Acked-by: R=C3=A9mi Denis-Courmont --- net/phonet/pep.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/net/phonet/pep.c b/net/phonet/pep.c index 60d1a5375725b..c7f4ce894af56 100644 --- a/net/phonet/pep.c +++ b/net/phonet/pep.c @@ -1078,17 +1078,11 @@ static int pep_setsockopt(struct sock *sk, int leve= l, int optname, return err; } =20 -static int pep_getsockopt(struct sock *sk, int level, int optname, - char __user *optval, int __user *optlen) +static int do_pep_getsockopt(struct sock *sk, int optname, sockopt_t *opt) { struct pep_sock *pn =3D pep_sk(sk); int len, val; =20 - if (level !=3D SOL_PNPIPE) - return -ENOPROTOOPT; - if (get_user(len, optlen)) - return -EFAULT; - switch (optname) { case PNPIPE_ENCAP: val =3D pn->ifindex ? PNPIPE_ENCAP_IP : PNPIPE_ENCAP_NONE; @@ -1112,11 +1106,33 @@ static int pep_getsockopt(struct sock *sk, int leve= l, int optname, return -ENOPROTOOPT; } =20 - len =3D min_t(unsigned int, sizeof(int), len); - if (put_user(len, optlen)) + len =3D min_t(unsigned int, sizeof(int), opt->optlen); + opt->optlen =3D len; + if (copy_to_iter(&val, len, &opt->iter_out) !=3D len) return -EFAULT; - if (copy_to_user(optval, &val, len)) + return 0; +} + +static int pep_getsockopt(struct sock *sk, int level, int optname, + char __user *optval, int __user *optlen) +{ + sockopt_t opt; + int err; + + if (level !=3D SOL_PNPIPE) + return -ENOPROTOOPT; + + err =3D sockopt_init_user(&opt, optval, optlen); + if (err) + return err; + + err =3D do_pep_getsockopt(sk, optname, &opt); + if (err) + return err; + + if (put_user(opt.optlen, optlen)) return -EFAULT; + return 0; } =20 --=20 2.53.0-Meta From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F02042378B; Thu, 16 Jul 2026 13:02:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206941; cv=none; b=CGtFZJvGWBFdawGhJVLcSA7xoBX8BnjZCQKLLeLCCiTRB4eUpwoyPikbUeF7RBx9ETzGJWKox4xK6IQ6fGrX4eQWA4cEBQH/iMRl5tXGjq9dOwxzV8D3x64qc80esxe9OwkqfZtehJynJTI7Z9UfpIDhbSGuNmX71oG/FSgAV2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206941; c=relaxed/simple; bh=wWFaQ5ynwu1/IC8Glfj8Bzym8FfGbDbR0VDBbfDT7PA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=abMvroGs7C/wpKa8W74IjrKSH/83SHV5GefXHjzzUq7VwG+/y5ViQRJfmxFwbxpbHPNCckgwruXa64l3gTbpbblssIPpUCb8xSQisCJBdSBK2Zsu4bOATv4EbolhDVfmv4AGR+vJoJ64IBu03tFBaq+hfR8Kk98RwF6QJIFK1Ro= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=HOQHS6zB; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="HOQHS6zB" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=H/2DZukIeT/kuRVW9vKE8nHigf4+6Pq0DhLaCLSGQWg=; b=HOQHS6zB4MunfVz1SoYvNMpzOW z0giAQLnDjrDDeB5FpCClnz6CoOm+6jlKNDgi2S/QkvIQWwax11KViEXCJccaf70GfCPQViRYRbey 6g1kpNZI9wRc4wdvFqJnI39fJIac3e1+U/ecCZ3XGeJpHf9KkW18cuC8zMDd66KFc341oVJPaJ1AX bGi0FyJYgHn1oLYwWW7vtMDslq7oevW/4dZ7wvnOtYeHwRCLsjD/xGjDAZFZrf9SnlIvvOLSp5TMA bjw035Us/C/H6XLhuVgnWr8nqQzjAenAji/mncLFgqU2/uhrOQCVmFIK1sWZ/fkdJATIU8Jf0g/b2 lgvQRWaQ==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLjD-003q7e-1s; Thu, 16 Jul 2026 13:02:15 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 06:00:04 -0700 Subject: [PATCH net-next 6/7] tls: convert getsockopt to sockopt_t Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-6-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=6300; i=leitao@debian.org; h=from:subject:message-id; bh=wWFaQ5ynwu1/IC8Glfj8Bzym8FfGbDbR0VDBbfDT7PA=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY0FXvwy1vHQxKxe7gS0lUPxzmRwwCdZ+YdE uAMYmsp9y2JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bb3tD/0caCuioM471j3ExUXC9alXCrgOqh3Edx3jpLf3IFainBZs3k0u/ptJ4LZJTygoVt48TDz 54hFojPsVK30cg1MnhGt5Hj4IgJfNhSaaIKdmTmlWhxojyuK3zl6zSjPvdEPFzxAKFtanorHdCx NBFw10+WiTEu8oaTk8NKKLnWxltciKvgxRQVqcYabnNHpmLO/Ai8gaEneTzMOyt2PS0ydu/DMfo IvzRQTK3kIbLUAb4AmFJhhxhA/Dff/iThr4uvAFQpNsm40zJ9dDQkafPcS0C7EP55jF2KIHp2vy wMBJ+cit0NARxi3naG4hycHPdIApmHrhGO2MNyIQtMRLtit0YVLpxQTPUZIQXorBSCySQmnPV0r QPRC50C1dF3yGVOISL+GDwL3EJv7kVixkSaNH1F+CcwfW6glibF+weodjZS5rRhepqJhrmTab6V MmXX+UspRwD1heeHVqlKIdq2xfi7SuyDUj8nja/HP2urXUkRInAMMDgn2vnIDFBx6/jy3g+6gBH YsDOdb0oyJXxoqDCvnq38ZLsHP560lqHbkDj2D1KuyWWYZbiLZO+cIhI8I/KqMch64OSwFx9o5m d8hkHHqlscqmAfEyYPYww24VoBiKO4Z3IBSXNhJmC4cHQfR42dOLqRRTq4ZdXzxrijpnxVCJ8G+ AW7uww1JQWqMrSA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Continue converting the proto-layer getsockopt callbacks to the sockopt_t interface, converting do_tls_getsockopt() and its per-option helpers to take a sockopt_t. The thin tls_getsockopt() wrapper keeps its __user signature for now: it builds a user-backed sockopt_t with sockopt_init_user(), calls the helper, and writes the returned length back to optlen. The helpers use copy_to_iter() instead of copy_to_user(); the NULL optval check in the TLS_TX/TLS_RX path is preserved by testing the iterator user buffer. No functional change. Signed-off-by: Breno Leitao --- net/tls/tls_main.c | 80 ++++++++++++++++++++++++++------------------------= ---- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c index 8c588cdab733d..fbb274287aa5f 100644 --- a/net/tls/tls_main.c +++ b/net/tls/tls_main.c @@ -424,20 +424,16 @@ static __poll_t tls_sk_poll(struct file *file, struct= socket *sock, return mask; } =20 -static int do_tls_getsockopt_conf(struct sock *sk, char __user *optval, - int __user *optlen, int tx) +static int do_tls_getsockopt_conf(struct sock *sk, sockopt_t *opt, int tx) { int rc =3D 0; const struct tls_cipher_desc *cipher_desc; struct tls_context *ctx =3D tls_get_ctx(sk); struct tls_crypto_info *crypto_info; struct cipher_context *cctx; - int len; + int len =3D opt->optlen; =20 - if (get_user(len, optlen)) - return -EFAULT; - - if (!optval || (len < sizeof(*crypto_info))) { + if (!opt->iter_out.ubuf || len < sizeof(*crypto_info)) { rc =3D -EINVAL; goto out; } @@ -462,7 +458,8 @@ static int do_tls_getsockopt_conf(struct sock *sk, char= __user *optval, } =20 if (len =3D=3D sizeof(*crypto_info)) { - if (copy_to_user(optval, crypto_info, sizeof(*crypto_info))) + if (copy_to_iter(crypto_info, sizeof(*crypto_info), + &opt->iter_out) !=3D sizeof(*crypto_info)) rc =3D -EFAULT; goto out; } @@ -478,44 +475,38 @@ static int do_tls_getsockopt_conf(struct sock *sk, ch= ar __user *optval, memcpy(crypto_info_rec_seq(crypto_info, cipher_desc), cctx->rec_seq, cipher_desc->rec_seq); =20 - if (copy_to_user(optval, crypto_info, cipher_desc->crypto_info)) + if (copy_to_iter(crypto_info, cipher_desc->crypto_info, + &opt->iter_out) !=3D cipher_desc->crypto_info) rc =3D -EFAULT; =20 out: return rc; } =20 -static int do_tls_getsockopt_tx_zc(struct sock *sk, char __user *optval, - int __user *optlen) +static int do_tls_getsockopt_tx_zc(struct sock *sk, sockopt_t *opt) { struct tls_context *ctx =3D tls_get_ctx(sk); unsigned int value; - int len; - - if (get_user(len, optlen)) - return -EFAULT; + int len =3D opt->optlen; =20 if (len !=3D sizeof(value)) return -EINVAL; =20 value =3D ctx->zerocopy_sendfile; - if (copy_to_user(optval, &value, sizeof(value))) + if (copy_to_iter(&value, sizeof(value), &opt->iter_out) !=3D sizeof(value= )) return -EFAULT; =20 return 0; } =20 -static int do_tls_getsockopt_no_pad(struct sock *sk, char __user *optval, - int __user *optlen) +static int do_tls_getsockopt_no_pad(struct sock *sk, sockopt_t *opt) { struct tls_context *ctx =3D tls_get_ctx(sk); - int value, len; + int value, len =3D opt->optlen; =20 if (ctx->prot_info.version !=3D TLS_1_3_VERSION) return -EINVAL; =20 - if (get_user(len, optlen)) - return -EFAULT; if (len < sizeof(value)) return -EINVAL; =20 @@ -525,38 +516,31 @@ static int do_tls_getsockopt_no_pad(struct sock *sk, = char __user *optval, if (value < 0) return value; =20 - if (put_user(sizeof(value), optlen)) - return -EFAULT; - if (copy_to_user(optval, &value, sizeof(value))) + opt->optlen =3D sizeof(value); + if (copy_to_iter(&value, sizeof(value), &opt->iter_out) !=3D sizeof(value= )) return -EFAULT; =20 return 0; } =20 -static int do_tls_getsockopt_tx_payload_len(struct sock *sk, char __user *= optval, - int __user *optlen) +static int do_tls_getsockopt_tx_payload_len(struct sock *sk, sockopt_t *op= t) { struct tls_context *ctx =3D tls_get_ctx(sk); u16 payload_len =3D ctx->tx_max_payload_len; - int len; - - if (get_user(len, optlen)) - return -EFAULT; + int len =3D opt->optlen; =20 if (len < sizeof(payload_len)) return -EINVAL; =20 - if (put_user(sizeof(payload_len), optlen)) - return -EFAULT; - - if (copy_to_user(optval, &payload_len, sizeof(payload_len))) + opt->optlen =3D sizeof(payload_len); + if (copy_to_iter(&payload_len, sizeof(payload_len), + &opt->iter_out) !=3D sizeof(payload_len)) return -EFAULT; =20 return 0; } =20 -static int do_tls_getsockopt(struct sock *sk, int optname, - char __user *optval, int __user *optlen) +static int do_tls_getsockopt(struct sock *sk, int optname, sockopt_t *opt) { int rc =3D 0; =20 @@ -565,17 +549,16 @@ static int do_tls_getsockopt(struct sock *sk, int opt= name, switch (optname) { case TLS_TX: case TLS_RX: - rc =3D do_tls_getsockopt_conf(sk, optval, optlen, - optname =3D=3D TLS_TX); + rc =3D do_tls_getsockopt_conf(sk, opt, optname =3D=3D TLS_TX); break; case TLS_TX_ZEROCOPY_RO: - rc =3D do_tls_getsockopt_tx_zc(sk, optval, optlen); + rc =3D do_tls_getsockopt_tx_zc(sk, opt); break; case TLS_RX_EXPECT_NO_PAD: - rc =3D do_tls_getsockopt_no_pad(sk, optval, optlen); + rc =3D do_tls_getsockopt_no_pad(sk, opt); break; case TLS_TX_MAX_PAYLOAD_LEN: - rc =3D do_tls_getsockopt_tx_payload_len(sk, optval, optlen); + rc =3D do_tls_getsockopt_tx_payload_len(sk, opt); break; default: rc =3D -ENOPROTOOPT; @@ -591,12 +574,25 @@ static int tls_getsockopt(struct sock *sk, int level,= int optname, char __user *optval, int __user *optlen) { struct tls_context *ctx =3D tls_get_ctx(sk); + sockopt_t opt; + int err; =20 if (level !=3D SOL_TLS) return ctx->sk_proto->getsockopt(sk, level, optname, optval, optlen); =20 - return do_tls_getsockopt(sk, optname, optval, optlen); + err =3D sockopt_init_user(&opt, optval, optlen); + if (err) + return err; + + err =3D do_tls_getsockopt(sk, optname, &opt); + if (err) + return err; + + if (put_user(opt.optlen, optlen)) + return -EFAULT; + + return 0; } =20 static int validate_crypto_info(const struct tls_crypto_info *crypto_info, --=20 2.53.0-Meta From nobody Sat Jul 25 15:51:38 2026 Received: from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 09F5341D63A; Thu, 16 Jul 2026 13:02:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=82.195.75.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206948; cv=none; b=GQy6IdgvG1oBSKAcW7omNX1/FXJOCKHDixXx1q7y4lc6g1M8s84M1J+GW6hHVwGpBaTQiDxgdVXDakGVoS11NImEH3nNkYCIbwrbMxSLtezhuUHiH8fEaUfubVQweGwHr8sY55ITrSM0fcslwaVWOsXFp65slmoYWxBYbw07Nek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784206948; c=relaxed/simple; bh=3hdAT9EyFQMQiq38tK6EUbVUFaxBUaaYguf18gRo0Rc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kSNlLCExyRo4ukzeaVYfem5+yURTESdkBrfRTu/hRhhZttFf/GmPeHv955guvSNjYip/gbAzXCpTxc7CZW7tDaU3u1VNBPTzwbxyCgrzjVMPK6nOPtCRHf5160bPG2zN4qg/Oel63Oepbg7GdAVj8dPxmbM7/RMV4I7Zyh0Oe6w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=debian.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b=ZeLhXRzh; arc=none smtp.client-ip=82.195.75.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=debian.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org header.b="ZeLhXRzh" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org; s=smtpauto.stravinsky; h=X-Debian-User:Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description; bh=CwlOBsweskXoWiiCSdeL2Spah7OPud7ghVOdgEgoOqo=; b=ZeLhXRzhi235SjgS8M+dAMMA95 XA/QRSjE+j9YzDUF5PBMa6iXAQS7jDYwcQ4Cs/cGQi4oR6J1oLBM1sGXiiz5tfzjcg7C/+vP+ytL+ jxfatDBorCiYR44ISgWhfr6aIbVe5sIOYw4nt3A1ChcgVNZEEL4H802dXmrnA+6DmIRRZzSUG4PSl 9ZVl86n4XiwbQyrfVAng0pnXdXEsDDPB33jYQRqa2aKpJpUiLAmgQGGs9WGOAxXCFXHhKoWWGLdRM xzcIaB5tyKvYbAKtbn2PfNHdkOvaBTaFVfyprUxYlVF8AMtPv2xEJEIBAVL1TWZ6oXgmWbYhXGNQk X+e2XLlw==; Received: from authenticated-user by stravinsky.debian.org with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.96) (envelope-from ) id 1wkLjI-003q8B-1G; Thu, 16 Jul 2026 13:02:20 +0000 From: Breno Leitao Date: Thu, 16 Jul 2026 06:00:05 -0700 Subject: [PATCH net-next 7/7] selftests: net: getsockopt_iter: cover rawv6, ieee802154, phonet and tls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260716-getsockopt_phase4-v1-7-4f45cb12dce7@debian.org> References: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> In-Reply-To: <20260716-getsockopt_phase4-v1-0-4f45cb12dce7@debian.org> To: sdf@fomichev.me, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Alexander Aring , Stefan Schmidt , Miquel Raynal , Remi Denis-Courmont , =?utf-8?q?R=C3=A9mi_Denis-Courmont?= , John Fastabend , Sabrina Dubroca , Shuah Khan Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wpan@vger.kernel.org, linux-kselftest@vger.kernel.org, Breno Leitao , kernel-team@meta.com X-Mailer: b4 0.16-dev-d5d98 X-Developer-Signature: v=1; a=openpgp-sha256; l=11664; i=leitao@debian.org; h=from:subject:message-id; bh=3hdAT9EyFQMQiq38tK6EUbVUFaxBUaaYguf18gRo0Rc=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqWNY0ICSvwoE6LZLvgbjfuzYzBEO48A/xj2sz2 JZIfEnAxguJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaljWNAAKCRA1o5Of/Hh3 bfcGD/9KMcdwl3btkogCI3uu6SeX2sSegleHArjQbxHT8PdEUw2WVU/svQR0/A5eCCUeCDmqWR1 8VlZkoPT37ZGFPXSs4jgsLRRdLv0jMDkytm39jYT1PQ7eZr2FOiGyGCr7xDWU8j8NfJcXKQcorK qv3oULz3Qn1zZIzqkidogjrCmPOA10gMAws6YfXNk5FJ0GliCm5InMrJX6BIO2I1KRLFD8g9AtE 60TU7laaa3WiSa+jtzJ8EODXMmfg1bl5kjXIwDzVqXK8VxXDU2N5vVAjTExnXCO1bu4Paqa11A1 2b6uYvTWWg3iVQ7U9bW+TjQUCGCQswAo2HR31to7aJwLVKmk7i+B76FLBefQtKKMQSRzE+a+2/g 3ldIsFFCtQMGMm7dd4lDO6Fa3uy981wA1VJ9t9Oca7ziVdAnbcYAZp6NiFfiMHKI935LWf9eKWo FecL22r2xiFlFtsJyeQ5sPQ4KQjRZlqgEFFoSLpoKs5Zva2TJ7EwSDj4qmhIVb3gtjojWM9kFlP A8WFuSo+U2CLv1n4HTAxKuWdpWYCnt9QkmrVVmJND0Sd0mDPj6WlQvsc2aiF0qtsMx6TPwvp6KC PvcwTAaj/iFwKFpttgzxz2l8YY+OjnqqDCq59EvLw7eWLoOGbbMBOisF3QdERmEk4q/9DibALQP dWsRM/x2HolpktQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Add fixtures for the newly converted getsockopt leaves: - rawv6: IPV6_HDRINCL / IPV6_CHECKSUM int paths + a SOL_RAW unknown-optname case that reaches do_rawv6_getsockopt(). - ieee802154: WPAN_WANTACK dgram int path + non-SOL_IEEE802154 level rejection. - phonet: PNPIPE_ENCAP pep int path + non-SOL_PNPIPE level rejection. - tls: TLS_TX_ZEROCOPY_RO, the TLS_TX crypto_info round-trip at the base and full cipher sizes, the NULL-optval and short buffer EINVAL paths, and an unknown optname. It skips when the kernel lacks TLS or AES-GCM. Each fixture pins the returned-length / errno semantics across exact, oversized and short buffers, an unknown optname and a bogus level. The semantics are unchanged by the sockopt_t conversion, so the tests pass both before and after the leaf conversions. Signed-off-by: Breno Leitao Acked-by: R=C3=A9mi Denis-Courmont --- tools/testing/selftests/net/getsockopt_iter.c | 424 ++++++++++++++++++++++= ++++ 1 file changed, 424 insertions(+) diff --git a/tools/testing/selftests/net/getsockopt_iter.c b/tools/testing/= selftests/net/getsockopt_iter.c index fe5a5268bc34e..974065a23fa82 100644 --- a/tools/testing/selftests/net/getsockopt_iter.c +++ b/tools/testing/selftests/net/getsockopt_iter.c @@ -28,7 +28,10 @@ #include #include #include +#include +#include #include +#include #include "kselftest_harness.h" =20 #ifndef AF_VSOCK @@ -40,6 +43,45 @@ #ifndef ICMP_FILTER #define ICMP_FILTER 1 #endif +#ifndef IPV6_HDRINCL +#define IPV6_HDRINCL 36 +#endif +#ifndef IPV6_CHECKSUM +#define IPV6_CHECKSUM 7 +#endif +#ifndef AF_IEEE802154 +#define AF_IEEE802154 36 +#endif +#ifndef SOL_IEEE802154 +#define SOL_IEEE802154 0 +#endif +#ifndef WPAN_WANTACK +#define WPAN_WANTACK 0 +#endif +#ifndef AF_PHONET +#define AF_PHONET 35 +#endif +#ifndef SOL_PNPIPE +#define SOL_PNPIPE 275 +#endif +#ifndef PN_PROTO_PIPE +#define PN_PROTO_PIPE 2 +#endif +#ifndef PNPIPE_ENCAP +#define PNPIPE_ENCAP 1 +#endif +#ifndef PNPIPE_ENCAP_NONE +#define PNPIPE_ENCAP_NONE 0 +#endif +#ifndef PNPIPE_ENCAP_IP +#define PNPIPE_ENCAP_IP 1 +#endif +#ifndef SOL_TLS +#define SOL_TLS 282 +#endif +#ifndef TCP_ULP +#define TCP_ULP 31 +#endif =20 /* ---------- netlink ---------- */ =20 @@ -394,4 +436,386 @@ TEST_F(raw, bad_optname) ASSERT_EQ(sizeof(val), optlen); } =20 +/* ---------- raw (ipv6) ---------- */ + +FIXTURE(rawv6) +{ + int fd; +}; + +FIXTURE_SETUP(rawv6) +{ + self->fd =3D socket(AF_INET6, SOCK_RAW, IPPROTO_UDP); + if (self->fd < 0) + SKIP(return, "SOCK_RAW/IPv6 socket: %s", strerror(errno)); +} + +FIXTURE_TEARDOWN(rawv6) +{ + if (self->fd >=3D 0) + close(self->fd); +} + +TEST_F(rawv6, hdrincl_exact) +{ + socklen_t optlen; + int val =3D -1; + + optlen =3D sizeof(val); + + ASSERT_EQ(0, getsockopt(self->fd, IPPROTO_IPV6, IPV6_HDRINCL, + &val, &optlen)); + ASSERT_EQ(sizeof(int), optlen); + ASSERT_TRUE(val =3D=3D 0 || val =3D=3D 1); +} + +TEST_F(rawv6, hdrincl_oversize_clamped) +{ + char buf[16] =3D {}; + socklen_t optlen =3D sizeof(buf); + + ASSERT_EQ(0, getsockopt(self->fd, IPPROTO_IPV6, IPV6_HDRINCL, + buf, &optlen)); + ASSERT_EQ(sizeof(int), optlen); +} + +/* Raw int options clamp the reported length down to the user buffer + * instead of returning EINVAL on a short buffer. + */ +TEST_F(rawv6, hdrincl_undersize_clamped) +{ + socklen_t optlen =3D 2; + int val =3D 0; + + ASSERT_EQ(0, getsockopt(self->fd, IPPROTO_IPV6, IPV6_HDRINCL, + &val, &optlen)); + ASSERT_EQ(2, optlen); +} + +TEST_F(rawv6, checksum_default) +{ + socklen_t optlen; + int val =3D 0; + + optlen =3D sizeof(val); + + /* A non-ICMPv6 raw socket has the checksum disabled, reported as -1. */ + ASSERT_EQ(0, getsockopt(self->fd, IPPROTO_IPV6, IPV6_CHECKSUM, + &val, &optlen)); + ASSERT_EQ(sizeof(int), optlen); + ASSERT_EQ(-1, val); +} + +TEST_F(rawv6, bad_optname) +{ + socklen_t optlen; + int val; + + optlen =3D sizeof(val); + + /* SOL_RAW reaches do_rawv6_getsockopt() directly. */ + ASSERT_EQ(-1, getsockopt(self->fd, SOL_RAW, 0x7fff, &val, &optlen)); + ASSERT_EQ(ENOPROTOOPT, errno); + ASSERT_EQ(sizeof(val), optlen); +} + +/* ---------- ieee802154 (dgram) ---------- */ + +FIXTURE(ieee802154) +{ + int fd; +}; + +FIXTURE_SETUP(ieee802154) +{ + self->fd =3D socket(AF_IEEE802154, SOCK_DGRAM, 0); + if (self->fd < 0) + SKIP(return, "AF_IEEE802154 dgram socket: %s", strerror(errno)); +} + +FIXTURE_TEARDOWN(ieee802154) +{ + if (self->fd >=3D 0) + close(self->fd); +} + +TEST_F(ieee802154, wantack_exact) +{ + socklen_t optlen; + int val =3D -1; + + optlen =3D sizeof(val); + + ASSERT_EQ(0, getsockopt(self->fd, SOL_IEEE802154, WPAN_WANTACK, + &val, &optlen)); + ASSERT_EQ(sizeof(int), optlen); + ASSERT_TRUE(val =3D=3D 0 || val =3D=3D 1); +} + +TEST_F(ieee802154, wantack_oversize_clamped) +{ + char buf[16] =3D {}; + socklen_t optlen =3D sizeof(buf); + + ASSERT_EQ(0, getsockopt(self->fd, SOL_IEEE802154, WPAN_WANTACK, + buf, &optlen)); + ASSERT_EQ(sizeof(int), optlen); +} + +TEST_F(ieee802154, wantack_undersize_clamped) +{ + socklen_t optlen =3D 2; + int val =3D 0; + + ASSERT_EQ(0, getsockopt(self->fd, SOL_IEEE802154, WPAN_WANTACK, + &val, &optlen)); + ASSERT_EQ(2, optlen); +} + +TEST_F(ieee802154, bad_optname) +{ + socklen_t optlen; + int val; + + optlen =3D sizeof(val); + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_IEEE802154, 0x7fff, + &val, &optlen)); + ASSERT_EQ(ENOPROTOOPT, errno); + ASSERT_EQ(sizeof(val), optlen); +} + +/* dgram_getsockopt() rejects any level other than SOL_IEEE802154. */ +TEST_F(ieee802154, bad_level) +{ + socklen_t optlen; + int val; + + optlen =3D sizeof(val); + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_RAW, WPAN_WANTACK, + &val, &optlen)); + ASSERT_EQ(EOPNOTSUPP, errno); + ASSERT_EQ(sizeof(val), optlen); +} + +/* ---------- phonet (pep) ---------- */ + +FIXTURE(phonet) +{ + int fd; +}; + +FIXTURE_SETUP(phonet) +{ + self->fd =3D socket(AF_PHONET, SOCK_SEQPACKET, PN_PROTO_PIPE); + if (self->fd < 0) + SKIP(return, "AF_PHONET pipe socket: %s", strerror(errno)); +} + +FIXTURE_TEARDOWN(phonet) +{ + if (self->fd >=3D 0) + close(self->fd); +} + +TEST_F(phonet, encap_exact) +{ + socklen_t optlen; + int val =3D -1; + + optlen =3D sizeof(val); + + ASSERT_EQ(0, getsockopt(self->fd, SOL_PNPIPE, PNPIPE_ENCAP, + &val, &optlen)); + ASSERT_EQ(sizeof(int), optlen); + ASSERT_TRUE(val =3D=3D PNPIPE_ENCAP_NONE || val =3D=3D PNPIPE_ENCAP_IP); +} + +TEST_F(phonet, encap_oversize_clamped) +{ + char buf[16] =3D {}; + socklen_t optlen =3D sizeof(buf); + + ASSERT_EQ(0, getsockopt(self->fd, SOL_PNPIPE, PNPIPE_ENCAP, + buf, &optlen)); + ASSERT_EQ(sizeof(int), optlen); +} + +/* pep clamps the reported length down to the user buffer. Use an + * int-sized backing buffer with a short optlen so the baseline kernel, + * which writes a full int via put_user(), does not scribble past it. + */ +TEST_F(phonet, encap_undersize_clamped) +{ + socklen_t optlen =3D 2; + int val =3D 0; + + ASSERT_EQ(0, getsockopt(self->fd, SOL_PNPIPE, PNPIPE_ENCAP, + &val, &optlen)); + ASSERT_EQ(2, optlen); +} + +TEST_F(phonet, bad_optname) +{ + socklen_t optlen; + int val; + + optlen =3D sizeof(val); + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_PNPIPE, 0x7fff, &val, &optlen)); + ASSERT_EQ(ENOPROTOOPT, errno); + ASSERT_EQ(sizeof(val), optlen); +} + +/* pep_getsockopt() rejects any level other than SOL_PNPIPE. */ +TEST_F(phonet, bad_level) +{ + socklen_t optlen; + int val; + + optlen =3D sizeof(val); + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_RAW, PNPIPE_ENCAP, &val, &optlen)); + ASSERT_EQ(ENOPROTOOPT, errno); + ASSERT_EQ(sizeof(val), optlen); +} + +/* ---------- tls ---------- */ + +FIXTURE(tls) +{ + int fd; + int sfd; +}; + +FIXTURE_SETUP(tls) +{ + struct sockaddr_in a =3D { + .sin_family =3D AF_INET, + .sin_addr.s_addr =3D htonl(INADDR_LOOPBACK), + }; + socklen_t alen =3D sizeof(a); + int lfd; + + self->fd =3D -1; + self->sfd =3D -1; + + lfd =3D socket(AF_INET, SOCK_STREAM, 0); + if (lfd < 0) + SKIP(return, "TCP socket: %s", strerror(errno)); + if (bind(lfd, (struct sockaddr *)&a, sizeof(a)) || listen(lfd, 1) || + getsockname(lfd, (struct sockaddr *)&a, &alen)) { + close(lfd); + SKIP(return, "listener setup: %s", strerror(errno)); + } + self->fd =3D socket(AF_INET, SOCK_STREAM, 0); + if (connect(self->fd, (struct sockaddr *)&a, sizeof(a))) { + close(lfd); + SKIP(return, "connect: %s", strerror(errno)); + } + self->sfd =3D accept(lfd, NULL, NULL); + close(lfd); + if (setsockopt(self->fd, IPPROTO_TCP, TCP_ULP, "tls", sizeof("tls"))) + SKIP(return, "TCP_ULP=3Dtls: %s (built without TLS?)", + strerror(errno)); +} + +FIXTURE_TEARDOWN(tls) +{ + if (self->fd >=3D 0) + close(self->fd); + if (self->sfd >=3D 0) + close(self->sfd); +} + +/* do_tls_getsockopt_tx_zc(): fixed-size int, exact length required. */ +TEST_F(tls, tx_zerocopy_exact) +{ + socklen_t optlen =3D sizeof(int); + int val =3D -1; + + ASSERT_EQ(0, getsockopt(self->fd, SOL_TLS, TLS_TX_ZEROCOPY_RO, + &val, &optlen)); + ASSERT_EQ(sizeof(int), optlen); + ASSERT_TRUE(val =3D=3D 0 || val =3D=3D 1); +} + +TEST_F(tls, tx_zerocopy_wrong_len) +{ + socklen_t optlen =3D 2; + int val; + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_TLS, TLS_TX_ZEROCOPY_RO, + &val, &optlen)); + ASSERT_EQ(EINVAL, errno); +} + +/* do_tls_getsockopt_conf(): NULL optval still yields EINVAL -- the + * converted code tests opt->iter_out.ubuf in place of optval. + */ +TEST_F(tls, conf_null_optval) +{ + socklen_t optlen =3D 64; + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_TLS, TLS_TX, NULL, &optlen)); + ASSERT_EQ(EINVAL, errno); +} + +TEST_F(tls, conf_short) +{ + socklen_t optlen =3D 2; + char buf[2]; + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_TLS, TLS_TX, buf, &optlen)); + ASSERT_EQ(EINVAL, errno); +} + +/* TLS_TX before crypto is set reports not-ready. */ +TEST_F(tls, conf_not_ready) +{ + struct tls_crypto_info info; + socklen_t optlen =3D sizeof(info); + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_TLS, TLS_TX, &info, &optlen)); + ASSERT_EQ(EBUSY, errno); +} + +/* Set TX crypto, then read it back at the base and full sizes, exercising + * both copy_to_iter() branches. SKIP if AES-GCM is unavailable. + */ +TEST_F(tls, conf_crypto_roundtrip) +{ + struct tls12_crypto_info_aes_gcm_128 tx =3D { + .info.version =3D TLS_1_2_VERSION, + .info.cipher_type =3D TLS_CIPHER_AES_GCM_128, + }; + struct tls12_crypto_info_aes_gcm_128 full; + struct tls_crypto_info base; + socklen_t optlen; + + if (setsockopt(self->fd, SOL_TLS, TLS_TX, &tx, sizeof(tx))) + SKIP(return, "set TLS_TX aes_gcm_128: %s", strerror(errno)); + + optlen =3D sizeof(base); + ASSERT_EQ(0, getsockopt(self->fd, SOL_TLS, TLS_TX, &base, &optlen)); + ASSERT_EQ(sizeof(base), optlen); + ASSERT_EQ(TLS_1_2_VERSION, base.version); + ASSERT_EQ(TLS_CIPHER_AES_GCM_128, base.cipher_type); + + optlen =3D sizeof(full); + ASSERT_EQ(0, getsockopt(self->fd, SOL_TLS, TLS_TX, &full, &optlen)); + ASSERT_EQ(sizeof(full), optlen); + ASSERT_EQ(TLS_CIPHER_AES_GCM_128, full.info.cipher_type); +} + +TEST_F(tls, bad_optname) +{ + socklen_t optlen =3D sizeof(int); + int val; + + ASSERT_EQ(-1, getsockopt(self->fd, SOL_TLS, 0x7fff, &val, &optlen)); + ASSERT_EQ(ENOPROTOOPT, errno); +} + TEST_HARNESS_MAIN --=20 2.53.0-Meta