Nice catch.  Looks good.

--Justin


On Dec 6, 2011, at 3:55 PM, Ben Pfaff wrote:

> The comment on this function says that negative values indicate errors, and
> the callers assume that too, but in fact it was returning positive errno
> values, which are indistinguishable from valid fd numbers.
> 
> It really seems to me that this should have been found pretty quickly in
> the field, since stream-tcp and stream-ssl both use inet_open_passive to
> implement their passive listeners.  I'm surprised that no one has reported
> it.
> ---
> lib/socket-util.c |    7 ++++---
> 1 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/socket-util.c b/lib/socket-util.c
> index 26e2908..219433f 100644
> --- a/lib/socket-util.c
> +++ b/lib/socket-util.c
> @@ -673,7 +673,7 @@ inet_open_passive(int style, const char *target, int 
> default_port,
>     unsigned int yes = 1;
> 
>     if (!inet_parse_passive(target, default_port, &sin)) {
> -        return EAFNOSUPPORT;
> +        return -EAFNOSUPPORT;
>     }
> 
>     /* Create non-blocking socket, set SO_REUSEADDR. */
> @@ -681,7 +681,7 @@ inet_open_passive(int style, const char *target, int 
> default_port,
>     if (fd < 0) {
>         error = errno;
>         VLOG_ERR("%s: socket: %s", target, strerror(error));
> -        return error;
> +        return -error;
>     }
>     error = set_nonblocking(fd);
>     if (error) {
> @@ -716,6 +716,7 @@ inet_open_passive(int style, const char *target, int 
> default_port,
>             goto error;
>         }
>         if (sin.sin_family != AF_INET || sin_len != sizeof sin) {
> +            error = EAFNOSUPPORT;
>             VLOG_ERR("%s: getsockname: invalid socket name", target);
>             goto error;
>         }
> @@ -726,7 +727,7 @@ inet_open_passive(int style, const char *target, int 
> default_port,
> 
> error:
>     close(fd);
> -    return error;
> +    return -error;
> }
> 
> /* Returns a readable and writable fd for /dev/null, if successful, otherwise
> -- 
> 1.7.4.4
> 
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to