Apply by doing cd /sys/compat/svr4 patch -p0 < compat_linux.patch And then rebuild your kernel. Index: svr4_misc.c =================================================================== RCS file: /cvs/src/sys/compat/svr4/svr4_misc.c,v retrieving revision 1.13 diff -u -r1.13 svr4_misc.c --- svr4_misc.c 1997/10/06 20:19:35 1.13 +++ svr4_misc.c 1998/01/03 06:41:23 @@ -1,4 +1,4 @@ -/* $OpenBSD: svr4_misc.c,v 1.13 1997/10/06 20:19:35 deraadt Exp $ */ +/* $OpenBSD: svr4_misc.c,v 1.18 1997/12/02 00:07:04 deraadt Exp $ */ /* $NetBSD: svr4_misc.c,v 1.42 1996/12/06 03:22:34 christos Exp $ */ /* @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -742,7 +743,7 @@ return 0; default: - return ENOSYS; + return EINVAL; } } @@ -1284,6 +1285,18 @@ } int +svr4_sys_auditsys(p, v, retval) + register struct proc *p; + void *v; + register_t *retval; +{ + /* + * XXX: Big brother is *not* watching. + */ + return 0; +} + +int svr4_sys_memcntl(p, v, retval) register struct proc *p; void *v; @@ -1321,4 +1334,38 @@ return error; return 0; +} + +/* ARGSUSED */ +int +svr4_sys_setegid(p, v, retval) + struct proc *p; + void *v; + register_t *retval; +{ + struct sys_setegid_args /* { + syscallarg(gid_t) egid; + } */ *uap = v; + +#if defined(COMPAT_LINUX) && defined(i386) + if (SCARG(uap, egid) > 60000) { + /* + * One great fuckup deserves another. The Linux people + * made this their personality system call. But we can't + * tell if a binary is SVR4 or Linux until they do that + * system call, in some cases. So when we get it, and the + * value is out of some magical range, switch to Linux + * emulation and pray. + */ + extern struct emul emul_linux_elf; + + p->p_emul = &emul_linux_elf; +#ifdef KTRACE + if (KTRPOINT(p, KTR_EMUL)) + ktremul(p->p_tracep, p->p_emul->e_name); +#endif + return (0); + } +#endif + return sys_setegid(p, v, retval); } Index: svr4_syscall.h =================================================================== RCS file: /cvs/src/sys/compat/svr4/svr4_syscall.h,v retrieving revision 1.19 diff -u -r1.19 svr4_syscall.h --- svr4_syscall.h 1997/08/29 20:45:26 1.19 +++ svr4_syscall.h 1998/01/03 06:36:01 @@ -2,7 +2,7 @@ * System call numbers. * * DO NOT EDIT-- this file is automatically generated. - * created from OpenBSD: syscalls.master,v 1.18 1997/08/29 20:44:26 kstailey Exp + * created from OpenBSD: syscalls.master,v 1.21 1997/12/09 10:59:50 deraadt Exp */ #define SVR4_SYS_syscall 0 @@ -123,6 +123,7 @@ #define SVR4_SYS_pread 173 #define SVR4_SYS_pwrite 174 #define SVR4_SYS_acl 185 +#define SVR4_SYS_auditsys 186 #define SVR4_SYS_clock_gettime 191 #define SVR4_SYS_clock_settime 192 #define SVR4_SYS_clock_getres 193 Index: svr4_syscallargs.h =================================================================== RCS file: /cvs/src/sys/compat/svr4/svr4_syscallargs.h,v retrieving revision 1.19 diff -u -r1.19 svr4_syscallargs.h --- svr4_syscallargs.h 1997/08/29 20:45:26 1.19 +++ svr4_syscallargs.h 1998/01/03 06:36:01 @@ -2,7 +2,7 @@ * System call argument lists. * * DO NOT EDIT-- this file is automatically generated. - * created from OpenBSD: syscalls.master,v 1.18 1997/08/29 20:44:26 kstailey Exp + * created from OpenBSD: syscalls.master,v 1.21 1997/12/09 10:59:50 deraadt Exp */ #define syscallarg(x) union { x datum; register_t pad; } @@ -296,6 +296,10 @@ syscallarg(int) dummy; }; +struct svr4_sys_setegid_args { + syscallarg(gid_t) egid; +}; + struct svr4_sys_sysconfig_args { syscallarg(int) name; }; @@ -340,6 +344,15 @@ syscallarg(struct svr4_aclent *) buf; }; +struct svr4_sys_auditsys_args { + syscallarg(int) code; + syscallarg(int) a1; + syscallarg(int) a2; + syscallarg(int) a3; + syscallarg(int) a4; + syscallarg(int) a5; +}; + struct svr4_sys_facl_args { syscallarg(int) fd; syscallarg(int) cmd; @@ -463,7 +476,7 @@ int svr4_sys_memcntl __P((struct proc *, void *, register_t *)); int sys_rename __P((struct proc *, void *, register_t *)); int svr4_sys_uname __P((struct proc *, void *, register_t *)); -int sys_setegid __P((struct proc *, void *, register_t *)); +int svr4_sys_setegid __P((struct proc *, void *, register_t *)); int svr4_sys_sysconfig __P((struct proc *, void *, register_t *)); int sys_adjtime __P((struct proc *, void *, register_t *)); int svr4_sys_systeminfo __P((struct proc *, void *, register_t *)); @@ -477,6 +490,7 @@ int svr4_sys_pread __P((struct proc *, void *, register_t *)); int svr4_sys_pwrite __P((struct proc *, void *, register_t *)); int svr4_sys_acl __P((struct proc *, void *, register_t *)); +int svr4_sys_auditsys __P((struct proc *, void *, register_t *)); int sys_clock_gettime __P((struct proc *, void *, register_t *)); int sys_clock_settime __P((struct proc *, void *, register_t *)); int sys_clock_getres __P((struct proc *, void *, register_t *)); Index: svr4_syscalls.c =================================================================== RCS file: /cvs/src/sys/compat/svr4/svr4_syscalls.c,v retrieving revision 1.19 diff -u -r1.19 svr4_syscalls.c --- svr4_syscalls.c 1997/08/29 20:45:27 1.19 +++ svr4_syscalls.c 1998/01/03 06:36:01 @@ -2,7 +2,7 @@ * System call names. * * DO NOT EDIT-- this file is automatically generated. - * created from OpenBSD: syscalls.master,v 1.18 1997/08/29 20:44:26 kstailey Exp + * created from OpenBSD: syscalls.master,v 1.21 1997/12/09 10:59:50 deraadt Exp */ char *svr4_syscallnames[] = { @@ -208,7 +208,7 @@ "#183 (unimplemented)", /* 183 = unimplemented */ "#184 (unimplemented tsolsys)", /* 184 = unimplemented tsolsys */ "acl", /* 185 = acl */ - "#186 (unimplemented auditsys)", /* 186 = unimplemented auditsys */ + "auditsys", /* 186 = auditsys */ "#187 (unimplemented processor_bind)", /* 187 = unimplemented processor_bind */ "#188 (unimplemented processor_info)", /* 188 = unimplemented processor_info */ "#189 (unimplemented p_online)", /* 189 = unimplemented p_online */ Index: syscalls.master =================================================================== RCS file: /cvs/src/sys/compat/svr4/syscalls.master,v retrieving revision 1.18 diff -u -r1.18 syscalls.master --- syscalls.master 1997/08/29 20:44:26 1.18 +++ syscalls.master 1998/01/03 06:36:01 @@ -1,4 +1,4 @@ - $OpenBSD: syscalls.master,v 1.18 1997/08/29 20:44:26 kstailey Exp $ + $OpenBSD: syscalls.master,v 1.21 1997/12/09 10:59:50 deraadt Exp $ ; $NetBSD: syscalls.master,v 1.17 1996/02/10 17:12:51 christos Exp $ ; @(#)syscalls.master 8.1 (Berkeley) 7/19/93 @@ -234,7 +234,7 @@ 134 NOARGS { int sys_rename(char *from, char *to); } 135 STD { int svr4_sys_uname(struct svr4_utsname* name, \ int dummy); } -136 NOARGS { int sys_setegid(gid_t egid); } +136 STD { int svr4_sys_setegid(gid_t egid); } 137 STD { int svr4_sys_sysconfig(int name); } 138 NOARGS { int sys_adjtime(struct timeval *delta, \ struct timeval *olddelta); } @@ -292,7 +292,8 @@ 184 UNIMPL tsolsys 185 STD { int svr4_sys_acl(char *path, int cmd, int num, \ struct svr4_aclent *buf); } -186 UNIMPL auditsys +186 STD { int svr4_sys_auditsys(int code, int a1, int a2, \ + int a3, int a4, int a5); } 187 UNIMPL processor_bind 188 UNIMPL processor_info 189 UNIMPL p_online