mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-13 08:58:33 +03:00
security: fix deadlock with prefork
Attempts to start a domain with both SELinux and DAC security modules loaded will deadlock; latent problem introduced in commit fdb3bde and exposed in commit 29fe5d7. Basically, when recursing into the security manager for other driver's prefork, we have to undo the asymmetric lock taken at the manager level. Reported by Jiri Denemark, with diagnosis help from Dan Berrange. * src/security/security_stack.c (virSecurityStackPreFork): Undo extra lock grabbed during recursion. Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
a81eb0b4e9
commit
bfc183c1e3
@ -127,6 +127,11 @@ virSecurityStackPreFork(virSecurityManagerPtr mgr)
|
||||
rc = -1;
|
||||
break;
|
||||
}
|
||||
/* Undo the unbalanced locking left behind after recursion; if
|
||||
* PostFork ever delegates to driver callbacks, we'd instead
|
||||
* need to recurse to an internal method that does not regrab
|
||||
* a lock. */
|
||||
virSecurityManagerPostFork(item->securityManager);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
Loading…
x
Reference in New Issue
Block a user