diff -ru linux-2.4.14_orig/arch/arm/kernel/calls.S linux-2.4.14/arch/arm/kernel/calls.S --- linux-2.4.14_orig/arch/arm/kernel/calls.S Mon Oct 8 19:39:18 2001 +++ linux-2.4.14/arch/arm/kernel/calls.S Thu Nov 8 14:48:58 2001 @@ -89,7 +89,7 @@ .long SYMBOL_NAME(sys_sigsuspend_wrapper) .long SYMBOL_NAME(sys_sigpending) .long SYMBOL_NAME(sys_sethostname) -/* 75 */ .long SYMBOL_NAME(sys_setrlimit) +/* 75 */ .long SYMBOL_NAME(sys_old_setrlimit) .long SYMBOL_NAME(sys_old_getrlimit) .long SYMBOL_NAME(sys_getrusage) .long SYMBOL_NAME(sys_gettimeofday) diff -ru linux-2.4.14_orig/arch/cris/kernel/entry.S linux-2.4.14/arch/cris/kernel/entry.S --- linux-2.4.14_orig/arch/cris/kernel/entry.S Mon Oct 8 20:43:54 2001 +++ linux-2.4.14/arch/cris/kernel/entry.S Thu Nov 8 14:48:40 2001 @@ -833,7 +833,7 @@ .long SYMBOL_NAME(sys_sigsuspend) .long SYMBOL_NAME(sys_sigpending) .long SYMBOL_NAME(sys_sethostname) - .long SYMBOL_NAME(sys_setrlimit) /* 75 */ + .long SYMBOL_NAME(sys_old_setrlimit) /* 75 */ .long SYMBOL_NAME(sys_old_getrlimit) .long SYMBOL_NAME(sys_getrusage) .long SYMBOL_NAME(sys_gettimeofday) diff -ru linux-2.4.14_orig/arch/i386/kernel/entry.S linux-2.4.14/arch/i386/kernel/entry.S --- linux-2.4.14_orig/arch/i386/kernel/entry.S Sat Nov 3 02:18:49 2001 +++ linux-2.4.14/arch/i386/kernel/entry.S Thu Nov 8 13:57:47 2001 @@ -471,7 +471,7 @@ .long SYMBOL_NAME(sys_sigsuspend) .long SYMBOL_NAME(sys_sigpending) .long SYMBOL_NAME(sys_sethostname) - .long SYMBOL_NAME(sys_setrlimit) /* 75 */ + .long SYMBOL_NAME(sys_old_setrlimit) /* 75 */ .long SYMBOL_NAME(sys_old_getrlimit) .long SYMBOL_NAME(sys_getrusage) .long SYMBOL_NAME(sys_gettimeofday) diff -ru linux-2.4.14_orig/arch/m68k/kernel/entry.S linux-2.4.14/arch/m68k/kernel/entry.S --- linux-2.4.14_orig/arch/m68k/kernel/entry.S Mon Oct 8 19:39:18 2001 +++ linux-2.4.14/arch/m68k/kernel/entry.S Thu Nov 8 14:46:53 2001 @@ -500,7 +500,7 @@ .long SYMBOL_NAME(sys_sigsuspend) .long SYMBOL_NAME(sys_sigpending) .long SYMBOL_NAME(sys_sethostname) - .long SYMBOL_NAME(sys_setrlimit) /* 75 */ + .long SYMBOL_NAME(sys_old_setrlimit) /* 75 */ .long SYMBOL_NAME(sys_old_getrlimit) .long SYMBOL_NAME(sys_getrusage) .long SYMBOL_NAME(sys_gettimeofday) diff -ru linux-2.4.14_orig/arch/ppc/kernel/misc.S linux-2.4.14/arch/ppc/kernel/misc.S --- linux-2.4.14_orig/arch/ppc/kernel/misc.S Sat Nov 3 02:43:54 2001 +++ linux-2.4.14/arch/ppc/kernel/misc.S Thu Nov 8 14:47:54 2001 @@ -988,7 +988,7 @@ .long sys_sigsuspend .long sys_sigpending .long sys_sethostname - .long sys_setrlimit /* 75 */ + .long sys_old_setrlimit /* 75 */ .long sys_old_getrlimit .long sys_getrusage .long sys_gettimeofday diff -ru linux-2.4.14_orig/arch/s390/kernel/entry.S linux-2.4.14/arch/s390/kernel/entry.S --- linux-2.4.14_orig/arch/s390/kernel/entry.S Thu Oct 11 18:04:57 2001 +++ linux-2.4.14/arch/s390/kernel/entry.S Thu Nov 8 14:48:24 2001 @@ -442,7 +442,7 @@ .long sys_sigsuspend_glue .long sys_sigpending .long sys_sethostname - .long sys_setrlimit /* 75 */ + .long sys_old_setrlimit /* 75 */ .long sys_old_getrlimit .long sys_getrusage .long sys_gettimeofday diff -ru linux-2.4.14_orig/arch/sh/kernel/entry.S linux-2.4.14/arch/sh/kernel/entry.S --- linux-2.4.14_orig/arch/sh/kernel/entry.S Mon Oct 8 19:39:18 2001 +++ linux-2.4.14/arch/sh/kernel/entry.S Thu Nov 8 14:47:13 2001 @@ -1151,7 +1151,7 @@ .long SYMBOL_NAME(sys_sigsuspend) .long SYMBOL_NAME(sys_sigpending) .long SYMBOL_NAME(sys_sethostname) - .long SYMBOL_NAME(sys_setrlimit) /* 75 */ + .long SYMBOL_NAME(sys_old_setrlimit) /* 75 */ .long SYMBOL_NAME(sys_old_getrlimit) .long SYMBOL_NAME(sys_getrusage) .long SYMBOL_NAME(sys_gettimeofday) diff -ru linux-2.4.14_orig/kernel/sys.c linux-2.4.14/kernel/sys.c --- linux-2.4.14_orig/kernel/sys.c Tue Sep 18 23:10:43 2001 +++ linux-2.4.14/kernel/sys.c Thu Nov 8 14:54:11 2001 @@ -1133,6 +1133,39 @@ return 0; } +#if !defined(__ia64__) + +/* + * Analog to sys_old_getrlimit the back compatibility for setrlimit. + */ + +asmlinkage long sys_old_setrlimit(unsigned int resource, struct rlimit *rlim) +{ + struct rlimit new_rlim, *old_rlim; + + if (resource >= RLIM_NLIMITS) + return -EINVAL; + if(copy_from_user(&new_rlim, rlim, sizeof(*rlim))) + return -EFAULT; + old_rlim = current->rlim + resource; + if (((new_rlim.rlim_cur > old_rlim->rlim_max) || + (new_rlim.rlim_max > old_rlim->rlim_max)) && + !capable(CAP_SYS_RESOURCE)) + return -EPERM; + if (resource == RLIMIT_NOFILE) { + if (new_rlim.rlim_cur > NR_OPEN || new_rlim.rlim_max > NR_OPEN) + return -EPERM; + } + if (new_rlim.rlim_cur >= 0x7FFFFFFF) + new_rlim.rlim_cur = RLIM_INFINITY; + if (new_rlim.rlim_max >= 0x7FFFFFFF) + new_rlim.rlim_max = RLIM_INFINITY; + *old_rlim = new_rlim; + return 0; +} + +#endif + /* * It would make sense to put struct rusage in the task_struct, * except that would make the task_struct be *really big*. After