Following code crashes qemu user emulation.
#include <sys/types.h>
#include <sys/socket.h>
int main() {
accept(0,NULL,NULL);
return 0;
}
Pablo Virolainen
------------------------------------------------------------------------
Index: linux-user/syscall.c
===================================================================
RCS file: /sources/qemu/qemu/linux-user/syscall.c,v
retrieving revision 1.75
diff -u -r1.75 syscall.c
--- linux-user/syscall.c 27 Jun 2006 21:08:10 -0000 1.75
+++ linux-user/syscall.c 13 Jul 2006 10:18:57 -0000
@@ -878,9 +878,20 @@
int sockfd = tgetl(vptr);
target_ulong target_addr = tgetl(vptr + n);
target_ulong target_addrlen = tgetl(vptr + 2 * n);
- socklen_t addrlen = tget32(target_addrlen);
- void *addr = alloca(addrlen);
-
+ socklen_t addrlen=0;
+ /* Just to get rid of compiler warnings */
+ ulong addrt=0;
+ void *addr;
+
+ get_user(addrlen,&target_addrlen);
+ get_user(addrt,&target_addr);
+
+ if (addrt!=0) {
+ addr = alloca(addrlen);
+ } else {
+ addr = NULL;
+ }
+
ret = get_errno(accept(sockfd, addr, &addrlen));
if (!is_error(ret)) {
host_to_target_sockaddr(target_addr, addr, addrlen);
------------------------------------------------------------------------
_______________________________________________
Qemu-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/qemu-devel