[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