lkml.org 
[lkml]   [2009]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/4] x86: use get_desc_base()
    Use get_desc_base() to get the base address in desc_struct

    Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
    ---
    arch/x86/kernel/doublefault_32.c | 4 +---
    arch/x86/kernel/step.c | 9 ++++-----
    2 files changed, 5 insertions(+), 8 deletions(-)

    diff --git a/arch/x86/kernel/doublefault_32.c b/arch/x86/kernel/doublefault_32.c
    index b4f14c6..37250fe 100644
    --- a/arch/x86/kernel/doublefault_32.c
    +++ b/arch/x86/kernel/doublefault_32.c
    @@ -27,9 +27,7 @@ static void doublefault_fn(void)

    if (ptr_ok(gdt)) {
    gdt += GDT_ENTRY_TSS << 3;
    - tss = *(u16 *)(gdt+2);
    - tss += *(u8 *)(gdt+4) << 16;
    - tss += *(u8 *)(gdt+7) << 24;
    + tss = get_desc_base((struct desc_struct *)gdt);
    printk(KERN_EMERG "double fault, tss at %08lx\n", tss);

    if (ptr_ok(tss)) {
    diff --git a/arch/x86/kernel/step.c b/arch/x86/kernel/step.c
    index e8b9863..3149032 100644
    --- a/arch/x86/kernel/step.c
    +++ b/arch/x86/kernel/step.c
    @@ -4,6 +4,7 @@
    #include <linux/sched.h>
    #include <linux/mm.h>
    #include <linux/ptrace.h>
    +#include <asm/desc.h>

    unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs)
    {
    @@ -23,7 +24,7 @@ unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *re
    * and APM bios ones we just ignore here.
    */
    if ((seg & SEGMENT_TI_MASK) == SEGMENT_LDT) {
    - u32 *desc;
    + struct desc_struct *desc;
    unsigned long base;

    seg &= ~7UL;
    @@ -33,12 +34,10 @@ unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *re
    addr = -1L; /* bogus selector, access would fault */
    else {
    desc = child->mm->context.ldt + seg;
    - base = ((desc[0] >> 16) |
    - ((desc[1] & 0xff) << 16) |
    - (desc[1] & 0xff000000));
    + base = get_desc_base(desc);

    /* 16-bit code segment? */
    - if (!((desc[1] >> 22) & 1))
    + if (!desc->d)
    addr &= 0xffff;
    addr += base;
    }
    --
    1.6.0.6


    \
     
     \ /
      Last update: 2009-07-18 17:15    [W:0.032 / U:1.516 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site