From mboxrd@z Thu Jan 1 00:00:00 1970 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 9CAE23D9026; Mon, 11 May 2026 10:42:15 +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=1778496137; cv=none; b=Wf1CIV+zHf3f4NZdjYXQ0VesDIP3skB4lLqXlAn+JEnIdUAc4PYsXwTxuTv4oSAxoVloWy0gK+SnD6viTRj2M+wALC8Pnr5xuFVS8P6oanTzLVxLbEr4cMIcsrSYPi7Tbde2kc3JFfMcUcdka37yZuVWhs1B/d+VwPFUTvj68Vw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778496137; c=relaxed/simple; bh=gB0St4CQxpXU7gKF9rXtafb1OmVyY/D/UPam9e+oqso=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pXCR4DaJPXbcpDVYPiFs5vdX4NqleKiSTomfA0dOxL7VU6FbP+kkIXa9II74lTk/IdjVqBN4UInTy5wbA+KxTHqYdTFJGot0YpdD1P2rrc1UMpyWPRnrc/H/OyXtxu/tZI2NIRX874H051i4YuEF4+4p+ZN7fgFY621/OiX9Pec= 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=Afyk9n3y; 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="Afyk9n3y" 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=JpTg0E3qD/O8DeTaZUSnQmT3HKvGWqiv+8u7BGQ9VJ0=; b=Afyk9n3yDjsUKtGOOSiBu+JG4P oqkXOHELRk1xIiE9skzzXTskyS/VbLzJKaCHpivIIC0h3dRDDCii07X7wfpkIu5OU5ud6wR3lAUTu Z6xB9LhQ0lak2t6ABXW1TriJO1AV1FqoppDqTXNOQ3d6mhz/x6iXeTQ/q2ruI5igVgg2K8Sr7yJOt psBMAoYRJl3t/tnmQPpnGi+A1xJwFIVnPlF5u8ftFYOHozunLTwPuZSvJQnCG4Jrb88VN6oPsgql9 xijVGQd8FOemwKuQsqBsm9xOixcYizQDhJysn7wxkmyOpodL1e2+jAbLN/QNb0pdiIxSdgGpHkuvw jvvawcqg==; 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 1wMO5V-001Xeo-2Z; Mon, 11 May 2026 10:42:14 +0000 From: Breno Leitao Date: Mon, 11 May 2026 03:41:49 -0700 Subject: [PATCH net-next 4/7] Bluetooth: RFCOMM: convert to getsockopt_iter Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260511-getsock_three-v1-4-1461fa8786ab@debian.org> References: <20260511-getsock_three-v1-0-1461fa8786ab@debian.org> In-Reply-To: <20260511-getsock_three-v1-0-1461fa8786ab@debian.org> To: Marcel Holtmann , Luiz Augusto von Dentz , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Shuah Khan Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@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=4232; i=leitao@debian.org; h=from:subject:message-id; bh=gB0St4CQxpXU7gKF9rXtafb1OmVyY/D/UPam9e+oqso=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBqAbJvTF8VL3YZdMUJyT8l8qJdVzq0VBXo0AR6Z cknCl4WOFuJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCagGybwAKCRA1o5Of/Hh3 bbTxD/9Ol78Y43c9IM/BxYRgHM3yTwOjBwnOTmvpvhCijK3NYpl1NnQd3CxMKSjEibUFwKhyqgI 0Pv1OGnxc41Udg0RpqXpoxKDYetGX/7TEkBE1OvB1bqxLr4qi13JwrBLsfB/Fkbg2LMnBHY04Rh K4b90L4voyLrQZpm+O0Er4f/QllppYBdRJfLdCPLFXUSK3ZhLzSeYPSWIMpwQZj152z6035Uogp EsyPHhjIv71OyKpHyGC5pYwLLzBOYgSTTUC2Jvj3AF4msCP5hpF8+IEPokfhmSBGqrrcm1QIx3d aEllRtjWuLi+UCfu6B/3FW3L31ri8A3QlKqD+z5UXST9RahNNTcc97I1i5pDuJXdxe3lYl/HgjD Os/ffB74yaMMTOzCUe1JQ7wZnj3TX1lGAb64GzL5F6hclpMK+o9uOfriUc9e7t0sXydmwbzyA8C kCUtv88zlf7iHAAE82HApIhG573zEPnQl1XkdezXIqXZ10fZj/f6ENepRH5QV/0CbNTF4XU1GZz jFGoAcMU+c98sm1gVpGYXKkS/7C8udNp4gbfykoI23/1cU0FWdF1xpu7OJFTEM1YmSf12OJvtqw Hc/qvx5V5LAmWsclZxPQ/hStJGkiryMTKlO01JlAgCY24d88C9PzOgQbeUoeLZ/vtoPxkUFahqk s7N+aiNtqbksTdw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D X-Debian-User: leitao Convert RFCOMM socket's getsockopt implementation to use the new getsockopt_iter callback with sockopt_t. Key changes: - Replace (char __user *optval, int __user *optlen) with sockopt_t *sopt - Use sopt->optlen for buffer length (input) - Use copy_to_iter() instead of put_user()/copy_to_user() - Add linux/uio.h for copy_to_iter() The sockopt_t parameter is named sopt rather than opt to avoid collision with the existing local u32 opt used by RFCOMM_LM. Signed-off-by: Breno Leitao --- net/bluetooth/rfcomm/sock.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index be6639cd6f590..9b22e4240ed14 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -723,7 +724,8 @@ static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, return err; } -static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen) +static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, + sockopt_t *sopt) { struct sock *sk = sock->sk; struct sock *l2cap_sk; @@ -735,8 +737,7 @@ static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u BT_DBG("sk %p", sk); - if (get_user(len, optlen)) - return -EFAULT; + len = sopt->optlen; lock_sock(sk); @@ -765,7 +766,8 @@ static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u if (rfcomm_pi(sk)->role_switch) opt |= RFCOMM_LM_MASTER; - if (put_user(opt, (u32 __user *) optval)) + if (copy_to_iter(&opt, sizeof(opt), &sopt->iter_out) != + sizeof(opt)) err = -EFAULT; break; @@ -785,7 +787,7 @@ static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u memcpy(cinfo.dev_class, conn->hcon->dev_class, 3); len = min(len, sizeof(cinfo)); - if (copy_to_user(optval, (char *) &cinfo, len)) + if (copy_to_iter(&cinfo, len, &sopt->iter_out) != len) err = -EFAULT; break; @@ -799,23 +801,24 @@ static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __u return err; } -static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen) +static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, + sockopt_t *sopt) { struct sock *sk = sock->sk; struct bt_security sec; int err = 0; size_t len; + u32 opt; BT_DBG("sk %p", sk); if (level == SOL_RFCOMM) - return rfcomm_sock_getsockopt_old(sock, optname, optval, optlen); + return rfcomm_sock_getsockopt_old(sock, optname, sopt); if (level != SOL_BLUETOOTH) return -ENOPROTOOPT; - if (get_user(len, optlen)) - return -EFAULT; + len = sopt->optlen; lock_sock(sk); @@ -830,7 +833,7 @@ static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, c sec.key_size = 0; len = min(len, sizeof(sec)); - if (copy_to_user(optval, (char *) &sec, len)) + if (copy_to_iter(&sec, len, &sopt->iter_out) != len) err = -EFAULT; break; @@ -841,8 +844,9 @@ static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, c break; } - if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), - (u32 __user *) optval)) + opt = test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); + if (copy_to_iter(&opt, sizeof(opt), &sopt->iter_out) != + sizeof(opt)) err = -EFAULT; break; @@ -1014,7 +1018,7 @@ static const struct proto_ops rfcomm_sock_ops = { .recvmsg = rfcomm_sock_recvmsg, .shutdown = rfcomm_sock_shutdown, .setsockopt = rfcomm_sock_setsockopt, - .getsockopt = rfcomm_sock_getsockopt, + .getsockopt_iter = rfcomm_sock_getsockopt, .ioctl = rfcomm_sock_ioctl, .gettstamp = sock_gettstamp, .poll = bt_sock_poll, -- 2.53.0-Meta