lkml.org 
[lkml]   [2007]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 05/33] KVM: MMU: Fix host memory corruption on i386 with >= 4GB ram
    -stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Avi Kivity <avi@qumranet.com>

    PAGE_MASK is an unsigned long, so using it to mask physical addresses on
    i386 (which are 64-bit wide) leads to truncation. This can result in
    page->private of unrelated memory pages being modified, with disasterous
    results.

    Fix by not using PAGE_MASK for physical addresses; instead calculate
    the correct value directly from PAGE_SIZE. Also fix a similar BUG_ON().

    Acked-by: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: Avi Kivity <avi@qumranet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/kvm/mmu.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/drivers/kvm/mmu.c
    +++ b/drivers/kvm/mmu.c
    @@ -131,7 +131,7 @@ static int dbg = 1;
    (((address) >> PT32_LEVEL_SHIFT(level)) & ((1 << PT32_LEVEL_BITS) - 1))


    -#define PT64_BASE_ADDR_MASK (((1ULL << 52) - 1) & PAGE_MASK)
    +#define PT64_BASE_ADDR_MASK (((1ULL << 52) - 1) & ~(u64)(PAGE_SIZE-1))
    #define PT64_DIR_BASE_ADDR_MASK \
    (PT64_BASE_ADDR_MASK & ~((1ULL << (PAGE_SHIFT + PT64_LEVEL_BITS)) - 1))

    @@ -406,8 +406,8 @@ static void rmap_write_protect(struct kv
    spte = desc->shadow_ptes[0];
    }
    BUG_ON(!spte);
    - BUG_ON((*spte & PT64_BASE_ADDR_MASK) !=
    - page_to_pfn(page) << PAGE_SHIFT);
    + BUG_ON((*spte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT
    + != page_to_pfn(page));
    BUG_ON(!(*spte & PT_PRESENT_MASK));
    BUG_ON(!(*spte & PT_WRITABLE_MASK));
    rmap_printk("rmap_write_protect: spte %p %llx\n", spte, *spte);
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-04-26 19:01    [W:4.253 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site