Commit be09ac4194bd0a61c0d9412c32431fbe2273cba1
1 parent
607175e0
linux-user: removed unnecessary MAX_SOCK_ADDR checks for socket syscalls
- This check is not needed because kernel will check whether given buffer is too small and there is no upper limit for size of the buffer. From: Mika Westerberg <mika.westerberg@iki.fi> Signed-off-by: Riku Voipio <riku.voipio@iki.fi> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7117 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
7 additions
and
10 deletions
linux-user/syscall.c
| @@ -1208,16 +1208,13 @@ static abi_long do_socket(int domain, int type, int protocol) | @@ -1208,16 +1208,13 @@ static abi_long do_socket(int domain, int type, int protocol) | ||
| 1208 | return get_errno(socket(domain, type, protocol)); | 1208 | return get_errno(socket(domain, type, protocol)); |
| 1209 | } | 1209 | } |
| 1210 | 1210 | ||
| 1211 | -/* MAX_SOCK_ADDR from linux/net/socket.c */ | ||
| 1212 | -#define MAX_SOCK_ADDR 128 | ||
| 1213 | - | ||
| 1214 | /* do_bind() Must return target values and target errnos. */ | 1211 | /* do_bind() Must return target values and target errnos. */ |
| 1215 | static abi_long do_bind(int sockfd, abi_ulong target_addr, | 1212 | static abi_long do_bind(int sockfd, abi_ulong target_addr, |
| 1216 | socklen_t addrlen) | 1213 | socklen_t addrlen) |
| 1217 | { | 1214 | { |
| 1218 | void *addr; | 1215 | void *addr; |
| 1219 | 1216 | ||
| 1220 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) | 1217 | + if (addrlen < 0) |
| 1221 | return -TARGET_EINVAL; | 1218 | return -TARGET_EINVAL; |
| 1222 | 1219 | ||
| 1223 | addr = alloca(addrlen+1); | 1220 | addr = alloca(addrlen+1); |
| @@ -1232,7 +1229,7 @@ static abi_long do_connect(int sockfd, abi_ulong target_addr, | @@ -1232,7 +1229,7 @@ static abi_long do_connect(int sockfd, abi_ulong target_addr, | ||
| 1232 | { | 1229 | { |
| 1233 | void *addr; | 1230 | void *addr; |
| 1234 | 1231 | ||
| 1235 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) | 1232 | + if (addrlen < 0) |
| 1236 | return -TARGET_EINVAL; | 1233 | return -TARGET_EINVAL; |
| 1237 | 1234 | ||
| 1238 | addr = alloca(addrlen); | 1235 | addr = alloca(addrlen); |
| @@ -1307,7 +1304,7 @@ static abi_long do_accept(int fd, abi_ulong target_addr, | @@ -1307,7 +1304,7 @@ static abi_long do_accept(int fd, abi_ulong target_addr, | ||
| 1307 | if (get_user_u32(addrlen, target_addrlen_addr)) | 1304 | if (get_user_u32(addrlen, target_addrlen_addr)) |
| 1308 | return -TARGET_EFAULT; | 1305 | return -TARGET_EFAULT; |
| 1309 | 1306 | ||
| 1310 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) | 1307 | + if (addrlen < 0) |
| 1311 | return -TARGET_EINVAL; | 1308 | return -TARGET_EINVAL; |
| 1312 | 1309 | ||
| 1313 | addr = alloca(addrlen); | 1310 | addr = alloca(addrlen); |
| @@ -1332,7 +1329,7 @@ static abi_long do_getpeername(int fd, abi_ulong target_addr, | @@ -1332,7 +1329,7 @@ static abi_long do_getpeername(int fd, abi_ulong target_addr, | ||
| 1332 | if (get_user_u32(addrlen, target_addrlen_addr)) | 1329 | if (get_user_u32(addrlen, target_addrlen_addr)) |
| 1333 | return -TARGET_EFAULT; | 1330 | return -TARGET_EFAULT; |
| 1334 | 1331 | ||
| 1335 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) | 1332 | + if (addrlen < 0) |
| 1336 | return -TARGET_EINVAL; | 1333 | return -TARGET_EINVAL; |
| 1337 | 1334 | ||
| 1338 | addr = alloca(addrlen); | 1335 | addr = alloca(addrlen); |
| @@ -1360,7 +1357,7 @@ static abi_long do_getsockname(int fd, abi_ulong target_addr, | @@ -1360,7 +1357,7 @@ static abi_long do_getsockname(int fd, abi_ulong target_addr, | ||
| 1360 | if (get_user_u32(addrlen, target_addrlen_addr)) | 1357 | if (get_user_u32(addrlen, target_addrlen_addr)) |
| 1361 | return -TARGET_EFAULT; | 1358 | return -TARGET_EFAULT; |
| 1362 | 1359 | ||
| 1363 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) | 1360 | + if (addrlen < 0) |
| 1364 | return -TARGET_EINVAL; | 1361 | return -TARGET_EINVAL; |
| 1365 | 1362 | ||
| 1366 | addr = alloca(addrlen); | 1363 | addr = alloca(addrlen); |
| @@ -1398,7 +1395,7 @@ static abi_long do_sendto(int fd, abi_ulong msg, size_t len, int flags, | @@ -1398,7 +1395,7 @@ static abi_long do_sendto(int fd, abi_ulong msg, size_t len, int flags, | ||
| 1398 | void *host_msg; | 1395 | void *host_msg; |
| 1399 | abi_long ret; | 1396 | abi_long ret; |
| 1400 | 1397 | ||
| 1401 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) | 1398 | + if (addrlen < 0) |
| 1402 | return -TARGET_EINVAL; | 1399 | return -TARGET_EINVAL; |
| 1403 | 1400 | ||
| 1404 | host_msg = lock_user(VERIFY_READ, msg, len, 1); | 1401 | host_msg = lock_user(VERIFY_READ, msg, len, 1); |
| @@ -1433,7 +1430,7 @@ static abi_long do_recvfrom(int fd, abi_ulong msg, size_t len, int flags, | @@ -1433,7 +1430,7 @@ static abi_long do_recvfrom(int fd, abi_ulong msg, size_t len, int flags, | ||
| 1433 | ret = -TARGET_EFAULT; | 1430 | ret = -TARGET_EFAULT; |
| 1434 | goto fail; | 1431 | goto fail; |
| 1435 | } | 1432 | } |
| 1436 | - if (addrlen < 0 || addrlen > MAX_SOCK_ADDR) { | 1433 | + if (addrlen < 0) { |
| 1437 | ret = -TARGET_EINVAL; | 1434 | ret = -TARGET_EINVAL; |
| 1438 | goto fail; | 1435 | goto fail; |
| 1439 | } | 1436 | } |