Re: [Fastboot] Re: [announce] kexec for linux 2.6.6

From: Randy.Dunlap
Date: Wed May 12 2004 - 16:49:21 EST


On 12 May 2004 10:57:27 -0600 Eric W. Biederman wrote:

| Ulrich Drepper <drepper@xxxxxxxxxx> writes:
|
| > Eric W. Biederman wrote:
| >
| > > As a first draft we should be able to use the standard ELF mechanisms
| > > for this. It is not like PIC shared libraries were new. Or is
| > > there some specific problem you are thinking of with respect to
| > > randomization?
| >
| > The official kernel does not have vdso randomization. Ingo has a patch
| > for the Red Hat kernel which is used in the FC2 kernel. The patch
| > effectively only changes the location at which the vdso is mapped. It
| > does not change the vdso content. So the __kernel_vsyscall symbol in
| > the vdso's symbol table is not changed.

[1:]
| > AT_SYSINFO is the right way to go forward but it is not directly
| > accessible to userlevel code. And it is no pointer which will make
| > architectures with function descriptors unhappy.
|
| It sounds like the vdso just needs to be treated as a prelinked
| vdso. You can find everything you need with AT_SYSINFO_EHDR.
|
| In the case of function descriptors they should be in a data segment
| that can get copied to another page, and corrected. Leaving the code
| segment at it's randomized location.

Andrew tells me that he is OK with reserving a syscall number for
kexec, which is easy & quick. I don't know when vdso will be available
(for non-x86[2]) or when the AT_SYSINFO data will work for userlevel
code[1. above].

So is there any reason not to reserve the syscall number for kexec
for now? (patch is below)

--
~Randy


[2] kexec is currently only available for x86, but there is interest
in it for ia64 and ppc64 at least.



diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl linux-266-pv/arch/i386/kernel/entry.S linux-266-kexec/arch/i386/kernel/entry.S
--- linux-266-pv/arch/i386/kernel/entry.S 2004-05-09 19:32:26.000000000 -0700
+++ linux-266-kexec/arch/i386/kernel/entry.S 2004-05-11 16:46:27.000000000 -0700
@@ -891,5 +891,6 @@ ENTRY(sys_call_table)
.long sys_mq_timedreceive /* 280 */
.long sys_mq_notify
.long sys_mq_getsetattr
+ .long sys_ni_syscall /* reserved for kexec */

syscall_table_size=(.-sys_call_table)
diff -Naurp -X /home/rddunlap/doc/dontdiff-osdl linux-266-pv/include/asm-i386/unistd.h linux-266-kexec/include/asm-i386/unistd.h
--- linux-266-pv/include/asm-i386/unistd.h 2004-05-09 19:32:52.000000000 -0700
+++ linux-266-kexec/include/asm-i386/unistd.h 2004-05-11 16:45:32.000000000 -0700
@@ -288,8 +288,9 @@
#define __NR_mq_timedreceive (__NR_mq_open+3)
#define __NR_mq_notify (__NR_mq_open+4)
#define __NR_mq_getsetattr (__NR_mq_open+5)
+#define __NR_sys_kexec_load 283

-#define NR_syscalls 283
+#define NR_syscalls 284

/* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/