• David Herrmann's avatar
    wayland-server: return new ID in wl_client_add_resource() · 9fe135c4
    David Herrmann authored
    wl_client_add_resource() used to return no error even though the new
    resource wasn't added to the client. This currently makes it very easy to
    DOS weston by simply posting thousands of "create_surface" requests with
    an invalid ID. Weston simply assumes the wl_client_add_resource() request
    succeeds but will never destroy the surface again as the "destroy" signal
    is never called (because the surface isn't linked into the wl_map).
    
    This change makes wl_client_add_resource() return the new ID of the added
    object and 0 on failure. Servers (like weston) can now correctly
    immediately destroy the surface when this call fails instead of leaving
    the surface around and producing memory-leaks.
    
    Instead of returning -1 on failure and 0 on success, I made it return the
    new ID as this seems more appropriate. We can directly use it when calling
    it with new_id==0.
    Signed-off-by: default avatarDavid Herrmann <dh.herrmann@googlemail.com>
    9fe135c4
wayland-server.c 31.2 KB