Re: 2.6.9-rc1-mm4

Andrew Morton
2004-09-08T08:50:06Z

Simon Derr <simon.derr@bull.net> wrote:
>
> Build fails without CONFIG_KEYS:
>
> kernel/sys.c:283:29: macro "sys_request_key" requires 5 arguments, but only 1 given
> kernel/sys.c:283: error: `sys_request_key' defined both normally and as an alias
> kernel/sys.c:283: warning: `syscall_linkage' attribute only applies to function types
> kernel/sys.c:284:24: macro "sys_keyctl" requires 5 arguments, but only 1 given
> kernel/sys.c:284: error: `sys_keyctl' defined both normally and as an alias
> kernel/sys.c:284: warning: `syscall_linkage' attribute only applies to function types
>
> In include/linux/key.h, sys_request_key and sys_keyctl are defined as
> macros :
>
> #define sys_request_key(a,b,c,d,e) (-ENOSYS)
> #define sys_keyctl(a,b,c,d,e) (-ENOSYS)
>
> But in kernel/sys.c, we find:
>
> cond_syscall(sys_request_key)
> cond_syscall(sys_keyctl)
>
> Which expects these symbols to be real functions, it seems.

Works OK here. What compiler version are you using? And what architecture?

With these #defines in scope:

#define sys_request_key(a,b,c,d,e) (-ENOSYS)
#define sys_keyctl(a,b,c,d,e) (-ENOSYS)

the preprocessor should allow

cond_syscall(sys_request_key)
cond_syscall(sys_keyctl)

to pass through unscathed. It's a bit unpleasant though. I guess we can
just remove those defines from key.h.