• Reinette Chatre's avatar
    x86/sgx: Keep record of SGX page type · 8cb7b502
    Reinette Chatre authored
    SGX2 functions are not allowed on all page types. For example,
    ENCLS[EMODPR] is only allowed on regular SGX enclave pages and
    ENCLS[EMODPT] is only allowed on TCS and regular pages. If these
    functions are attempted on another type of page the hardware would
    trigger a fault.
    
    Keep a record of the SGX page type so that there is more
    certainty whether an SGX2 instruction can succeed and faults
    can be treated as real failures.
    
    The page type is a property of struct sgx_encl_page
    and thus does not cover the VA page type. VA pages are maintained
    in separate structures and their type can be determined in
    a different way. The SGX2 instructions needing the page type do not
    operate on VA pages and this is thus not a scenario needing to
    be covered at this time.
    
    struct sgx_encl_page hosting this information is maintained for each
    enclave page so the space consumed by the struct is important.
    The existing sgx_encl_page->vm_max_prot_bits is already unsigned long
    while only using three bits. Transition to a bitfield for the two
    members to support the additional information without increasing
    the space consumed by the struct.
    Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Link: https://lkml.kernel.org/r/a0a6939eefe7ba26514f6c49723521cde372de64.1652137848.git.reinette.chatre@intel.com
    8cb7b502
sgx.h 12.3 KB