From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Xu Date: Tue, 24 Dec 2019 18:19:30 +0000 Subject: Re: [PATCH v4 16/19] KVM: Ensure validity of memslot with respect to kvm_get_dirty_log() Message-Id: <20191224181930.GC17176@xz-x1> List-Id: References: <20191217204041.10815-1-sean.j.christopherson@intel.com> <20191217204041.10815-17-sean.j.christopherson@intel.com> In-Reply-To: <20191217204041.10815-17-sean.j.christopherson@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Sean Christopherson Cc: James Hogan , Paul Mackerras , Christian Borntraeger , Janosch Frank , Paolo Bonzini , Marc Zyngier , linux-arm-kernel@lists.infradead.org, Wanpeng Li , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= , kvm@vger.kernel.org, David Hildenbrand , Joerg Roedel , Cornelia Huck , linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, kvm-ppc@vger.kernel.org, Vitaly Kuznetsov , kvmarm@lists.cs.columbia.edu, Jim Mattson On Tue, Dec 17, 2019 at 12:40:38PM -0800, Sean Christopherson wrote: > +int kvm_get_dirty_log(struct kvm *kvm, struct kvm_dirty_log *log, > + int *is_dirty, struct kvm_memory_slot **memslot) > { > struct kvm_memslots *slots; > - struct kvm_memory_slot *memslot; > int i, as_id, id; > unsigned long n; > unsigned long any = 0; > > + *memslot = NULL; > + *is_dirty = 0; > + > as_id = log->slot >> 16; > id = (u16)log->slot; > if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_USER_MEM_SLOTS) > return -EINVAL; > > slots = __kvm_memslots(kvm, as_id); > - memslot = id_to_memslot(slots, id); > - if (!memslot->dirty_bitmap) > + *memslot = id_to_memslot(slots, id); > + if (!(*memslot)->dirty_bitmap) > return -ENOENT; > > - n = kvm_dirty_bitmap_bytes(memslot); > + kvm_arch_sync_dirty_log(kvm, *memslot); Should this line belong to previous patch? > + > + n = kvm_dirty_bitmap_bytes(*memslot); > > for (i = 0; !any && i < n/sizeof(long); ++i) > - any = memslot->dirty_bitmap[i]; > + any = (*memslot)->dirty_bitmap[i]; > > - if (copy_to_user(log->dirty_bitmap, memslot->dirty_bitmap, n)) > + if (copy_to_user(log->dirty_bitmap, (*memslot)->dirty_bitmap, n)) > return -EFAULT; > > if (any) > -- > 2.24.1 -- Peter Xu