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