This is a note to let you know that I've just added the patch titled

    mm: highmem: don't treat PKMAP_ADDR(LAST_PKMAP) as a highmem address

to the 3.4-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mm-highmem-don-t-treat-pkmap_addr-last_pkmap-as-a-highmem-address.patch
and it can be found in the queue-3.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From 498c2280212327858e521e9d21345d4cc2637f54 Mon Sep 17 00:00:00 2001
From: Will Deacon <[email protected]>
Date: Fri, 16 Nov 2012 14:15:00 -0800
Subject: mm: highmem: don't treat PKMAP_ADDR(LAST_PKMAP) as a highmem address

From: Will Deacon <[email protected]>

commit 498c2280212327858e521e9d21345d4cc2637f54 upstream.

kmap_to_page returns the corresponding struct page for a virtual address
of an arbitrary mapping.  This works by checking whether the address
falls in the pkmap region and using the pkmap page tables instead of the
linear mapping if appropriate.

Unfortunately, the bounds checking means that PKMAP_ADDR(LAST_PKMAP) is
incorrectly treated as a highmem address and we can end up walking off
the end of pkmap_page_table and subsequently passing junk to pte_page.

This patch fixes the bound check to stay within the pkmap tables.

Signed-off-by: Will Deacon <[email protected]>
Cc: Mel Gorman <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Cc: Yijing Wang <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 mm/highmem.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/mm/highmem.c
+++ b/mm/highmem.c
@@ -98,7 +98,7 @@ struct page *kmap_to_page(void *vaddr)
 {
        unsigned long addr = (unsigned long)vaddr;
 
-       if (addr >= PKMAP_ADDR(0) && addr <= PKMAP_ADDR(LAST_PKMAP)) {
+       if (addr >= PKMAP_ADDR(0) && addr < PKMAP_ADDR(LAST_PKMAP)) {
                int i = (addr - PKMAP_ADDR(0)) >> PAGE_SHIFT;
                return pte_page(pkmap_page_table[i]);
        }


Patches currently in stable-queue which might be from [email protected] are

queue-3.4/usb-avoid-runtime-suspend-loops-for-hcds-that-can-t-handle-suspend-resume.patch
queue-3.4/mm-highmem-export-kmap_to_page-for-modules.patch
queue-3.4/mm-highmem-don-t-treat-pkmap_addr-last_pkmap-as-a-highmem-address.patch
queue-3.4/virtio-9p-correctly-pass-physical-address-to-userspace-for-high-pages.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to