• David Woodhouse's avatar
    intel-iommu: PAE memory corruption fix · fd18de50
    David Woodhouse authored
    PAGE_MASK is 0xFFFFF000 on i386 -- even with PAE.
    
    So it's not sufficient to ensure that you use phys_addr_t or uint64_t
    everywhere you handle physical addresses -- you also have to avoid using
    the construct 'addr & PAGE_MASK', because that will strip the high 32
    bits of the address.
    
    This patch avoids that problem by using PHYSICAL_PAGE_MASK instead of
    PAGE_MASK where appropriate. It leaves '& PAGE_MASK' in a few instances
    that don't matter -- where it's being used on the virtual bus addresses
    we're dishing out, which are 32-bit anyway.
    
    Since PHYSICAL_PAGE_MASK is not present on other architectures, we have
    to define it (to PAGE_MASK) if it's not already defined.
    
    Maybe it would be better just to fix PAGE_MASK for i386/PAE?
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    fd18de50
intel-iommu.c 77.6 KB