[ovs-dev] [PATCH] socket-util: Correctly return negative values for errors.

Ben Pfaff blp at nicira.com
Wed Dec 7 16:34:34 UTC 2011


Thanks, I'll push this soon, with backports.

On Tue, Dec 06, 2011 at 11:46:00PM -0800, Justin Pettit wrote:
> 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
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> 



More information about the dev mailing list