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

Jasper St. Pierre jstpierre at mecheye.net
Thu Aug 7 06:56:59 PDT 2014


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


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
>



-- 
  Jasper
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140807/d6d989ac/attachment.html>


More information about the wayland-devel mailing list