patch-2.4.22 linux-2.4.22/arch/x86_64/ia32/sys_ia32.c
Next file: linux-2.4.22/arch/x86_64/kernel/Makefile
Previous file: linux-2.4.22/arch/x86_64/ia32/ia32_ioctl.c
Back to the patch index
Back to the overall index
- Lines: 96
- Date:
2003-08-25 04:44:40.000000000 -0700
- Orig file:
linux-2.4.21/arch/x86_64/ia32/sys_ia32.c
- Orig date:
2003-06-13 07:51:32.000000000 -0700
diff -urN linux-2.4.21/arch/x86_64/ia32/sys_ia32.c linux-2.4.22/arch/x86_64/ia32/sys_ia32.c
@@ -16,7 +16,7 @@
*
* This file assumes that there is a hole at the end of user address space.
*
- * $Id: sys_ia32.c,v 1.54 2003/03/24 09:28:26 ak Exp $
+ * $Id: sys_ia32.c,v 1.58 2003/05/09 17:21:17 ak Exp $
*/
#include <linux/config.h>
@@ -845,6 +845,7 @@
ret = -EINVAL;
if (n < 0)
goto out_nofds;
+ size = FDS_BYTES(n);
if (n > current->files->max_fdset)
n = current->files->max_fdset;
@@ -855,7 +856,6 @@
* long-words.
*/
ret = -ENOMEM;
- size = FDS_BYTES(n);
bits = kmalloc(6 * size, GFP_KERNEL);
if (!bits)
goto out_nofds;
@@ -1062,8 +1062,8 @@
#define RESOURCE32(x) ((x > RLIM_INFINITY32) ? RLIM_INFINITY32 : x)
struct rlimit32 {
- int rlim_cur;
- int rlim_max;
+ unsigned rlim_cur;
+ unsigned rlim_max;
};
extern asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit *rlim);
@@ -1080,6 +1080,10 @@
ret = sys_getrlimit(resource, &r);
set_fs(old_fs);
if (!ret) {
+ if (r.rlim_cur >= 0xffffffff)
+ r.rlim_cur = RLIM_INFINITY32;
+ if (r.rlim_max >= 0xffffffff)
+ r.rlim_max = RLIM_INFINITY32;
if (verify_area(VERIFY_WRITE, rlim, sizeof(struct rlimit32)) ||
__put_user(RESOURCE32(r.rlim_cur), &rlim->rlim_cur) ||
__put_user(RESOURCE32(r.rlim_max), &rlim->rlim_max))
@@ -1099,9 +1103,13 @@
old_fs = get_fs();
set_fs(KERNEL_DS);
- ret = sys_old_getrlimit(resource, &r);
+ ret = sys_getrlimit(resource, &r);
set_fs(old_fs);
if (!ret) {
+ if (r.rlim_cur >= 0x7fffffff)
+ r.rlim_cur = RLIM_INFINITY32;
+ if (r.rlim_max >= 0x7fffffff)
+ r.rlim_max = RLIM_INFINITY32;
if (verify_area(VERIFY_WRITE, rlim, sizeof(struct rlimit32)) ||
__put_user(r.rlim_cur, &rlim->rlim_cur) ||
__put_user(r.rlim_max, &rlim->rlim_max))
@@ -1494,7 +1502,11 @@
u32 totalswap;
u32 freeswap;
unsigned short procs;
- char _f[22];
+ unsigned short pad;
+ u32 totalhigh;
+ u32 freehigh;
+ u32 mem_unit;
+ char _f[20-2*sizeof(u32)-sizeof(int)];
};
extern asmlinkage long sys_sysinfo(struct sysinfo *info);
@@ -1520,7 +1532,10 @@
__put_user (s.bufferram, &info->bufferram) ||
__put_user (s.totalswap, &info->totalswap) ||
__put_user (s.freeswap, &info->freeswap) ||
- __put_user (s.procs, &info->procs))
+ __put_user (s.procs, &info->procs) ||
+ __put_user (s.totalhigh, &info->totalhigh) ||
+ __put_user (s.freehigh, &info->freehigh) ||
+ __put_user (s.mem_unit, &info->mem_unit))
return -EFAULT;
return 0;
}
@@ -2550,7 +2565,7 @@
static int __init ia32_init (void)
{
- printk("IA32 emulation $Id: sys_ia32.c,v 1.54 2003/03/24 09:28:26 ak Exp $\n");
+ printk("IA32 emulation $Id: sys_ia32.c,v 1.58 2003/05/09 17:21:17 ak Exp $\n");
ia32_exec_domain.signal_map = default_exec_domain.signal_map;
ia32_exec_domain.signal_invmap = default_exec_domain.signal_invmap;
register_exec_domain(&ia32_exec_domain);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)