I don't seem to have gotten patches 0-2,7 for some reason; I'll try and
dig them out of the LKML folder.

On Sat, Nov 10, 2018 at 03:17:27PM -0800, Nadav Amit wrote:
> +void __init poking_init(void)
> +{
> +     spinlock_t *ptl;
> +     pte_t *ptep;
> +
> +     poking_mm = copy_init_mm();
> +     if (!poking_mm) {
> +             pr_err("x86/mm: error setting a separate poking address space");
> +             return;
> +     }
> +
> +     /*
> +      * Randomize the poking address, but make sure that the following page
> +      * will be mapped at the same PMD. We need 2 pages, so find space for 3,
> +      * and adjust the address if the PMD ends after the first one.
> +      */
> +     poking_addr = TASK_UNMAPPED_BASE +
> +             (kaslr_get_random_long("Poking") & PAGE_MASK) %
> +             (TASK_SIZE - TASK_UNMAPPED_BASE - 3 * PAGE_SIZE);
> +
> +     if (((poking_addr + PAGE_SIZE) & ~PMD_MASK) == 0)
> +             poking_addr += PAGE_SIZE;
> +
> +     /*
> +      * We need to trigger the allocation of the page-tables that will be
> +      * needed for poking now. Later, poking may be performed in an atomic
> +      * section, which might cause allocation to fail.
> +      */
> +     ptep = get_locked_pte(poking_mm, poking_addr, &ptl);
> +     if (!WARN_ON(!ptep))
> +             pte_unmap_unlock(ptep, ptl);
> +}

The difference in how we deal with -ENOMEM here is weird. I think we
have a _lot_ of code that simply hard assumes we don't fail memory alloc
on init.

I for instance would not mind to simply remove both branches and let the
kernel crash and burn if we ever fail here.

Reply via email to