2001-10-29 16:37:42

by Christoph Hellwig

[permalink] [raw]
Subject: [PATCH] syscall exports - against 2.4.14-pre3

Hi Linus,

once again the syscall export patch - back to EXPORT_SYMBOL
vs EXPORT_SYMBOL_GPL due to some complaints, more syscalls
as I dropped sys_call_table abuse in linux-abi.

Could you _please_ apply it - it is badly needed for foreign
personalities compiled as modules.

Christoph

P.S. Linux-ABI is at ftp.openlinux.org:/pub/people/hch/linux-abi -
no need to ask again :)
--
Of course it doesn't work. We've performed a software upgrade.

diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-alpha/syscall.h linux/include/asm-alpha/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-alpha/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-alpha/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-arm/syscall.h linux/include/asm-arm/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-arm/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-arm/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-cris/syscall.h linux/include/asm-cris/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-cris/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-cris/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-i386/syscall.h linux/include/asm-i386/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-i386/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-i386/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,31 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#include <linux/sched.h> /* struct pt_regs */
+#include <asm/signal.h> /* old_sigset_t */
+
+
+/* arch/i386/kernel/ldt.c */
+extern asmlinkage int sys_modify_ldt(int, void *, unsigned long);
+
+/* arch/i386/kernel/process.c */
+extern asmlinkage int sys_fork(struct pt_regs regs);
+
+/* arch/i386/kernel/ptrace.c */
+extern asmlinkage int sys_ptrace(long request, long pid,
+ long addr, long data);
+
+/* arch/i386/kernel/signal.c */
+extern int sigsuspend1(struct pt_regs *regs, old_sigset_t mask);
+
+/* arch/i386/kernel/sys_i386.c */
+extern asmlinkage int sys_ipc(uint call, int first, int second,
+ int third, void *ptr, long fifth);
+extern asmlinkage int sys_pause(void);
+extern asmlinkage int sys_pipe(unsigned long * fildes);
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-ia64/syscall.h linux/include/asm-ia64/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-ia64/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-ia64/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-m68k/syscall.h linux/include/asm-m68k/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-m68k/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-m68k/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-mips/syscall.h linux/include/asm-mips/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-mips/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-mips/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-mips64/syscall.h linux/include/asm-mips64/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-mips64/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-mips64/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-parisc/syscall.h linux/include/asm-parisc/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-parisc/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-parisc/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-ppc/syscall.h linux/include/asm-ppc/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-ppc/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-ppc/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-s390/syscall.h linux/include/asm-s390/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-s390/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-s390/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-s390x/syscall.h linux/include/asm-s390x/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-s390x/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-s390x/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-sh/syscall.h linux/include/asm-sh/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-sh/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-sh/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-sparc/syscall.h linux/include/asm-sparc/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-sparc/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-sparc/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/asm-sparc64/syscall.h linux/include/asm-sparc64/syscall.h
--- ../master/linux-2.4.14-pre3/include/asm-sparc64/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/asm-sparc64/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,8 @@
+#ifndef _ASM_SYSCALL_H
+#define _ASM_SYSCALL_H
+
+/*
+ * Prototypes for architecture-specific Linux syscalls.
+ */
+
+#endif /* _ASM_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/include/linux/syscall.h linux/include/linux/syscall.h
--- ../master/linux-2.4.14-pre3/include/linux/syscall.h Thu Jan 1 01:00:00 1970
+++ linux/include/linux/syscall.h Mon Oct 29 17:22:02 2001
@@ -0,0 +1,288 @@
+#ifndef _LINUX_SYSCALL_H
+#define _LINUX_SYSCALL_H
+
+/*
+ * Prototypes for Linux syscalls.
+ *
+ * Maybe this could be automatically generated from some kind of
+ * master file (like BSD's syscalls.master), so it is always coherent
+ * to the actual syscalls (which may as well be arch-specific).
+ */
+
+#include <asm/syscall.h>
+
+struct itimerval;
+struct msghdr;
+struct pollfd;
+struct rlimit;
+struct sigaction;
+struct sockaddr;
+struct statfs;
+struct timespec;
+struct timeval;
+struct timezone;
+struct tms;
+struct utimbuf;
+
+
+/* fs/exec.c */
+extern asmlinkage long sys_uselib(const char * library);
+
+/* fs/buffer.c */
+extern asmlinkage long sys_sync(void);
+extern asmlinkage long sys_fsync(unsigned int fd);
+extern asmlinkage long sys_fdatasync(unsigned int fd);
+
+/* fs/fcntl.c */
+extern asmlinkage long sys_dup(unsigned int fildes);
+extern asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd);
+extern asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd,
+ unsigned long arg);
+#if (BITS_PER_LONG == 32)
+extern asmlinkage long sys_fcntl64(unsigned int fd, unsigned int cmd,
+ unsigned long arg);
+#endif
+
+/* fs/ioctl.c */
+extern asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, void *);
+
+/* fs/namei.c */
+extern asmlinkage long sys_link(const char * oldname, const char * newname);
+extern asmlinkage long sys_mkdir(const char * pathname, int mode);
+extern asmlinkage long sys_mknod(const char * filename, int mode, dev_t dev);
+extern asmlinkage long sys_rename(const char * oldname, const char * newname);
+extern asmlinkage long sys_rmdir(const char * pathname);
+extern asmlinkage long sys_symlink(const char * oldname, const char * newname);
+extern asmlinkage long sys_unlink(const char * pathname);
+
+/* fs/namespace.c */
+extern asmlinkage long sys_umount(char * name, int flags);
+extern asmlinkage long sys_oldumount(char * name);
+extern asmlinkage long sys_mount(char * dev_name, char * dir_name,
+ char * type, unsigned long flags, void * data);
+extern asmlinkage long sys_pivot_root(const char *new_root,
+ const char *put_old);
+
+/* fs/open.c */
+extern asmlinkage long sys_access(const char * filename, int mode);
+extern asmlinkage long sys_chdir(const char * filename);
+extern asmlinkage long sys_fchdir(unsigned int fd);
+extern asmlinkage long sys_chroot(const char * filename);
+extern asmlinkage long sys_chmod(const char * filename, mode_t mode);
+extern asmlinkage long sys_fchmod(unsigned int fd, mode_t mode);
+extern asmlinkage long sys_chown(const char * filename, uid_t user,
+ gid_t group);
+extern asmlinkage long sys_lchown(const char * filename, uid_t user,
+ gid_t group);
+extern asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group);
+extern asmlinkage long sys_close(unsigned int fd);
+#if !defined(__alpha__)
+extern asmlinkage long sys_creat(const char * pathname, int mode);
+#endif
+extern asmlinkage long sys_open(const char * filename, int flags, int mode);
+extern asmlinkage long sys_statfs(const char * path, struct statfs * buf);
+extern asmlinkage long sys_fstatfs(unsigned int fd, struct statfs * buf);
+extern asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length);
+extern asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length);
+extern asmlinkage long sys_truncate(const char * path, unsigned long length);
+extern asmlinkage long sys_truncate64(const char * path, loff_t length);
+#if !defined(__alpha__) && !defined(__ia64__)
+extern asmlinkage long sys_utime(char * filename, struct utimbuf * times);
+#endif
+extern asmlinkage long sys_utimes(char * filename, struct timeval * utimes);
+extern asmlinkage long sys_vhangup(void);
+
+
+/* fs/read_write.c */
+extern asmlinkage off_t sys_lseek(unsigned int fd, off_t offset,
+ unsigned int origin);
+#if !defined(__alpha__)
+extern asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,
+ unsigned long offset_low, loff_t * result, unsigned int origin);
+#endif
+extern asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count);
+extern asmlinkage ssize_t sys_readv(unsigned long fd,
+ const struct iovec * vector, unsigned long count);
+extern asmlinkage ssize_t sys_pread(unsigned int fd, char * buf,
+ size_t count, loff_t pos);
+extern asmlinkage ssize_t sys_pwrite(unsigned int fd, const char * buf,
+ size_t count, loff_t pos);
+extern asmlinkage ssize_t sys_write(unsigned int fd, const char * buf,
+ size_t count);
+extern asmlinkage ssize_t sys_writev(unsigned long fd,
+ const struct iovec * vector, unsigned long count);
+
+
+
+/* fs/readdir.c */
+extern asmlinkage int old_readdir(unsigned int fd, void * dirent,
+ unsigned int count);
+
+/* fs/select.c */
+extern asmlinkage long sys_poll(struct pollfd * ufds, unsigned int nfds,
+ long timeout);
+extern asmlinkage int sys_select(int, fd_set *, fd_set *, fd_set *,
+ struct timeval *);
+
+/* fs/stat.c */
+extern asmlinkage long sys_readlink(const char * path, char * buf,
+ int bufsiz);
+
+/* fs/super.c */
+extern asmlinkage long sys_sysfs(int option, unsigned long arg1,
+ unsigned long arg2);
+
+/* kernel/acct.c */
+extern asmlinkage long sys_acct(const char *name);
+
+/* kernel/exit.c */
+extern asmlinkage long sys_exit(int error_code);
+
+/* kernel/itimer.c */
+extern asmlinkage long sys_getitimer(int which, struct itimerval *value);
+extern asmlinkage long sys_setitimer(int which, struct itimerval *value,
+ struct itimerval *ovalue);
+
+/* kernel/sched.c */
+#if !defined(__alpha__)
+extern asmlinkage long sys_nice(int increment);
+#endif
+extern asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
+ struct sched_param *param);
+extern asmlinkage long sys_sched_setparam(pid_t pid,
+ struct sched_param *param);
+extern asmlinkage long sys_sched_getscheduler(pid_t pid);
+extern asmlinkage long sys_sched_getparam(pid_t pid,
+ struct sched_param *param);
+extern asmlinkage long sys_sched_yield(void);
+extern asmlinkage long sys_sched_get_priority_max(int policy);
+extern asmlinkage long sys_sched_get_priority_min(int policy);
+extern asmlinkage long sys_sched_rr_get_interval(pid_t pid,
+ struct timespec *interval);
+
+/* kernel/signal.c */
+extern asmlinkage long sys_kill(int pid, int sig);
+extern asmlinkage long sys_rt_sigaction(int sig, const struct sigaction *act,
+ struct sigaction *oact, size_t sigsetsize);
+extern asmlinkage long sys_rt_sigpending(sigset_t *set, size_t sigsetsize);
+extern asmlinkage long sys_rt_sigprocmask(int how, sigset_t *set,
+ sigset_t *oset, size_t sigsetsize);
+extern asmlinkage long sys_rt_sigtimedwait(const sigset_t *uthese,
+ siginfo_t *uinfo, const struct timespec *uts,
+ size_t sigsetsize);
+extern asmlinkage long sys_sigaltstack(const stack_t *uss, stack_t *uoss);
+extern asmlinkage long sys_sigpending(old_sigset_t *set);
+extern asmlinkage long sys_sigprocmask(int how, old_sigset_t *set,
+ old_sigset_t *oset);
+extern asmlinkage int sys_sigsuspend(int history0, int history1,
+ old_sigset_t mask);
+
+/* kernel/sys.c */
+extern asmlinkage long sys_gethostname(char *name, int len);
+extern asmlinkage long sys_sethostname(char *name, int len);
+extern asmlinkage long sys_setdomainname(char *name, int len);
+extern asmlinkage long sys_getrlimit(unsigned int resource,
+ struct rlimit *rlim);
+extern asmlinkage long sys_setsid(void);
+extern asmlinkage long sys_getsid(pid_t pid);
+extern asmlinkage long sys_getpgid(pid_t pid);
+extern asmlinkage long sys_setpgid(pid_t pid, pid_t pgid);
+extern asmlinkage long sys_getgroups(int gidsetsize, gid_t *grouplist);
+extern asmlinkage long sys_setgroups(int gidsetsize, gid_t *grouplist);
+extern asmlinkage long sys_setpriority(int which, int who, int niceval);
+extern asmlinkage long sys_getpriority(int which, int who);
+extern asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd,
+ void * arg);
+extern asmlinkage long sys_setgid(gid_t gid);
+extern asmlinkage long sys_setuid(uid_t uid);
+extern asmlinkage long sys_times(struct tms * tbuf);
+extern asmlinkage long sys_umask(int mask);
+extern asmlinkage long sys_prctl(int option, unsigned long arg2,
+ unsigned long arg3, unsigned long arg4, unsigned long arg5);
+extern asmlinkage long sys_setreuid(uid_t ruid, uid_t euid);
+extern asmlinkage long sys_setregid(gid_t rgid, gid_t egid);
+
+/* kernel/time.c */
+extern asmlinkage long sys_gettimeofday(struct timeval *tv,
+ struct timezone *tz);
+extern asmlinkage long sys_settimeofday(struct timeval *tv,
+ struct timezone *tz);
+extern asmlinkage long sys_stime(int * tptr);
+extern asmlinkage long sys_time(int * tloc);
+
+/* kernel/timer.c */
+#if !defined(__alpha__) && !defined(__ia64__)
+extern asmlinkage unsigned long sys_alarm(unsigned int seconds);
+#endif
+#if !defined(__alpha__)
+extern asmlinkage long sys_getpid(void);
+extern asmlinkage long sys_getppid(void);
+extern asmlinkage long sys_getuid(void);
+extern asmlinkage long sys_geteuid(void);
+extern asmlinkage long sys_getgid(void);
+extern asmlinkage long sys_getegid(void);
+#endif
+extern asmlinkage long sys_gettid(void);
+extern asmlinkage long sys_nanosleep(struct timespec *rqtp,
+ struct timespec *rmtp);
+
+#if defined(CONFIG_UID16)
+/* kernel/uid16.c */
+extern asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid);
+extern asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid);
+extern asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t *grouplist);
+extern asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t *grouplist);
+#endif /* CONFIG_UID16 */
+
+/* mm/filemap.c */
+extern asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t *offset,
+ size_t count);
+extern asmlinkage long sys_msync(unsigned long start, size_t len, int flags);
+extern asmlinkage long sys_madvise(unsigned long start, size_t len,
+ int behavior);
+extern asmlinkage long sys_mincore(unsigned long start, size_t len,
+ unsigned char * vec);
+
+/* mm/mmap.c */
+extern asmlinkage unsigned long sys_brk(unsigned long brk);
+extern asmlinkage long sys_munmap(unsigned long addr, size_t len);
+
+/* mm/mprotect.c */
+extern asmlinkage long sys_mprotect(unsigned long start, size_t len,
+ unsigned long prot);
+
+/* net/socket.c */
+extern asmlinkage long sys_socket(int family, int type, int protocol);
+extern asmlinkage long sys_socketpair(int family, int type,
+ int protocol, int usockvec[2]);
+extern asmlinkage long sys_bind(int fd, struct sockaddr *umyaddr,
+ int addrlen);
+extern asmlinkage long sys_listen(int fd, int backlog);
+extern asmlinkage long sys_accept(int fd, struct sockaddr *upeer_sockaddr,
+ int *upeer_addrlen);
+extern asmlinkage long sys_connect(int fd, struct sockaddr *uservaddr,
+ int addrlen);
+extern asmlinkage long sys_getsockname(int fd, struct sockaddr *usockaddr,
+ int *usockaddr_len);
+extern asmlinkage long sys_getpeername(int fd, struct sockaddr *usockaddr,
+ int *usockaddr_len);
+extern asmlinkage long sys_sendto(int fd, void * buff, size_t len,
+ unsigned flags, struct sockaddr *addr,
+ int addr_len);
+extern asmlinkage long sys_send(int fd, void * buff, size_t len,
+ unsigned flags);
+extern asmlinkage long sys_recvfrom(int fd, void * ubuf, size_t size,
+ unsigned flags, struct sockaddr *addr,
+ int *addr_len);
+extern asmlinkage long sys_setsockopt(int fd, int level, int optname,
+ char *optval, int optlen);
+extern asmlinkage long sys_getsockopt(int fd, int level, int optname,
+ char *optval, int *optlen);
+extern asmlinkage long sys_shutdown(int fd, int how);
+extern asmlinkage long sys_sendmsg(int fd, struct msghdr *msg,
+ unsigned flags);
+extern asmlinkage long sys_recvmsg(int fd, struct msghdr *msg,
+ unsigned int flags);
+extern asmlinkage long sys_socketcall(int call, unsigned long *args);
+
+#endif /* _LINUX_SYSCALL_H */
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/kernel/Makefile linux/kernel/Makefile
--- ../master/linux-2.4.14-pre3/kernel/Makefile Sun Sep 23 21:21:03 2001
+++ linux/kernel/Makefile Mon Oct 29 17:22:34 2001
@@ -9,12 +9,13 @@

O_TARGET := kernel.o

-export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o exec_domain.o printk.o
+export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o printk.o \
+ exec_domain.o syscall_ksyms.o

obj-y = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
module.o exit.o itimer.o info.o time.o softirq.o resource.o \
sysctl.o acct.o capability.o ptrace.o timer.o user.o \
- signal.o sys.o kmod.o context.o
+ signal.o sys.o kmod.o context.o syscall_ksyms.o

obj-$(CONFIG_UID16) += uid16.o
obj-$(CONFIG_MODULES) += ksyms.o
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/kernel/ksyms.c linux/kernel/ksyms.c
--- ../master/linux-2.4.14-pre3/kernel/ksyms.c Thu Oct 25 19:05:49 2001
+++ linux/kernel/ksyms.c Mon Oct 29 17:22:02 2001
@@ -147,7 +147,6 @@
EXPORT_SYMBOL(__user_walk);
EXPORT_SYMBOL(lookup_one_len);
EXPORT_SYMBOL(lookup_hash);
-EXPORT_SYMBOL(sys_close);
EXPORT_SYMBOL(dcache_lock);
EXPORT_SYMBOL(d_alloc_root);
EXPORT_SYMBOL(d_delete);
diff -uNr -Xdontdiff ../master/linux-2.4.14-pre3/kernel/syscall_ksyms.c linux/kernel/syscall_ksyms.c
--- ../master/linux-2.4.14-pre3/kernel/syscall_ksyms.c Thu Jan 1 01:00:00 1970
+++ linux/kernel/syscall_ksyms.c Mon Oct 29 17:22:02 2001
@@ -0,0 +1,178 @@
+/*
+ * Exports all Linux syscalls.
+ * Christoph Hellwig ([email protected]), 2001
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/syscall.h>
+#include <linux/msg.h>
+#include <linux/sem.h>
+#include <linux/shm.h>
+
+EXPORT_SYMBOL(sys_uselib);
+EXPORT_SYMBOL(sys_sync);
+EXPORT_SYMBOL(sys_fsync);
+EXPORT_SYMBOL(sys_fdatasync);
+EXPORT_SYMBOL(sys_dup);
+EXPORT_SYMBOL(sys_dup2);
+EXPORT_SYMBOL(sys_fcntl);
+#if (BITS_PER_LONG == 32)
+EXPORT_SYMBOL(sys_fcntl64);
+#endif
+EXPORT_SYMBOL(sys_ioctl);
+EXPORT_SYMBOL(sys_link);
+EXPORT_SYMBOL(sys_mkdir);
+EXPORT_SYMBOL(sys_mknod);
+EXPORT_SYMBOL(sys_rename);
+EXPORT_SYMBOL(sys_rmdir);
+EXPORT_SYMBOL(sys_symlink);
+EXPORT_SYMBOL(sys_unlink);
+EXPORT_SYMBOL(sys_umount);
+EXPORT_SYMBOL(sys_oldumount);
+EXPORT_SYMBOL(sys_mount);
+EXPORT_SYMBOL(sys_pivot_root);
+EXPORT_SYMBOL(sys_access);
+EXPORT_SYMBOL(sys_chdir);
+EXPORT_SYMBOL(sys_fchdir);
+EXPORT_SYMBOL(sys_chroot);
+EXPORT_SYMBOL(sys_chmod);
+EXPORT_SYMBOL(sys_fchmod);
+EXPORT_SYMBOL(sys_chown);
+EXPORT_SYMBOL(sys_lchown);
+EXPORT_SYMBOL(sys_fchown);
+EXPORT_SYMBOL(sys_close);
+#if !defined(__alpha__)
+EXPORT_SYMBOL(sys_creat);
+#endif
+EXPORT_SYMBOL(sys_open);
+EXPORT_SYMBOL(sys_statfs);
+EXPORT_SYMBOL(sys_fstatfs);
+EXPORT_SYMBOL(sys_ftruncate);
+EXPORT_SYMBOL(sys_ftruncate64);
+EXPORT_SYMBOL(sys_truncate);
+EXPORT_SYMBOL(sys_truncate64);
+#if !defined(__alpha__) && !defined(__ia64__)
+EXPORT_SYMBOL(sys_utime);
+#endif
+EXPORT_SYMBOL(sys_utimes);
+EXPORT_SYMBOL(sys_vhangup);
+#if !defined(__alpha__)
+EXPORT_SYMBOL(sys_lseek);
+#endif
+EXPORT_SYMBOL(sys_llseek);
+EXPORT_SYMBOL(sys_read);
+EXPORT_SYMBOL(sys_readv);
+EXPORT_SYMBOL(sys_pread);
+EXPORT_SYMBOL(sys_pwrite);
+EXPORT_SYMBOL(sys_write);
+EXPORT_SYMBOL(sys_writev);
+EXPORT_SYMBOL(old_readdir);
+EXPORT_SYMBOL(sys_poll);
+EXPORT_SYMBOL(sys_select);
+EXPORT_SYMBOL(sys_readlink);
+EXPORT_SYMBOL(sys_sysfs);
+EXPORT_SYMBOL(sys_acct);
+EXPORT_SYMBOL(sys_exit);
+EXPORT_SYMBOL(sys_getitimer);
+EXPORT_SYMBOL(sys_setitimer);
+EXPORT_SYMBOL(sys_gettimeofday);
+EXPORT_SYMBOL(sys_settimeofday);
+EXPORT_SYMBOL(sys_stime);
+EXPORT_SYMBOL(sys_time);
+#if !defined(__alpha__)
+EXPORT_SYMBOL(sys_nice);
+#endif
+EXPORT_SYMBOL(sys_sched_setscheduler);
+EXPORT_SYMBOL(sys_sched_setparam);
+EXPORT_SYMBOL(sys_sched_getscheduler);
+EXPORT_SYMBOL(sys_sched_getparam);
+EXPORT_SYMBOL(sys_sched_yield);
+EXPORT_SYMBOL(sys_sched_get_priority_max);
+EXPORT_SYMBOL(sys_sched_get_priority_min);
+EXPORT_SYMBOL(sys_sched_rr_get_interval);
+EXPORT_SYMBOL(sys_kill);
+EXPORT_SYMBOL(sys_rt_sigaction);
+EXPORT_SYMBOL(sys_rt_sigpending);
+EXPORT_SYMBOL(sys_rt_sigprocmask);
+EXPORT_SYMBOL(sys_rt_sigtimedwait);
+EXPORT_SYMBOL(sys_sigaltstack);
+EXPORT_SYMBOL(sys_sigpending);
+EXPORT_SYMBOL(sys_sigprocmask);
+EXPORT_SYMBOL(sys_sigsuspend);
+EXPORT_SYMBOL(sys_gethostname);
+EXPORT_SYMBOL(sys_sethostname);
+EXPORT_SYMBOL(sys_setdomainname);
+EXPORT_SYMBOL(sys_getrlimit);
+EXPORT_SYMBOL(sys_setsid);
+EXPORT_SYMBOL(sys_getsid);
+EXPORT_SYMBOL(sys_getpgid);
+EXPORT_SYMBOL(sys_setpgid);
+EXPORT_SYMBOL(sys_getgroups);
+EXPORT_SYMBOL(sys_setgroups);
+EXPORT_SYMBOL(sys_setpriority);
+EXPORT_SYMBOL(sys_getpriority);
+EXPORT_SYMBOL(sys_reboot);
+EXPORT_SYMBOL(sys_setgid);
+EXPORT_SYMBOL(sys_setuid);
+EXPORT_SYMBOL(sys_times);
+EXPORT_SYMBOL(sys_umask);
+EXPORT_SYMBOL(sys_prctl);
+EXPORT_SYMBOL(sys_setreuid);
+EXPORT_SYMBOL(sys_setregid);
+#if !defined(__alpha__) && !defined(__ia64__)
+EXPORT_SYMBOL(sys_alarm);
+#endif
+#if !defined(__alpha__)
+EXPORT_SYMBOL(sys_getpid);
+EXPORT_SYMBOL(sys_getppid);
+EXPORT_SYMBOL(sys_getuid);
+EXPORT_SYMBOL(sys_geteuid);
+EXPORT_SYMBOL(sys_getgid);
+EXPORT_SYMBOL(sys_getegid);
+#endif
+EXPORT_SYMBOL(sys_gettid);
+EXPORT_SYMBOL(sys_nanosleep);
+#if defined(CONFIG_UID16)
+EXPORT_SYMBOL(sys_setreuid16);
+EXPORT_SYMBOL(sys_setregid16);
+EXPORT_SYMBOL(sys_getgroups16);
+EXPORT_SYMBOL(sys_setgroups16);
+#endif
+EXPORT_SYMBOL(sys_wait4);
+EXPORT_SYMBOL(sys_sendfile);
+EXPORT_SYMBOL(sys_brk);
+EXPORT_SYMBOL(sys_msync);
+EXPORT_SYMBOL(sys_madvise);
+EXPORT_SYMBOL(sys_mincore);
+EXPORT_SYMBOL(sys_munmap);
+EXPORT_SYMBOL(sys_mprotect);
+EXPORT_SYMBOL(sys_socket);
+EXPORT_SYMBOL(sys_socketpair);
+EXPORT_SYMBOL(sys_bind);
+EXPORT_SYMBOL(sys_listen);
+EXPORT_SYMBOL(sys_accept);
+EXPORT_SYMBOL(sys_connect);
+EXPORT_SYMBOL(sys_getsockname);
+EXPORT_SYMBOL(sys_getpeername);
+EXPORT_SYMBOL(sys_sendto);
+EXPORT_SYMBOL(sys_send);
+EXPORT_SYMBOL(sys_recvfrom);
+EXPORT_SYMBOL(sys_setsockopt);
+EXPORT_SYMBOL(sys_getsockopt);
+EXPORT_SYMBOL(sys_shutdown);
+EXPORT_SYMBOL(sys_sendmsg);
+EXPORT_SYMBOL(sys_recvmsg);
+EXPORT_SYMBOL(sys_socketcall);
+
+EXPORT_SYMBOL(sys_msgget);
+EXPORT_SYMBOL(sys_msgsnd);
+EXPORT_SYMBOL(sys_msgrcv);
+EXPORT_SYMBOL(sys_msgctl);
+EXPORT_SYMBOL(sys_semget);
+EXPORT_SYMBOL(sys_semop);
+EXPORT_SYMBOL(sys_semctl);
+EXPORT_SYMBOL(sys_shmget);
+EXPORT_SYMBOL(sys_shmat);
+EXPORT_SYMBOL(sys_shmdt);
+EXPORT_SYMBOL(sys_shmctl);


2001-10-30 10:12:41

by Mike Jagdis

[permalink] [raw]
Subject: Re: [PATCH] syscall exports - against 2.4.14-pre3

Christoph Hellwig wrote:
> Hi Linus,
>
> once again the syscall export patch - back to EXPORT_SYMBOL
> vs EXPORT_SYMBOL_GPL due to some complaints, more syscalls
> as I dropped sys_call_table abuse in linux-abi.

The whole *point* of the sys_call_table "abuse" was to avoid having
the whole damn lot in the export list!

As a side effect it meant that any module that patched the
sys_call_table (funky tracers, security hot-fixes, whatever)
would work seamlessly with non-Linux binaries.

> Could you _please_ apply it - it is badly needed for foreign
> personalities compiled as modules.

I can't see why? iBCS always was a module for years before
linux-abi dumped it back in a humungous kernel patch.

Mike

2001-10-30 10:39:23

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] syscall exports - against 2.4.14-pre3

On Tue, Oct 30, 2001 at 10:12:50AM +0000, Mike Jagdis wrote:
> Christoph Hellwig wrote:
> > Hi Linus,
> >
> > once again the syscall export patch - back to EXPORT_SYMBOL
> > vs EXPORT_SYMBOL_GPL due to some complaints, more syscalls
> > as I dropped sys_call_table abuse in linux-abi.
>
> The whole *point* of the sys_call_table "abuse" was to avoid having
> the whole damn lot in the export list!

It is not only ugly over belief but also unportable.

For example the mips port does not have a sys_call_table array at all,
on IA64 funktion pointer do _NOT_ fit into an unsigned long so at least
the prototype is wrong if it works at all.

> As a side effect it meant that any module that patched the
> sys_call_table (funky tracers, security hot-fixes, whatever)
> would work seamlessly with non-Linux binaries.

This is not only racy (no locking!) but also a loophole for binary
modules to do all kinds of crap (see http://www.sysinternals.com/linux/
utilities/filemon.shtml for details). In early 2.5 I will submit a patch
to remove the export, let's see wether it will be accepted.

>
> > Could you _please_ apply it - it is badly needed for foreign
> > personalities compiled as modules.
>
> I can't see why? iBCS always was a module for years before
> linux-abi dumped it back in a humungous kernel patch.

"Because we did it all the time it's right".

Of course it worked - that doesn't mean it's a good idea.
Arjan might want to comment on how gcc 2.96+ liked the old concept..

Christoph

--
Of course it doesn't work. We've performed a software upgrade.

2001-10-30 10:44:23

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH] syscall exports - against 2.4.14-pre3

On Tue, Oct 30, 2001 at 11:37:31AM +0100, Christoph Hellwig wrote:
> On Tue, Oct 30, 2001 at 10:12:50AM +0000, Mike Jagdis wrote:
> > > once again the syscall export patch - back to EXPORT_SYMBOL

> "Because we did it all the time it's right".
>
> Of course it worked - that doesn't mean it's a good idea.
> Arjan might want to comment on how gcc 2.96+ liked the old concept..

gcc 2.96 and 3.0 _rightfully_ object to calling a function pointer with a
different number of arguments than the function pointer prototype is. Even
if gcc didn't object to it, I consider it butt-ugly and you also just lost
any and all type checking the compiler can help you with. During the change
to calling the real functions instead of the basicaly untyped function
pointers, quite a few ibcs bugs were fixed just because the arguments were
wrong. I'm with Christoph on this 100%.

Greetings,
Arjan van de Ven

2001-10-30 15:15:01

by John Levon

[permalink] [raw]
Subject: Re: [PATCH] syscall exports - against 2.4.14-pre3

On Tue, Oct 30, 2001 at 11:37:31AM +0100, Christoph Hellwig wrote:

> This is not only racy (no locking!) but also a loophole for binary
> modules to do all kinds of crap (see http://www.sysinternals.com/linux/
> utilities/filemon.shtml for details). In early 2.5 I will submit a patch
> to remove the export, let's see wether it will be accepted.

This means that "funky" modules that do overload system calls will break
irredeemably. Yes, it's ugly, and dangerous, but is definitely useful in
a small number of situations.

What would nice is a "transparent" binfmt a module could add, that always is
first on the binfmt chain and lets things pass through,
plus some method to intercept syscalls nicely.

A transparent binfmt could be ref-counted also, avoiding the SMP module unload
races in these types of modules.

Before you ask, yes I tried the user-space methods of tracing syscall behaviour.
It was not only unreliable and racy, but slow as hell.

regards
john

--
"If the software that a company produces isn't reliable, adding a bunch of
'Mother, may I' rules to the language and the code won't fix it."
- Pete Becker