Module: xenomai-3 Branch: next Commit: b078ab3efe5cf3ef1b3df5905ce4e8004de5179d URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b078ab3efe5cf3ef1b3df5905ce4e8004de5179d
Author: Philippe Gerum <r...@xenomai.org> Date: Mon Dec 4 19:21:23 2017 +0100 net/udp: ioctl: remove direct references to user memory --- kernel/drivers/net/stack/ipv4/udp/udp.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/kernel/drivers/net/stack/ipv4/udp/udp.c b/kernel/drivers/net/stack/ipv4/udp/udp.c index 01c9d8d..f8eeadd 100644 --- a/kernel/drivers/net/stack/ipv4/udp/udp.c +++ b/kernel/drivers/net/stack/ipv4/udp/udp.c @@ -26,6 +26,7 @@ #include <linux/socket.h> #include <linux/in.h> #include <linux/ip.h> +#include <linux/err.h> #include <linux/udp.h> #include <linux/tcp.h> #include <net/checksum.h> @@ -345,26 +346,30 @@ void rt_udp_close(struct rtdm_fd *fd) -int rt_udp_ioctl(struct rtdm_fd *fd, unsigned int request, void *arg) +int rt_udp_ioctl(struct rtdm_fd *fd, unsigned int request, void __user *arg) { - struct rtsocket *sock = rtdm_fd_to_private(fd); - struct _rtdm_setsockaddr_args *setaddr = arg; - + struct rtsocket *sock = rtdm_fd_to_private(fd); + const struct _rtdm_setsockaddr_args *setaddr; + struct _rtdm_setsockaddr_args *_setaddr; - /* fast path for common socket IOCTLs */ - if (_IOC_TYPE(request) == RTIOC_TYPE_NETWORK) - return rt_socket_common_ioctl(fd, request, arg); + /* fast path for common socket IOCTLs */ + if (_IOC_TYPE(request) == RTIOC_TYPE_NETWORK) + return rt_socket_common_ioctl(fd, request, arg); - switch (request) { + switch (request) { case _RTIOC_BIND: - return rt_udp_bind(sock, setaddr->addr, setaddr->addrlen); - case _RTIOC_CONNECT: - return rt_udp_connect(sock, setaddr->addr, setaddr->addrlen); + setaddr = rtnet_get_arg(fd, &_setaddr, arg, sizeof(_setaddr)); + if (IS_ERR(setaddr)) + return PTR_ERR(setaddr); + if (request == _RTIOC_BIND) + return rt_udp_bind(sock, setaddr->addr, setaddr->addrlen); + + return rt_udp_connect(sock, setaddr->addr, setaddr->addrlen); default: - return rt_ip_ioctl(fd, request, arg); - } + return rt_ip_ioctl(fd, request, arg); + } } _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org https://xenomai.org/mailman/listinfo/xenomai-git