From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH RFC] kvm: write protect memory after slot swap Date: Mon, 25 Oct 2010 11:32:40 +0200 Message-ID: <4CC54EB8.9020604@redhat.com> References: <20101025012124.GA31262@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Gleb Natapov , Jan Kiszka , Sheng Yang , kvm@vger.kernel.org, linux-kernel@vger.kernel.org To: "Michael S. Tsirkin" Return-path: In-Reply-To: <20101025012124.GA31262@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 10/25/2010 03:21 AM, Michael S. Tsirkin wrote: > I have observed the following bug trigger: > > 1. userspace calls GET_DIRTY_LOG > 2. kvm_mmu_slot_remove_write_access is called and makes a page ro > 3. page fault happens and makes the page writeable > fault is logged in the bitmap appropriately > 4. kvm_vm_ioctl_get_dirty_log swaps slot pointers > > a lot of time passes > > 5. guest writes into the page > 6. userspace calls GET_DIRTY_LOG > > At point (5), bitmap is clean and page is writeable, > thus, guest modification of memory is not logged > and GET_DIRTY_LOG returns an empty bitmap. > > The rule is that all pages are either dirty in the current bitmap, > or write-protected, which is violated here. > > It seems that just moving kvm_mmu_slot_remove_write_access down > to after the slot pointer swap should fix this bug. > > Warning: completely untested. > Please comment. > Note: fix will be needed for -stable etc. Excellent catch, I stared at this code for a while and didn't see the bug. Patch applied. -- error compiling committee.c: too many arguments to function