]> git.ipfire.org Git - thirdparty/libvirt.git/commit
snapshot: Avoid latent use-after-free when cleaning snapshots
authorEric Blake <eblake@redhat.com>
Tue, 5 Mar 2019 02:38:27 +0000 (20:38 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 7 Mar 2019 23:40:18 +0000 (17:40 -0600)
commit44a9b872e82b26f26123dd6bf775f1ae8a697e43
treea05f17fc0620ddf5172685638dfd166516c26254
parent86c0ed6f70268dfa7c3bba95a0ba96fcfe2ab039
snapshot: Avoid latent use-after-free when cleaning snapshots

Right now, the only callers of qemuDomainSnapshotDiscardAllMetadata()
are right before freeing the virDomainSnapshotObjList, so it did not
matter if the list's metaroot (which points to all the defined root
snapshots) is left inconsistent. But an upcoming patch will want to
clear all snapshots if a bulk redefine fails partway through, in
which case things must be reset.  Make this work by teaching the
existing virDomainSnapshotUpdateRelations() to be safe regardless of
the incoming state of the metaroot (since we don't want to leak that
internal detail into qemu code), then fixing the qemu code to use
it after deleting all snapshots. Additionally, the qemu code must
reset vm->current_snapshot if the current snapshot was removed,
regardless of whether the overall removal succeeded or failed later.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
src/conf/snapshot_conf.c
src/qemu/qemu_domain.c