linux-user: Fix errno for sendrecvmsg with large iovec length
The sendmsg and recvmsg syscalls use a different errno to indicate an overlarge iovec length from readv and writev. Handle this special case in do_sendrcvmsg_locked() to avoid getting the default errno returned by lock_iovec(). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
dab32b321f
commit
97b0797033
@ -3485,6 +3485,15 @@ static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp,
|
||||
|
||||
count = tswapal(msgp->msg_iovlen);
|
||||
target_vec = tswapal(msgp->msg_iov);
|
||||
|
||||
if (count > IOV_MAX) {
|
||||
/* sendrcvmsg returns a different errno for this condition than
|
||||
* readv/writev, so we must catch it here before lock_iovec() does.
|
||||
*/
|
||||
ret = -TARGET_EMSGSIZE;
|
||||
goto out2;
|
||||
}
|
||||
|
||||
vec = lock_iovec(send ? VERIFY_READ : VERIFY_WRITE,
|
||||
target_vec, count, send);
|
||||
if (vec == NULL) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user