Contents of /trunk/kernel26-alx/patches-2.6.20-r6/0120-2.6.20.20-all-fixes.patch
Parent Directory | Revision Log
Revision 1175 -
(show annotations)
(download)
Thu Oct 14 12:15:46 2010 UTC (13 years, 11 months ago) by niro
File size: 3504 byte(s)
Thu Oct 14 12:15:46 2010 UTC (13 years, 11 months ago) by niro
File size: 3504 byte(s)
-2.6.20-alx-r6 new magellan 0.5.2 kernel
1 | diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S |
2 | index b4aa875..824fe53 100644 |
3 | --- a/arch/x86_64/ia32/ia32entry.S |
4 | +++ b/arch/x86_64/ia32/ia32entry.S |
5 | @@ -38,6 +38,18 @@ |
6 | movq %rax,R8(%rsp) |
7 | .endm |
8 | |
9 | + .macro LOAD_ARGS32 offset |
10 | + movl \offset(%rsp),%r11d |
11 | + movl \offset+8(%rsp),%r10d |
12 | + movl \offset+16(%rsp),%r9d |
13 | + movl \offset+24(%rsp),%r8d |
14 | + movl \offset+40(%rsp),%ecx |
15 | + movl \offset+48(%rsp),%edx |
16 | + movl \offset+56(%rsp),%esi |
17 | + movl \offset+64(%rsp),%edi |
18 | + movl \offset+72(%rsp),%eax |
19 | + .endm |
20 | + |
21 | .macro CFI_STARTPROC32 simple |
22 | CFI_STARTPROC \simple |
23 | CFI_UNDEFINED r8 |
24 | @@ -152,7 +164,7 @@ sysenter_tracesys: |
25 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ |
26 | movq %rsp,%rdi /* &pt_regs -> arg1 */ |
27 | call syscall_trace_enter |
28 | - LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ |
29 | + LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ |
30 | RESTORE_REST |
31 | movl %ebp, %ebp |
32 | /* no need to do an access_ok check here because rbp has been |
33 | @@ -255,7 +267,7 @@ cstar_tracesys: |
34 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ |
35 | movq %rsp,%rdi /* &pt_regs -> arg1 */ |
36 | call syscall_trace_enter |
37 | - LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ |
38 | + LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ |
39 | RESTORE_REST |
40 | movl RSP-ARGOFFSET(%rsp), %r8d |
41 | /* no need to do an access_ok check here because r8 has been |
42 | @@ -333,7 +345,7 @@ ia32_tracesys: |
43 | movq $-ENOSYS,RAX(%rsp) /* really needed? */ |
44 | movq %rsp,%rdi /* &pt_regs -> arg1 */ |
45 | call syscall_trace_enter |
46 | - LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ |
47 | + LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */ |
48 | RESTORE_REST |
49 | jmp ia32_do_syscall |
50 | END(ia32_syscall) |
51 | diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c |
52 | index addc14a..e086073 100644 |
53 | --- a/arch/x86_64/kernel/ptrace.c |
54 | +++ b/arch/x86_64/kernel/ptrace.c |
55 | @@ -224,10 +224,6 @@ static int putreg(struct task_struct *child, |
56 | { |
57 | unsigned long tmp; |
58 | |
59 | - /* Some code in the 64bit emulation may not be 64bit clean. |
60 | - Don't take any chances. */ |
61 | - if (test_tsk_thread_flag(child, TIF_IA32)) |
62 | - value &= 0xffffffff; |
63 | switch (regno) { |
64 | case offsetof(struct user_regs_struct,fs): |
65 | if (value && (value & 3) != 3) |
66 | diff --git a/kernel/sys.c b/kernel/sys.c |
67 | index 6e2101d..475ddbb 100644 |
68 | --- a/kernel/sys.c |
69 | +++ b/kernel/sys.c |
70 | @@ -1916,6 +1916,16 @@ asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim) |
71 | if (retval) |
72 | return retval; |
73 | |
74 | + if (resource == RLIMIT_CPU && new_rlim.rlim_cur == 0) { |
75 | + /* |
76 | + * The caller is asking for an immediate RLIMIT_CPU |
77 | + * expiry. But we use the zero value to mean "it was |
78 | + * never set". So let's cheat and make it one second |
79 | + * instead |
80 | + */ |
81 | + new_rlim.rlim_cur = 1; |
82 | + } |
83 | + |
84 | task_lock(current->group_leader); |
85 | *old_rlim = new_rlim; |
86 | task_unlock(current->group_leader); |
87 | @@ -1937,15 +1947,6 @@ asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim) |
88 | unsigned long rlim_cur = new_rlim.rlim_cur; |
89 | cputime_t cputime; |
90 | |
91 | - if (rlim_cur == 0) { |
92 | - /* |
93 | - * The caller is asking for an immediate RLIMIT_CPU |
94 | - * expiry. But we use the zero value to mean "it was |
95 | - * never set". So let's cheat and make it one second |
96 | - * instead |
97 | - */ |
98 | - rlim_cur = 1; |
99 | - } |
100 | cputime = secs_to_cputime(rlim_cur); |
101 | read_lock(&tasklist_lock); |
102 | spin_lock_irq(¤t->sighand->siglock); |