* [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter
@ 2026-07-08 11:51 Breno Leitao
2026-07-08 11:51 ` [PATCH net-next 1/2] nfc: llcp: widen getsockopt value locals to u32 Breno Leitao
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Breno Leitao @ 2026-07-08 11:51 UTC (permalink / raw)
To: David Heidelberg, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: oe-linux-nfc, netdev, linux-kernel, sdf.kernel, Breno Leitao,
kernel-team
Continue to convert the protocols to getsockopt_iter callback.
Proto llcp is one of the last to be converted, and it was waiting for
the following fixes to land first, avoiding merge conflicts.
* commit 000fb5bc757a ("nfc: llcp: read llcp_sock->local under the
socket lock in getsockopt")
* commit 81e676dec04f4 ("nfc: llcp: avoid userspace overflow on invalid
optlen")
Now that they have landed, let's move llcp to .getsockopt_iter callback
Regarding the whole project migration, this is where we are:
Missing proto_ops migration (as of net-next)
net/can/isotp.c:1707 isotp_ops (.getsockopt = isotp_getsockopt) [1]
net/can/j1939/socket.c:1375 j1939_ops (.getsockopt = j1939_sk_getsockopt) [1]
net/ieee802154/socket.c:410 ieee802154_raw_ops (.getsockopt = sock_common_getsockopt)
net/ieee802154/socket.c:972 ieee802154_dgram_ops (.getsockopt = sock_common_getsockopt)
net/ipv4/af_inet.c:1060 inet_stream_ops (.getsockopt = sock_common_getsockopt)
net/ipv4/af_inet.c:1096 inet_dgram_ops (.getsockopt = sock_common_getsockopt)
net/ipv4/af_inet.c:1128 inet_sockraw_ops (.getsockopt = sock_common_getsockopt)
net/ipv6/af_inet6.c:660 inet6_stream_ops (.getsockopt = sock_common_getsockopt)
net/ipv6/af_inet6.c:696 inet6_dgram_ops (.getsockopt = sock_common_getsockopt)
net/ipv6/raw.c:1276 inet6_sockraw_ops (.getsockopt = sock_common_getsockopt)
net/l2tp/l2tp_ip.c:628 l2tp_ip_ops (.getsockopt = sock_common_getsockopt)
net/l2tp/l2tp_ip6.c:757 l2tp_ip6_ops (.getsockopt = sock_common_getsockopt)
net/mptcp/protocol.c:4567 mptcp_stream_ops (.getsockopt = sock_common_getsockopt)
net/mptcp/protocol.c:4676 mptcp_v6_stream_ops (.getsockopt = sock_common_getsockopt)
net/phonet/socket.c:451 phonet_stream_ops (.getsockopt = sock_common_getsockopt)
net/sctp/ipv6.c:1043 inet6_seqpacket_ops (.getsockopt = sock_common_getsockopt)
net/sctp/protocol.c:1106 inet_seqpacket_ops (.getsockopt = sock_common_getsockopt)
net/smc/af_smc.c:3330 smc_sock_ops (.getsockopt = smc_getsockopt)
net/smc/smc_inet.c:33 smc_inet_stream_ops (.getsockopt = smc_getsockopt)
net/smc/smc_inet.c:80 smc_inet6_stream_ops (.getsockopt = smc_getsockopt)
Link: https://lore.kernel.org/all/20260507-getsock_two_can-v1-0-3c2ae9edfadc@debian.org/ [1]
Signed-off-by: Breno Leitao <leitao@debian.org>
---
Breno Leitao (2):
nfc: llcp: widen getsockopt value locals to u32
nfc: llcp: convert to getsockopt_iter
net/nfc/llcp_sock.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
---
base-commit: 5c73cd9f0819c1c44e373e3dabb68318b1de1a12
change-id: 20260706-getsockopt_phase3-34f7b5eb3e0b
Best regards,
--
Breno Leitao <leitao@debian.org>
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH net-next 1/2] nfc: llcp: widen getsockopt value locals to u32 2026-07-08 11:51 [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao @ 2026-07-08 11:51 ` Breno Leitao 2026-07-08 11:51 ` [PATCH net-next 2/2] nfc: llcp: convert to getsockopt_iter Breno Leitao 2026-07-30 13:07 ` [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao 2 siblings, 0 replies; 6+ messages in thread From: Breno Leitao @ 2026-07-08 11:51 UTC (permalink / raw) To: David Heidelberg, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman Cc: oe-linux-nfc, netdev, linux-kernel, sdf.kernel, Breno Leitao, kernel-team nfc_llcp_getsockopt() returns each option as a u32 (written through a (u32 __user *) cast), but the temporary variables are smaller than that, and they are promoted at write side, example: u8 rw; put_user(rw, (u32 __user *) optval) That is fine, but I want to widen the rw/miux/remote_miu locals from u8/u16 to u32 so the following getsockopt_iter conversion can pass their address to copy_to_iter(), which expects an object of the exact width. No functional change. PS: I am sending this as a separated patch to make sure this conversion explictly reviewable. Signed-off-by: Breno Leitao <leitao@debian.org> --- net/nfc/llcp_sock.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index 5558d8a4d48b3..94850fbe3620d 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c @@ -308,8 +308,7 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname, struct sock *sk = sock->sk; struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); int len, err = 0; - u16 miux, remote_miu; - u8 rw; + u32 miux, remote_miu, rw; pr_debug("%p optname %d\n", sk, optname); -- 2.53.0-Meta ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next 2/2] nfc: llcp: convert to getsockopt_iter 2026-07-08 11:51 [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao 2026-07-08 11:51 ` [PATCH net-next 1/2] nfc: llcp: widen getsockopt value locals to u32 Breno Leitao @ 2026-07-08 11:51 ` Breno Leitao 2026-07-30 13:07 ` [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao 2 siblings, 0 replies; 6+ messages in thread From: Breno Leitao @ 2026-07-08 11:51 UTC (permalink / raw) To: David Heidelberg, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman Cc: oe-linux-nfc, netdev, linux-kernel, sdf.kernel, Breno Leitao, kernel-team Convert nfc_llcp_getsockopt() to the getsockopt_iter proto_ops callback. It takes a sockopt_t and writes each value with copy_to_iter() instead of a put_user() into optval; the socket layer builds the sockopt_t and copies the length back. The socket lock and optlen validation are unchanged. No functional change. Signed-off-by: Breno Leitao <leitao@debian.org> --- net/nfc/llcp_sock.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index 94850fbe3620d..0f9cd03294074 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c @@ -302,21 +302,20 @@ static int nfc_llcp_setsockopt(struct socket *sock, int level, int optname, } static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname, - char __user *optval, int __user *optlen) + sockopt_t *opt) { struct nfc_llcp_local *local; struct sock *sk = sock->sk; struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); + u32 miux, remote_miu, remote_lto, remote_rw, rw; int len, err = 0; - u32 miux, remote_miu, rw; pr_debug("%p optname %d\n", sk, optname); if (level != SOL_NFC) return -ENOPROTOOPT; - if (get_user(len, optlen)) - return -EFAULT; + len = opt->optlen; if (len < 0) return -EINVAL; @@ -337,7 +336,7 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname, switch (optname) { case NFC_LLCP_RW: rw = llcp_sock->rw > LLCP_MAX_RW ? local->rw : llcp_sock->rw; - if (put_user(rw, (u32 __user *) optval)) + if (copy_to_iter(&rw, len, &opt->iter_out) != len) err = -EFAULT; break; @@ -346,7 +345,7 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname, miux = be16_to_cpu(llcp_sock->miux) > LLCP_MAX_MIUX ? be16_to_cpu(local->miux) : be16_to_cpu(llcp_sock->miux); - if (put_user(miux, (u32 __user *) optval)) + if (copy_to_iter(&miux, len, &opt->iter_out) != len) err = -EFAULT; break; @@ -355,19 +354,21 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname, remote_miu = llcp_sock->remote_miu > LLCP_MAX_MIU ? local->remote_miu : llcp_sock->remote_miu; - if (put_user(remote_miu, (u32 __user *) optval)) + if (copy_to_iter(&remote_miu, len, &opt->iter_out) != len) err = -EFAULT; break; case NFC_LLCP_REMOTE_LTO: - if (put_user(local->remote_lto / 10, (u32 __user *) optval)) + remote_lto = local->remote_lto / 10; + if (copy_to_iter(&remote_lto, len, &opt->iter_out) != len) err = -EFAULT; break; case NFC_LLCP_REMOTE_RW: - if (put_user(llcp_sock->remote_rw, (u32 __user *) optval)) + remote_rw = llcp_sock->remote_rw; + if (copy_to_iter(&remote_rw, len, &opt->iter_out) != len) err = -EFAULT; break; @@ -379,8 +380,7 @@ static int nfc_llcp_getsockopt(struct socket *sock, int level, int optname, release_sock(sk); - if (put_user(len, optlen)) - return -EFAULT; + opt->optlen = len; return err; } @@ -937,7 +937,7 @@ static const struct proto_ops llcp_sock_ops = { .listen = llcp_sock_listen, .shutdown = sock_no_shutdown, .setsockopt = nfc_llcp_setsockopt, - .getsockopt = nfc_llcp_getsockopt, + .getsockopt_iter = nfc_llcp_getsockopt, .sendmsg = llcp_sock_sendmsg, .recvmsg = llcp_sock_recvmsg, .mmap = sock_no_mmap, -- 2.53.0-Meta ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter 2026-07-08 11:51 [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao 2026-07-08 11:51 ` [PATCH net-next 1/2] nfc: llcp: widen getsockopt value locals to u32 Breno Leitao 2026-07-08 11:51 ` [PATCH net-next 2/2] nfc: llcp: convert to getsockopt_iter Breno Leitao @ 2026-07-30 13:07 ` Breno Leitao 2026-08-11 18:46 ` David Heidelberg 2 siblings, 1 reply; 6+ messages in thread From: Breno Leitao @ 2026-07-30 13:07 UTC (permalink / raw) To: David Heidelberg, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman Cc: oe-linux-nfc, netdev, linux-kernel, sdf.kernel, kernel-team On Wed, Jul 08, 2026 at 04:51:57AM -0700, Breno Leitao wrote: > Continue to convert the protocols to getsockopt_iter callback. Hello David, Have you had a chance to look at this change? Thanks --breno ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter 2026-07-30 13:07 ` [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao @ 2026-08-11 18:46 ` David Heidelberg 2026-08-12 10:25 ` Breno Leitao 0 siblings, 1 reply; 6+ messages in thread From: David Heidelberg @ 2026-08-11 18:46 UTC (permalink / raw) To: Breno Leitao, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman Cc: oe-linux-nfc, netdev, linux-kernel, sdf.kernel, kernel-team On 30/07/2026 15:07, Breno Leitao wrote: > On Wed, Jul 08, 2026 at 04:51:57AM -0700, Breno Leitao wrote: >> Continue to convert the protocols to getsockopt_iter callback. > > Hello David, > > Have you had a chance to look at this change? Hello Breno, sadly I don't have it inside my mailbox nor archive. Can you send it again please? Preferably in a week after another batch of fixes will land? Thanks David > > Thanks > --breno -- David Heidelberg ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter 2026-08-11 18:46 ` David Heidelberg @ 2026-08-12 10:25 ` Breno Leitao 0 siblings, 0 replies; 6+ messages in thread From: Breno Leitao @ 2026-08-12 10:25 UTC (permalink / raw) To: David Heidelberg Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman, oe-linux-nfc, netdev, linux-kernel, sdf.kernel, kernel-team Hello David, On Tue, Aug 11, 2026 at 08:46:11PM +0200, David Heidelberg wrote: > On 30/07/2026 15:07, Breno Leitao wrote: > > On Wed, Jul 08, 2026 at 04:51:57AM -0700, Breno Leitao wrote: > > > Continue to convert the protocols to getsockopt_iter callback. > > > > Hello David, > > > > Have you had a chance to look at this change? > > Hello Breno, > > sadly I don't have it inside my mailbox nor archive. No worries, I see it in lore: https://lore.kernel.org/all/20260708-getsockopt_phase3-v1-0-d8394f2fc554@debian.org/ > Can you send it again please? Sure, I am happy to resend. > Preferably in a week after another batch of fixes will land? Sorry, what fixes are those? Thanks --breno ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-08-12 10:26 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-08 11:51 [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao 2026-07-08 11:51 ` [PATCH net-next 1/2] nfc: llcp: widen getsockopt value locals to u32 Breno Leitao 2026-07-08 11:51 ` [PATCH net-next 2/2] nfc: llcp: convert to getsockopt_iter Breno Leitao 2026-07-30 13:07 ` [PATCH net-next 0/2] nfc: llcp: Move to .getsockopt_iter Breno Leitao 2026-08-11 18:46 ` David Heidelberg 2026-08-12 10:25 ` Breno Leitao
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.