KVM: s390: fixes for cmma migration
Two fixes for potential bitmap overruns in the cmma migration code. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJaPRe7AAoJEBF7vIC1phx8ENMQAIfuqVSU0zK535O+6sEMSReG phfs/EG008n5/r7dURovjjAotlpBhiltcS+aePtMfZOhnZZ0/Sb5Meqc0R+U3KIu b4EH9Gdg8oM9dGNaYtvlAwCZCisDnhfugY187UIHn7wDURWA8PDvx4aBrsLTO2JW nuhY2he93S3qpB6lXVTIx6yCUB3Q7iBfb+PLzPEfiUlQ+ZFIciddpq0JwCDsEQtx wQqYfKDcBClTLvjpk4DNhXW21ssPkN1VUyn0Vqb+Fvz/LFs7O0DhOKngoTqZj65q 4yJxQXNRDDF5gYqC6akjFloshd/HKdf28VcJ8QLIbV7ozT12KbMhDoVNkvC/WeqV URYDmyjimjaa+PlDDEUtgz6Bi9/VJcEtNFGa1sLjIzGuq8J4sLgDTCEDZ7SFQWje KKtQzc8cP34apSgSUhNBuPpQrb+1aVtEOBfC7KSy3c2YMuV0Ugdo32AkeZ7ErXv/ 922CvIPYSnNVtasumm84NgukJBwFVJqLAdXMvXKyopFOl/ah8uw+/934nZ35GK6l RzHkhzFt+MHuKr0fMAYwI6G/UC8eI98RcMHQiN7tnu0MsYGyL/JtVcjVPd80JdgQ wV6yOFHEsaH3rYlC4Z24h+IaGFhVxw9Y7xXTdLUU1XMR20nwyeH1KpVfhKd6hteW 3JcmtScObUzKUe4YkUGs =7RKy -----END PGP SIGNATURE----- Merge tag 'kvm-s390-master-4.15-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux KVM: s390: fixes for cmma migration Two fixes for potential bitmap overruns in the cmma migration code.
This commit is contained in:
commit
bb4945e60d
|
@ -792,11 +792,12 @@ static int kvm_s390_vm_start_migration(struct kvm *kvm)
|
||||||
|
|
||||||
if (kvm->arch.use_cmma) {
|
if (kvm->arch.use_cmma) {
|
||||||
/*
|
/*
|
||||||
* Get the last slot. They should be sorted by base_gfn, so the
|
* Get the first slot. They are reverse sorted by base_gfn, so
|
||||||
* last slot is also the one at the end of the address space.
|
* the first slot is also the one at the end of the address
|
||||||
* We have verified above that at least one slot is present.
|
* space. We have verified above that at least one slot is
|
||||||
|
* present.
|
||||||
*/
|
*/
|
||||||
ms = slots->memslots + slots->used_slots - 1;
|
ms = slots->memslots;
|
||||||
/* round up so we only use full longs */
|
/* round up so we only use full longs */
|
||||||
ram_pages = roundup(ms->base_gfn + ms->npages, BITS_PER_LONG);
|
ram_pages = roundup(ms->base_gfn + ms->npages, BITS_PER_LONG);
|
||||||
/* allocate enough bytes to store all the bits */
|
/* allocate enough bytes to store all the bits */
|
||||||
|
|
|
@ -1006,7 +1006,7 @@ static inline int do_essa(struct kvm_vcpu *vcpu, const int orc)
|
||||||
cbrlo[entries] = gfn << PAGE_SHIFT;
|
cbrlo[entries] = gfn << PAGE_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orc) {
|
if (orc && gfn < ms->bitmap_size) {
|
||||||
/* increment only if we are really flipping the bit to 1 */
|
/* increment only if we are really flipping the bit to 1 */
|
||||||
if (!test_and_set_bit(gfn, ms->pgste_bitmap))
|
if (!test_and_set_bit(gfn, ms->pgste_bitmap))
|
||||||
atomic64_inc(&ms->dirty_pages);
|
atomic64_inc(&ms->dirty_pages);
|
||||||
|
|
Loading…
Reference in New Issue