• Juergen Gross's avatar
    xen/xenbus: don't let xenbus_grant_ring() remove grants in error case · 3777ea7b
    Juergen Gross authored
    Letting xenbus_grant_ring() tear down grants in the error case is
    problematic, as the other side could already have used these grants.
    Calling gnttab_end_foreign_access_ref() without checking success is
    resulting in an unclear situation for any caller of xenbus_grant_ring()
    as in the error case the memory pages of the ring page might be
    partially mapped. Freeing them would risk unwanted foreign access to
    them, while not freeing them would leak memory.
    
    In order to remove the need to undo any gnttab_grant_foreign_access()
    calls, use gnttab_alloc_grant_references() to make sure no further
    error can occur in the loop granting access to the ring pages.
    
    It should be noted that this way of handling removes leaking of
    grant entries in the error case, too.
    
    This is CVE-2022-23040 / part of XSA-396.
    Reported-by: default avatarDemi Marie Obenour <demi@invisiblethingslab.com>
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    Reviewed-by: default avatarJan Beulich <jbeulich@suse.com>
    3777ea7b
xenbus_client.c 23.3 KB