Commit ec24b988 authored by Johannes Berg's avatar Johannes Berg Committed by Richard Weinberger

um: remove variable stack array in os_rcv_fd_msg()

When generalizing this, I was in the mindset of this being
"userspace" code, but even there we should not use variable
arrays as the kernel is moving away from allowing that.

Simply reserve (but not use) enough space for the maximum
two descriptors we might need now, and return an error if
attempting to receive more than that.
Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202407041459.3SYg4TEi-lkp@intel.com/Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 431c1646
...@@ -528,7 +528,8 @@ int os_shutdown_socket(int fd, int r, int w) ...@@ -528,7 +528,8 @@ int os_shutdown_socket(int fd, int r, int w)
ssize_t os_rcv_fd_msg(int fd, int *fds, unsigned int n_fds, ssize_t os_rcv_fd_msg(int fd, int *fds, unsigned int n_fds,
void *data, size_t data_len) void *data, size_t data_len)
{ {
char buf[CMSG_SPACE(sizeof(*fds) * n_fds)]; #define MAX_RCV_FDS 2
char buf[CMSG_SPACE(sizeof(*fds) * MAX_RCV_FDS)];
struct cmsghdr *cmsg; struct cmsghdr *cmsg;
struct iovec iov = { struct iovec iov = {
.iov_base = data, .iov_base = data,
...@@ -538,10 +539,13 @@ ssize_t os_rcv_fd_msg(int fd, int *fds, unsigned int n_fds, ...@@ -538,10 +539,13 @@ ssize_t os_rcv_fd_msg(int fd, int *fds, unsigned int n_fds,
.msg_iov = &iov, .msg_iov = &iov,
.msg_iovlen = 1, .msg_iovlen = 1,
.msg_control = buf, .msg_control = buf,
.msg_controllen = sizeof(buf), .msg_controllen = CMSG_SPACE(sizeof(*fds) * n_fds),
}; };
int n; int n;
if (n_fds > MAX_RCV_FDS)
return -EINVAL;
n = recvmsg(fd, &msg, 0); n = recvmsg(fd, &msg, 0);
if (n < 0) if (n < 0)
return -errno; return -errno;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment