mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
Avoid crash on NULL pointer in lock driver impls during hotplug
When virLockDriverAcquire is invoked during hotplug the state parameter will be left as NULL. * src/locking/lock_driver_nop.c, src/locking/lock_driver_sanlock.c: Don't reference NULL state parameter
This commit is contained in:
parent
09240ef13b
commit
eb661ce3ee
@ -76,7 +76,8 @@ static int virLockManagerNopRelease(virLockManagerPtr lock ATTRIBUTE_UNUSED,
|
|||||||
char **state,
|
char **state,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
*state = NULL;
|
if (state)
|
||||||
|
*state = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -85,8 +86,8 @@ static int virLockManagerNopInquire(virLockManagerPtr lock ATTRIBUTE_UNUSED,
|
|||||||
char **state,
|
char **state,
|
||||||
unsigned int flags ATTRIBUTE_UNUSED)
|
unsigned int flags ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
|
if (state)
|
||||||
*state = NULL;
|
*state = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -374,18 +374,20 @@ static int virLockManagerSanlockRelease(virLockManagerPtr lock,
|
|||||||
|
|
||||||
virCheckFlags(0, -1);
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
if ((rv = sanlock_inquire(-1, priv->vm_pid, 0, &res_count, state)) < 0) {
|
if (state) {
|
||||||
if (rv <= -200)
|
if ((rv = sanlock_inquire(-1, priv->vm_pid, 0, &res_count, state)) < 0) {
|
||||||
virLockError(VIR_ERR_INTERNAL_ERROR,
|
if (rv <= -200)
|
||||||
_("Failed to inquire lock: error %d"), rv);
|
virLockError(VIR_ERR_INTERNAL_ERROR,
|
||||||
else
|
_("Failed to inquire lock: error %d"), rv);
|
||||||
virReportSystemError(-rv, "%s",
|
else
|
||||||
_("Failed to inquire lock"));
|
virReportSystemError(-rv, "%s",
|
||||||
return -1;
|
_("Failed to inquire lock"));
|
||||||
}
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (STREQ(*state, ""))
|
if (STREQ(*state, ""))
|
||||||
VIR_FREE(*state);
|
VIR_FREE(*state);
|
||||||
|
}
|
||||||
|
|
||||||
if ((rv = sanlock_release(-1, priv->vm_pid, SANLK_REL_ALL, 0, NULL)) < 0) {
|
if ((rv = sanlock_release(-1, priv->vm_pid, SANLK_REL_ALL, 0, NULL)) < 0) {
|
||||||
if (rv <= -200)
|
if (rv <= -200)
|
||||||
@ -409,6 +411,11 @@ static int virLockManagerSanlockInquire(virLockManagerPtr lock,
|
|||||||
|
|
||||||
virCheckFlags(0, -1);
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
|
if (!state) {
|
||||||
|
virLockError(VIR_ERR_INVALID_ARG, "state");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
VIR_DEBUG("pid=%d", priv->vm_pid);
|
VIR_DEBUG("pid=%d", priv->vm_pid);
|
||||||
|
|
||||||
if ((rv = sanlock_inquire(-1, priv->vm_pid, 0, &res_count, state)) < 0) {
|
if ((rv = sanlock_inquire(-1, priv->vm_pid, 0, &res_count, state)) < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user