Now that the sys_call_table is no longer exported, what would be the
best way to add a new system call from a module in 2.6? I have only
seen the system call table in assembly code (such as in
arch/i386/kernel/entry.S) and do not know how to export it. I know that
doing this is not recommended, but it would save me a lot of time while
developing new system calls (no need to recompile kernel and reboot for
every change). Thanks in advance for any suggestions.
Avishay Traeger
On Fri, 14 Jan 2005, Avishay Traeger wrote:
> Now that the sys_call_table is no longer exported, what would be the
> best way to add a new system call from a module in 2.6? I have only
> seen the system call table in assembly code (such as in
> arch/i386/kernel/entry.S) and do not know how to export it. I know that
> doing this is not recommended, but it would save me a lot of time while
> developing new system calls (no need to recompile kernel and reboot for
> every change). Thanks in advance for any suggestions.
>
> Avishay Traeger
>
Just add some dummy function pointers at the end of the table
and have them point to a procedure that returns -ENOSYS.
existing:
.long sys_request_key
.long sys_keyctl
syscall_table_size = (. -sys_call_table)
new:
.long sys_request_key
.long sys_keyctl
mine: .long sys_in_syscall
.long sys_in_syscall
.long sys_in_syscall
.long sys_in_syscall
.global mine
.type mine,@object
syscall_table_size = (. -sys_call_table)
Export whatever you want to find your entries in your module.
Your module modifies the pointers at will ('mine' is now an
array of 4 pointers). To prevent crashes, save what was in
the pointer you modified and put it back before your module exits!
Just don't expect this to be put into a standard kernel.
Cheers,
Dick Johnson
Penguin : Linux version 2.6.10 on an i686 machine (5537.79 BogoMips).
Notice : All mail here is now cached for review by Dictator Bush.
98.36% of all statistics are fiction.
On Fri, 2005-01-14 16:12:38 -0500, linux-os <[email protected]>
wrote in message <[email protected]>:
> On Fri, 14 Jan 2005, Avishay Traeger wrote:
> >Now that the sys_call_table is no longer exported, what would be the
> >best way to add a new system call from a module in 2.6? I have only
Actually, there's no "correct" or good way to do that at all. Currently,
the system call number is used as an index to a pointer table on most
archs (with a bit of added complexity possibly because of supported
different APIs, eg. on MIPS).
However, that's not always true. For the VAX port, we've considered
having structs per syscall, not only a single pointer.
Also, adding syscalls somewhere won't lead to a stable API, so you may
run into problems off the user space...
> >seen the system call table in assembly code (such as in
> >arch/i386/kernel/entry.S) and do not know how to export it. I know that
> >doing this is not recommended, but it would save me a lot of time while
> >developing new system calls (no need to recompile kernel and reboot for
> >every change). Thanks in advance for any suggestions.
For testing purposes, you'd add some dummy entry at the end and register
(through an exported function you've got to add to the core kernel) your
function pointer with it.
However, the basic question is: you you *really* need to have new
syscalls? Just right now, we've already got too many of 'em... So what's
the main goal you want to achieve with your software?
> Just don't expect this to be put into a standard kernel.
Seconded...
MfG, JBG
--
Jan-Benedict Glaw [email protected] . +49-172-7608481 _ O _
"Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg _ _ O
fuer einen Freien Staat voll Freier Bürger" | im Internet! | im Irak! O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));