[PATCH wayland] server: fix conditions for fds in wl_socket_destroy

Pekka Paalanen ppaalanen at gmail.com
Thu Aug 7 23:21:46 PDT 2014


On Thu, 7 Aug 2014 09:56:59 -0400
"Jasper St. Pierre" <jstpierre at mecheye.net> wrote:

> Reviewed-by: Jasper St. Pierre <jstpierre at mecheye.net>

Thanks, pushed.
- pq


> On Thu, Aug 7, 2014 at 9:51 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> 
> > From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> >
> > 0 is also a valid fd, and needs to be closed.
> >
> > On error we set fd to -1. We need to also initialize fds to -1, so we do
> > not accidentally close stdout on error.
> >
> > While fixing this, also remove one use-before-NULL-check.
> >
> > Based on the patch by Marek.
> >
> > Cc: Marek Chalupa <mchqwerty at gmail.com>
> > Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> > ---
> >  src/wayland-server.c | 27 ++++++++++++++++++++-------
> >  1 file changed, 20 insertions(+), 7 deletions(-)
> >
> > diff --git a/src/wayland-server.c b/src/wayland-server.c
> > index 3c162d4..3bd8e68 100644
> > --- a/src/wayland-server.c
> > +++ b/src/wayland-server.c
> > @@ -848,16 +848,32 @@ wl_socket_destroy(struct wl_socket *s)
> >                 wl_event_source_remove(s->source);
> >         if (s->addr.sun_path[0])
> >                 unlink(s->addr.sun_path);
> > -       if (s->fd)
> > +       if (s->fd >= 0)
> >                 close(s->fd);
> >         if (s->lock_addr[0])
> >                 unlink(s->lock_addr);
> > -       if (s->fd_lock)
> > +       if (s->fd_lock >= 0)
> >                 close(s->fd_lock);
> >
> >         free(s);
> >  }
> >
> > +static struct wl_socket *
> > +wl_socket_alloc(void)
> > +{
> > +       struct wl_socket *s;
> > +
> > +       s = malloc(sizeof *s);
> > +       if (!s)
> > +               return NULL;
> > +
> > +       memset(s, 0, sizeof *s);
> > +       s->fd = -1;
> > +       s->fd_lock = -1;
> > +
> > +       return s;
> > +}
> > +
> >  WL_EXPORT void
> >  wl_display_destroy(struct wl_display *display)
> >  {
> > @@ -1149,12 +1165,10 @@ wl_display_add_socket_auto(struct wl_display
> > *display)
> >          * you need more than this, use the explicit add_socket API. */
> >         const int MAX_DISPLAYNO = 32;
> >
> > -       s = malloc(sizeof *s);
> > +       s = wl_socket_alloc();
> >         if (s == NULL)
> >                 return NULL;
> >
> > -       memset(s, 0, sizeof *s);
> > -
> >         do {
> >                 snprintf(display_name, sizeof display_name, "wayland-%d",
> > displayno);
> >                 if (wl_socket_init_for_display_name(s, display_name) < 0) {
> > @@ -1184,8 +1198,7 @@ wl_display_add_socket(struct wl_display *display,
> > const char *name)
> >  {
> >         struct wl_socket *s;
> >
> > -       s = malloc(sizeof *s);
> > -       memset(s, 0, sizeof *s);
> > +       s = wl_socket_alloc();
> >         if (s == NULL)
> >                 return -1;
> >
> > --
> > 1.8.5.5
> >
> > _______________________________________________
> > wayland-devel mailing list
> > wayland-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> >
> 
> 
> 



More information about the wayland-devel mailing list