Thanks for your answer, I've got one last question ;)
In the ARCH_GET_GS, can you explain the line 834 to 838?
In fact, at first sight I thought that just the line 836 was sufficient, but I obviously miss the case where MSR_KERNEL_GS_BASE does not reflect the value requested, hence my question.
828 case ARCH_GET_GS: {
829 unsigned long base;
830 unsigned gsindex;
831 if (task->thread.gsindex == GS_TLS_SEL)
832 base = read_32bit_tls(task, GS_TLS);
833 else if (doit) {
834 asm("movl %%gs,%0" : "=r" (gsindex));
835 if (gsindex)
836 rdmsrl(MSR_KERNEL_GS_BASE, base);
837 else
838 base = task->thread.gs;
839 }
840 else
841 base = task->thread.gs;
Thanks,
Eric