Re: linux segment

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 30 Oct 2012, Fan Yang wrote:
> 2012/10/29 Mulyadi Santosa <mulyadi.santosa@xxxxxxxxx>
> 
> > Hi Fan...
> >
> > On Sun, Oct 28, 2012 at 9:02 PM, Fan Yang <lljyangfan@xxxxxxxxx> wrote:
> > >
> > > [root@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@xxxxxxxxxxxxxxxxx
> 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


_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux