• Russell Currey's avatar
    powerpc/lib: Refactor __patch_instruction() to use __put_user_asm() · ef296729
    Russell Currey authored
    __patch_instruction() is called in early boot, and uses
    __put_user_size(), which includes the allow/prevent calls to enforce
    KUAP, which could either be called too early, or in the Radix case,
    forced to use "early_" versions of functions just to safely handle
    this one case.
    
    __put_user_asm() does not do this, and thus is safe to use both in
    early boot, and later on since in this case it should only ever be
    touching kernel memory.
    
    __patch_instruction() was previously refactored to use
    __put_user_size() in order to be able to return -EFAULT, which would
    allow the kernel to patch instructions in userspace, which should
    never happen. This has the functional change of causing faults on
    userspace addresses if KUAP is turned on, which should never happen in
    practice.
    
    A future enhancement could be to double check the patch address is
    definitely allowed to be tampered with by the kernel.
    Signed-off-by: default avatarRussell Currey <ruscur@russell.cc>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    ef296729
code-patching.c 18.2 KB