qtest: Be paranoid about accept() addrlen argument
authorAndreas Färber <afaerber@suse.de>
Thu, 17 Apr 2014 17:21:12 +0000 (19:21 +0200)
committerAndreas Färber <afaerber@suse.de>
Mon, 5 May 2014 18:58:33 +0000 (20:58 +0200)
POSIX specifies that address_len shall on output specify the length of
the stored address; it does not however specify whether it may get
updated on failure as well to, e.g., zero.

In case EINTR occurs, re-initialize the variable to the desired value.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
tests/libqtest.c

index 4b90d91..71468ac 100644 (file)
@@ -89,8 +89,8 @@ static int socket_accept(int sock)
     setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (void *)&timeout,
                sizeof(timeout));
 
-    addrlen = sizeof(addr);
     do {
+        addrlen = sizeof(addr);
         ret = accept(sock, (struct sockaddr *)&addr, &addrlen);
     } while (ret == -1 && errno == EINTR);
     if (ret == -1) {