linux segment
From: Tobias Boege <hidden>
Date: 2012-11-02 09:32:44
On Tue, 30 Oct 2012, Fan Yang wrote:
2012/10/29 Mulyadi Santosa [off-list ref]quoted
Hi Fan... On Sun, Oct 28, 2012 at 9:02 PM, Fan Yang [off-list ref] wrote:quoted
[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.comHi 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