On 4/29/24 14:43, Fima Shevrin via Devel wrote:
> When creating a snapshot of a VM with multiple hard disks,
> the snapshot takes into account the presence of all disks
> in the system. If, over time, one of the disks is deleted,
> the snapshot will continue to store knowledge of the deleted disk.
> This results in the fact that at the moment of deleting the snapshot,
> at the validation stage, a disk from the snapshot will be searched which
> is not in the VM configuration. As a result, vmdisk variable will
> be equal to NULL. Dereferencing a null pointer at the time of calling
> virStorageSourceIsSameLocation(vmdisk->src, disk->src) will result in SIGSEGV.
> 
> Signed-off-by: Fima Shevrin <efim.shev...@virtuozzo.com>
> ---
>  src/qemu/qemu_snapshot.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
> index 09ec959f10..bf93cd485e 100644
> --- a/src/qemu/qemu_snapshot.c
> +++ b/src/qemu/qemu_snapshot.c
> @@ -3806,7 +3806,7 @@ qemuSnapshotDeleteValidate(virDomainObj *vm,
>              vmdisk = qemuDomainDiskByName(vm->def, snapDisk->name);
>              disk = qemuDomainDiskByName(snapdef->parent.dom, snapDisk->name);
>  
> -            if (!virStorageSourceIsSameLocation(vmdisk->src, disk->src)) {
> +            if (vmdisk != NULL && 
> !virStorageSourceIsSameLocation(vmdisk->src, disk->src)) {

If vmdisk is NULL, shouldn't this function
(qemuSnapshotDeleteValidate()) return an error?

Similarly, disk can be NULL too.

>                  virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
>                                 _("disk image '%1$s' for internal snapshot 
> '%2$s' is not the same as disk image currently used by VM"),
>                                 snapDisk->name, snap->def->name);

Michal

Reply via email to