Re: Kernel stack

From: suthambhara nagaraj (suthambhara_at_gmail.com)
Date: 10/12/04

  • Next message: Herbert Poetzl: "Re: [patch 2/3] lsm: add bsdjail module"
    Date:	Tue, 12 Oct 2004 12:21:37 +0530
    To: "Dhiman, Gaurav" <gaurav.dhiman@ca.com>
    
    

    Hi,
    The problem is each process does not have a TSS of its own.Only one
    TSSper processor is present and the process dependant features (Like
    esp) are stored
    in another structure( struct thread_struct ).A kernel stack of size 8k
    (By default)
    is actully shared by processes running on a processor. There is a func named
    load_tss (or something similiar) which loads the TSS from the
    thread_struct structure during task switch .

    A Process does not have an SS entry in its thread_struct but only an
    esp (and esp0) entry. This made me believe that the stack base is the
    same.
    Correct me

    Regards

    On Tue, 12 Oct 2004 11:55:24 +0530, Dhiman, Gaurav <gaurav.dhiman@ca.com> wrote:
    >
    > > I have not understood how the common kernel stack in the
    > > init_thread_union(2.6 ,init_task_union in case of 2.4) works for all
    > > the processes which run on the same processor
    >
    > As far as I know, Kernel do not have any common stack for all the
    > processes running over it. Whenever we enter the kernel mode thru system
    > calls, we go thru system gate or descriptor (0x80 entry) in IDT. This
    > entry contains the index of the descriptor in GDT (normally it points to
    > Kernel CS Segment Descriptor in GDT) and the offset (pointer) to the
    > code to be executed in kernel mode (which is system_call() function in
    > Kernel).
    >
    > Now the descriptor entry in GDT pointed out by the system gate entry in
    > IDT, contains 2 bit field known as DPL (Desired Privelege Level). If
    > this DPL is less than the CPL (Current Prevelege Level) of CPU then CPU
    > switches to the process specific kernel stack segement by refferring the
    > TSS of current running process. This stack switch is automatic by CPUand
    > there is no assembly intruction required for it.
    >
    > This stack switch is done at the time when we enter from user space to
    > the kernel space, this is done because we can not trust and share the
    > user process stack (stack used by user process in user mode). That is
    > why every process has atleast two and can even have four stacks. In each
    > process, stack for every CPU level (ring level) is defined. So whenever
    > the process runs in user mode (ring 3), its user mode stack is used, but
    > when it enters the kernel mode (ring 0) its stack is switched to the
    > kernel stack of that process. All the stacks of a process for different
    > levels of CPU are tracked thru TSS defined for that process.
    >
    > To read more on IDT, GDT, TSS and System Calls invocation, refer to the
    > Intels System Programmer's Guide. Her is the Link:
    > ftp://download.intel.com/design/PentiumII/manuals/24319202.pdf
    >
    > Correct me if I am wrong somewhere.
    >
    > Cheers !!
    > Gaurav
    >
    >
    >
    >
    > -----Original Message-----
    > From: kernelnewbies-bounce@nl.linux.org
    > [mailto:kernelnewbies-bounce@nl.linux.org] On Behalf Of suthambhara
    > nagaraj
    > Sent: Tuesday, October 12, 2004 10:31 AM
    > To: kernel
    > Subject: Kernel stack
    >
    > Hi all,
    >
    > I have not understood how the common kernel stack in the
    > init_thread_union(2.6 ,init_task_union in case of 2.4) works for all
    > the processes which run on the same processor. The scheduling is round
    > robin and yet the things on the stack (saved during SAVE_ALL) have to
    > be maintained after a switch without them getting erased. I am
    > familiar with only the i386 arch implementation.
    >
    > Please help
    >
    > regards,
    > Suthambhara
    >
    > --
    > Kernelnewbies: Help each other learn about the Linux kernel.
    > Archive: http://mail.nl.linux.org/kernelnewbies/
    > FAQ: http://kernelnewbies.org/faq/
    >
    >
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/


  • Next message: Herbert Poetzl: "Re: [patch 2/3] lsm: add bsdjail module"

    Relevant Pages

    • [Full-disclosure] PHRACK 64: ATTACKING THE CORE
      ... - The Slab Allocator ... - Slab overflow exploiting: ... - Forcing a kernel path to sleep ... - Stack Frame Flow Recovery ...
      (Full-Disclosure)
    • Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
      ... stack usages for you is that they contain a 'cpumask_t' on the stack. ... We can enable MAXSMP and raise the CPU limits some time in the future. ... not accept a specially built kernel, but only a kernel that has been ... know how extensively these distributions test and certify for many known ...
      (Linux-Kernel)
    • RE: Kernel stack
      ... You discussed that kernel do not keep track of SS for process specific ... time of stack switching, so we need to initialize them to the right ... elements of TSS to be right, it's just going to copy those values in SS ... process will be scheduled by the scheduler or a process enters the ...
      (Linux-Kernel)
    • Re: Interrupt context...
      ... > gone through most of the posts on interrupt in usenet. ... > kernel stack and ISR is executed. ... More may be saved depending on the architecture. ... Here the kernel have assembler code to save all general ...
      (comp.os.linux.development.system)
    • Re: The Linux Staging tree, what it is and is not.
      ... if you compromize them and write the wrong ones to the stack, ... Load two user space fieldbus stacks on the same network card (remembering ... right, but that's the same, no matter if it runs in kernel or user ... need an objdict API to userspace...? ...
      (Linux-Kernel)