]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
kaiser: drop is_atomic arg to kaiser_pagetable_walk()
authorHugh Dickins <hughd@google.com>
Sun, 29 Oct 2017 18:36:19 +0000 (11:36 -0700)
committerKirtikar Kashyap <kirtikar.kashyap@oracle.com>
Fri, 12 Jan 2018 18:20:09 +0000 (10:20 -0800)
I have not observed a might_sleep() warning from setup_fixmap_gdt()'s
use of kaiser_add_mapping() in our tree (why not?), but like upstream
we have not provided a way for that to pass is_atomic true down to
kaiser_pagetable_walk(), and at startup it's far from a likely source
of trouble: so just delete the walk's is_atomic arg and might_sleep().

Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 28c6de5441740f868a5b371804a0e8dde03757fb)
Orabug: 27333760
CVE: CVE-2017-5754
Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
Conflicts:
arch/x86/mm/kaiser.c

Signed-off-by: Kirtikar Kashyap <kirtikar.kashyap@oracle.com>
arch/x86/mm/kaiser.c

index a8ce2e4737e078566133295688c981d72e16e51e..c64bfef99ee84755cfd0373fb5b5bae126ee11a9 100644 (file)
@@ -108,19 +108,13 @@ static inline unsigned long get_pa_from_mapping(unsigned long vaddr)
  *
  * Returns a pointer to a PTE on success, or NULL on failure.
  */
-static pte_t *kaiser_pagetable_walk(unsigned long address, bool is_atomic)
+static pte_t *kaiser_pagetable_walk(unsigned long address)
 {
        pmd_t *pmd;
        pud_t *pud;
        pgd_t *pgd = native_get_shadow_pgd(pgd_offset_k(address));
        gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
 
-       if (is_atomic) {
-               gfp &= ~GFP_KERNEL;
-               gfp |= __GFP_HIGH;
-       } else
-               might_sleep();
-
        if (pgd_none(*pgd)) {
                WARN_ONCE(1, "All shadow pgds should have been populated");
                return NULL;
@@ -195,7 +189,7 @@ static int kaiser_add_user_map(const void *__start_addr, unsigned long size,
                        ret = -EIO;
                        break;
                }
-               pte = kaiser_pagetable_walk(address, false);
+               pte = kaiser_pagetable_walk(address);
                if (!pte) {
                        ret = -ENOMEM;
                        break;