linux segment

Tobias Boege tobias at gambas-buch.de
Fri Nov 2 05:32:44 EDT 2012


On Tue, 30 Oct 2012, Fan Yang wrote:
> 2012/10/29 Mulyadi Santosa <mulyadi.santosa at gmail.com>
> 
> > Hi Fan...
> >
> > On Sun, Oct 28, 2012 at 9:02 PM, Fan Yang <lljyangfan at gmail.com> wrote:
> > >
> > > [root at shell--box kernel_mod]# dmesg -c
> > > **********************************
> > > cs 60 96
> > > ds 7b 123
> > > ss 68 104
> > > es 7b 123
> > > fs d8 216
> > > gs e0 224
> > > **********************************
> > >
> > > The cs and ds in the kernel space is 60 and 7b. But the kernel define the
> > > KERNEL_CS as 60 and the KERNEL_DS as 7b.  Where am I wrong?
> > >
> >
> >
> > you print CS and DS twice, once during init and once during exit of
> > your kernel module. So, which one do you want to confirm?
> >
> > All in all, I have a guess that you see such number (DS belongs to
> > user space in kernel module) because IIRC kernel module loading is
> > done using syscall and with the help of modprobe helper.
> >
> > Thus, it is important to access user space during that stage, hence DS
> > still using user space data segment.
> >
> >
> > --
> > regards,
> >
> > Mulyadi Santosa
> > Freelance Linux trainer and consultant
> >
> > blog: the-hydra.blogspot.com
> > training: mulyaditraining.blogspot.com
> >
> 
> Hi  Mulyadi Santosa
>    I get the same result during the kernel module init and exit. Then I try
> to add a syscall to print these registers, and nothing changed. It is
> strange.

> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

(Weird, this is the third time, I have to send this. If anybody gets this
message multiple times, I apologise but my mail is not in the archives.)

If Mulyadi is right and we need DS to be USER_DS to access user space (I
really don't know, sorry, but maybe there is something in your <uaccess.h>?)
then your attempt to try with a syscall couldn't yield other values because
one trait of syscalls is that they can access user space.

This means you would get DS = USER_DS precisely _because_ you are in a
syscall. Module init and exit are, too, just some stack frames above one and
thus fall into this category as well.

But shouldn't it be possible to register a timer and then print the
segment registers? Timers are fired in softirq context and, hence, have no
connection to user space.

Regards,
Tobi




More information about the Kernelnewbies mailing list