[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