1
Index: linux-user/syscall.c
1
Index: qemu-0.10.0/linux-user/syscall.c
2
2
===================================================================
3
--- linux-user/syscall.c.orig 2008-01-06 20:38:42.000000000 +0100
4
+++ linux-user/syscall.c 2008-04-14 11:27:37.000000000 +0200
3
--- qemu-0.10.0.orig/linux-user/syscall.c 2009-03-07 13:46:58.000000000 +0100
4
+++ qemu-0.10.0/linux-user/syscall.c 2009-03-07 13:47:26.000000000 +0100
31
31
/* do_setsockopt() Must return target values and target errnos. */
32
32
static abi_long do_setsockopt(int sockfd, int level, int optname,
33
33
abi_ulong optval_addr, socklen_t optlen)
36
36
case TARGET_SOL_SOCKET:
157
@@ -1171,16 +1267,23 @@
157
@@ -1236,6 +1332,12 @@
161
- if (get_user_u32(addrlen, target_addrlen_addr))
162
- return -TARGET_EFAULT;
164
- addr = alloca(addrlen);
165
+ if (target_addrlen_addr != (target_ulong)NULL &&
166
+ target_addr != (target_ulong)NULL) {
167
+ if (get_user_u32(addrlen, target_addrlen_addr))
168
+ return -TARGET_EFAULT;
169
+ addr = alloca(addrlen);
170
+ ret = get_errno(accept(fd, addr, &addrlen));
161
+ if (target_addrlen_addr == (target_ulong)NULL ||
162
+ target_addr == (target_ulong)NULL) {
172
163
+ ret = get_errno(accept(fd, NULL, NULL));
167
if (get_user_u32(addrlen, target_addrlen_addr))
168
return -TARGET_EFAULT;
176
- ret = get_errno(accept(fd, addr, &addrlen));
177
if (!is_error(ret)) {
178
- host_to_target_sockaddr(target_addr, addr, addrlen);
179
- if (put_user_u32(addrlen, target_addrlen_addr))
180
- ret = -TARGET_EFAULT;
181
+ if (target_addr != (target_ulong)NULL)
182
+ host_to_target_sockaddr(target_addr, addr, addrlen);
183
+ if (target_addrlen_addr != (target_ulong)NULL)
184
+ if (put_user_u32(addrlen, target_addrlen_addr))
185
+ ret = -TARGET_EFAULT;
189
Index: linux-user/syscall_defs.h
170
Index: qemu-0.10.0/linux-user/syscall_defs.h
190
171
===================================================================
191
--- linux-user/syscall_defs.h.orig 2008-01-06 20:38:42.000000000 +0100
192
+++ linux-user/syscall_defs.h 2008-04-14 11:26:14.000000000 +0200
172
--- qemu-0.10.0.orig/linux-user/syscall_defs.h 2009-03-07 13:46:58.000000000 +0100
173
+++ qemu-0.10.0/linux-user/syscall_defs.h 2009-03-07 13:47:26.000000000 +0100
193
174
@@ -114,6 +114,11 @@
194
175
abi_long tv_nsec;