• James Morse's avatar
    Revert "arm64: uaccess: implement unsafe accessors" · 3b82a6ea
    James Morse authored
    This reverts commit a1f33941.
    
    The unsafe accessors allow the PAN enable/disable calls to be made
    once for a group of accesses. Adding these means we can now have
    sequences that look like this:
    
    | user_access_begin();
    | unsafe_put_user(static-value, x, err);
    | unsafe_put_user(helper-that-sleeps(), x, err);
    | user_access_end();
    
    Calling schedule() without taking an exception doesn't switch the
    PSTATE or TTBRs. We can switch out of a uaccess-enabled region, and
    run other code with uaccess enabled for a different thread.
    
    We can also switch from uaccess-disabled code back into this region,
    meaning the unsafe_put_user()s will fault.
    
    For software-PAN, threads that do this will get stuck as
    handle_mm_fault() will determine the page has already been mapped in,
    but we fault again as the page tables aren't loaded.
    
    To solve this we need code in __switch_to() that save/restores the
    PAN state.
    Acked-by: default avatarJulien Thierry <julien.thierry@arm.com>
    Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    3b82a6ea
uaccess.h 12 KB