Implement new system call in 2.6

From: Kristian Sørensen
Date: Wed Feb 25 2004 - 05:10:04 EST


Hi all!

How do I invoke a newly created system call in the 2.6.3 kernel from
userspace?

The call is added it arch/i386/kernel/entry.S and include/asm/unistd.h
and the call is implemented in a security module called Umbrella(*).

The kernel compiles and boots nicely.

The main problem is now to compile a userspace program that invokes this
call. The guide for implementing the systemcall at
http://fossil.wpi.edu/docs/howto_add_systemcall.html
has been followed, which yields the following userspace program:

// test.h
#include "/home/snc/linux-2.6.3-umbrella/include/linux/unistd.h"
_syscall1(int, umbrella_scr, int, arg1);

// test.c
#include "test.h"
main() {
int test = umbrella_scr(1);
printf ("%i\n", test);
}

When compiling:

gcc -I/home/snc/linux-2.6.3/include test.c

/tmp/ccYYs1zB.o(.text+0x20): In function `umbrella_scr':
: undefined reference to `errno'
collect2: ld returned 1 exit status


It seems like a little stupid error :-( Does some of you have a solution?



Thanks in advance and best regards,
Kristian Sørensen.



(*) Umbrella is a security project for securing handheld devices. Umbrella
for implements a combination of process based mandatory access control
(MAC) and authentication of files. This is implemented on top of the Linux
Security Modules framework. The MAC scheme is enforced by a set of
restrictions for each process.
More information on http://umbrella.sf.net


--
Kristian Sørensen <ks@xxxxxxxxx>
-
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/