• Ricardo Neri's avatar
    x86/insn-eval: Add utility functions to get segment descriptor base address and limit · bd5a410a
    Ricardo Neri authored
    With segmentation, the base address of the segment is needed to compute a
    linear address. This base address is obtained from the applicable segment
    descriptor. Such segment descriptor is referenced from a segment selector.
    These new functions obtain the segment base and limit of the segment
    selector indicated by segment register index given as argument. This index
    is any of the INAT_SEG_REG_* family of #define's.
    
    The logic to obtain the segment selector is wrapped in the function
    get_segment_selector() with the inputs described above. Once the selector
    is known, the base address is determined. In protected mode, the selector
    is used to obtain the segment descriptor and then its base address. In
    long mode, the segment base address is zero except when FS or GS are used.
    In virtual-8086 mode, the base address is computed as the value of the
    segment selector shifted 4 positions to the left.
    
    In protected mode, segment limits are enforced. Thus, a function to
    determine the limit of the segment is added. Segment limits are not
    enforced in long or virtual-8086. For the latter, addresses are limited
    to 20 bits; address size will be handled when computing the linear
    address.
    Improvements-by: default avatarBorislav Petkov <bp@suse.de>
    Signed-off-by: default avatarRicardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: ricardo.neri@intel.com
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    Cc: Huang Rui <ray.huang@amd.com>
    Cc: Qiaowei Ren <qiaowei.ren@intel.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Jiri Slaby <jslaby@suse.cz>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com>
    Cc: Chris Metcalf <cmetcalf@mellanox.com>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Colin Ian King <colin.king@canonical.com>
    Cc: Chen Yucong <slaoub@gmail.com>
    Cc: Adam Buchbinder <adam.buchbinder@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Thomas Garnier <thgarnie@google.com>
    Link: https://lkml.kernel.org/r/1509135945-13762-16-git-send-email-ricardo.neri-calderon@linux.intel.com
    bd5a410a
insn-eval.h 597 Bytes