diff options
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/net/socket.c b/net/socket.c index 16449d6daeca..293d56836f01 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -2222,9 +2222,10 @@ static int copy_msghdr_from_user(struct msghdr *kmsg, | |||
2222 | 2222 | ||
2223 | kmsg->msg_iocb = NULL; | 2223 | kmsg->msg_iocb = NULL; |
2224 | 2224 | ||
2225 | return import_iovec(save_addr ? READ : WRITE, | 2225 | err = import_iovec(save_addr ? READ : WRITE, |
2226 | msg.msg_iov, msg.msg_iovlen, | 2226 | msg.msg_iov, msg.msg_iovlen, |
2227 | UIO_FASTIOV, iov, &kmsg->msg_iter); | 2227 | UIO_FASTIOV, iov, &kmsg->msg_iter); |
2228 | return err < 0 ? err : 0; | ||
2228 | } | 2229 | } |
2229 | 2230 | ||
2230 | static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg, | 2231 | static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg, |
@@ -2326,6 +2327,13 @@ out_freeiov: | |||
2326 | /* | 2327 | /* |
2327 | * BSD sendmsg interface | 2328 | * BSD sendmsg interface |
2328 | */ | 2329 | */ |
2330 | long __sys_sendmsg_sock(struct socket *sock, struct user_msghdr __user *msg, | ||
2331 | unsigned int flags) | ||
2332 | { | ||
2333 | struct msghdr msg_sys; | ||
2334 | |||
2335 | return ___sys_sendmsg(sock, msg, &msg_sys, flags, NULL, 0); | ||
2336 | } | ||
2329 | 2337 | ||
2330 | long __sys_sendmsg(int fd, struct user_msghdr __user *msg, unsigned int flags, | 2338 | long __sys_sendmsg(int fd, struct user_msghdr __user *msg, unsigned int flags, |
2331 | bool forbid_cmsg_compat) | 2339 | bool forbid_cmsg_compat) |
@@ -2500,6 +2508,14 @@ out_freeiov: | |||
2500 | * BSD recvmsg interface | 2508 | * BSD recvmsg interface |
2501 | */ | 2509 | */ |
2502 | 2510 | ||
2511 | long __sys_recvmsg_sock(struct socket *sock, struct user_msghdr __user *msg, | ||
2512 | unsigned int flags) | ||
2513 | { | ||
2514 | struct msghdr msg_sys; | ||
2515 | |||
2516 | return ___sys_recvmsg(sock, msg, &msg_sys, flags, 0); | ||
2517 | } | ||
2518 | |||
2503 | long __sys_recvmsg(int fd, struct user_msghdr __user *msg, unsigned int flags, | 2519 | long __sys_recvmsg(int fd, struct user_msghdr __user *msg, unsigned int flags, |
2504 | bool forbid_cmsg_compat) | 2520 | bool forbid_cmsg_compat) |
2505 | { | 2521 | { |