[PATCH] Partially revert "xwayland: Always free reply from xcb_get_property_reply()"

Derek Foreman derekf at osg.samsung.com
Wed Jul 15 13:09:43 PDT 2015


On 15/07/15 02:58 PM, Emmanuel Gil Peyrot wrote:
> This reverts commit d3553c721c0fed07f85b70fea418ca65ed974fbb.
> 
> weston_wm_write_property() takes the ownership of the reply it gets as
> a parameter, and will eventually free it later in writable_callback.
> 
> This change introduced a double-free when Xwayland programs triggered a
> copy to the clipboard, leading to a Weston crash.
> ---
>  xwayland/selection.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/xwayland/selection.c b/xwayland/selection.c
> index 452cd69..0ef1e52 100644
> --- a/xwayland/selection.c
> +++ b/xwayland/selection.c
> @@ -117,13 +117,13 @@ weston_wm_get_incr_chunk(struct weston_wm *wm)
>  	dump_property(wm, wm->atom.wl_selection, reply);
>  
>  	if (xcb_get_property_value_length(reply) > 0) {
> +		/* reply's ownership is transfered to wm, which is responsible of freeing it */

This (and the other comment) should be wrapped at less than 80 cols

Otherwise this is:
Reviewed-By: Derek Foreman <derekf at osg.samsung.com>

>  		weston_wm_write_property(wm, reply);
>  	} else {
>  		weston_log("transfer complete\n");
>  		close(wm->data_source_fd);
> +		free(reply);
>  	}
> -
> -	free(reply);
>  }
>  
>  struct x11_data_source {
> @@ -247,12 +247,12 @@ weston_wm_get_selection_data(struct weston_wm *wm)
>  		return;
>  	} else if (reply->type == wm->atom.incr) {
>  		wm->incr = 1;
> +		free(reply);
>  	} else {
>  		wm->incr = 0;
> +		/* reply's ownership is transfered to wm, which is responsible of freeing it */
>  		weston_wm_write_property(wm, reply);
>  	}
> -
> -	free(reply);
>  }
>  
>  static void
> 



More information about the wayland-devel mailing list