HomeFreeBSD

xen/grants: fix deadlocks in the free callbacks

Description

xen/grants: fix deadlocks in the free callbacks

This fixes the panic caused by deadlocking when grant-table free
callbacks are used.

The cause of the recursion is: check_free_callbacks() is always called
with the lock gnttab_list_lock held. In turn the callback function is
also called with the lock held. Then when the client uses any of the grant
reference methods which also attempt the lock the gnttab_list_lock
mutex from within the free callback a deadlock happens.

Fix this by making the gnttab_list_lock recursive.

Submitted by: Pratyush Yadav <pratyush@freebsd.org>
Differential Revision: https://reviews.freebsd.org/D16505

Details

Provenance
roygerAuthored on
Differential Revision
D16505: Xen: Make gnttab_list_lock a recursive lock
Parents
rS336896: xen-blkfront: fix memory leak in xbd_connect error path
Branches
Unknown
Tags
Unknown