mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
kcm: convert to getsockopt_iter
Convert KCM 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 *opt - Use opt->optlen for buffer length (input) and returned size (output) - Use copy_to_iter() instead of put_user()/copy_to_user() - Add linux/uio.h for copy_to_iter() Signed-off-by: Breno Leitao <leitao@debian.org> Link: https://patch.msgid.link/20260507-getsock_two-v2-4-5873111d9c12@debian.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
447edcb0e4
commit
8aaaa32a79
@@ -24,6 +24,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/sched/signal.h>
|
||||
#include <linux/uio.h>
|
||||
|
||||
#include <net/kcm.h>
|
||||
#include <net/netns/generic.h>
|
||||
@@ -1167,7 +1168,7 @@ static int kcm_setsockopt(struct socket *sock, int level, int optname,
|
||||
}
|
||||
|
||||
static int kcm_getsockopt(struct socket *sock, int level, int optname,
|
||||
char __user *optval, int __user *optlen)
|
||||
sockopt_t *opt)
|
||||
{
|
||||
struct kcm_sock *kcm = kcm_sk(sock->sk);
|
||||
int val, len;
|
||||
@@ -1175,9 +1176,7 @@ static int kcm_getsockopt(struct socket *sock, int level, int optname,
|
||||
if (level != SOL_KCM)
|
||||
return -ENOPROTOOPT;
|
||||
|
||||
if (get_user(len, optlen))
|
||||
return -EFAULT;
|
||||
|
||||
len = opt->optlen;
|
||||
if (len < 0)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -1191,9 +1190,8 @@ static int kcm_getsockopt(struct socket *sock, int level, int optname,
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
|
||||
if (put_user(len, optlen))
|
||||
return -EFAULT;
|
||||
if (copy_to_user(optval, &val, len))
|
||||
opt->optlen = len;
|
||||
if (copy_to_iter(&val, len, &opt->iter_out) != len)
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
@@ -1755,7 +1753,7 @@ static const struct proto_ops kcm_dgram_ops = {
|
||||
.listen = sock_no_listen,
|
||||
.shutdown = sock_no_shutdown,
|
||||
.setsockopt = kcm_setsockopt,
|
||||
.getsockopt = kcm_getsockopt,
|
||||
.getsockopt_iter = kcm_getsockopt,
|
||||
.sendmsg = kcm_sendmsg,
|
||||
.recvmsg = kcm_recvmsg,
|
||||
.mmap = sock_no_mmap,
|
||||
@@ -1776,7 +1774,7 @@ static const struct proto_ops kcm_seqpacket_ops = {
|
||||
.listen = sock_no_listen,
|
||||
.shutdown = sock_no_shutdown,
|
||||
.setsockopt = kcm_setsockopt,
|
||||
.getsockopt = kcm_getsockopt,
|
||||
.getsockopt_iter = kcm_getsockopt,
|
||||
.sendmsg = kcm_sendmsg,
|
||||
.recvmsg = kcm_recvmsg,
|
||||
.mmap = sock_no_mmap,
|
||||
|
||||
Reference in New Issue
Block a user