git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag
[linux-2.6.git]
/
arch
/
x86_64
/
kernel
/
process.c
diff --git
a/arch/x86_64/kernel/process.c
b/arch/x86_64/kernel/process.c
index
e80d5eb
..
f7d3cf3
100644
(file)
--- a/
arch/x86_64/kernel/process.c
+++ b/
arch/x86_64/kernel/process.c
@@
-521,7
+521,8
@@
struct task_struct *__switch_to(struct task_struct *prev_p, struct task_struct *
* sys_execve() executes a new program.
*/
asmlinkage
* sys_execve() executes a new program.
*/
asmlinkage
-long sys_execve(char *name, char **argv,char **envp, struct pt_regs regs)
+long sys_execve(char __user *name, char __user * __user *argv,
+ char __user * __user *envp, struct pt_regs regs)
{
long error;
char * filename;
{
long error;
char * filename;
@@
-550,7
+551,7
@@
asmlinkage long sys_fork(struct pt_regs regs)
return do_fork(SIGCHLD, regs.rsp, ®s, 0, NULL, NULL);
}
return do_fork(SIGCHLD, regs.rsp, ®s, 0, NULL, NULL);
}
-asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, void
*parent_tid, void
*child_tid, struct pt_regs regs)
+asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, void
__user *parent_tid, void __user
*child_tid, struct pt_regs regs)
{
if (!newsp)
newsp = regs.rsp;
{
if (!newsp)
newsp = regs.rsp;
@@
-574,12
+575,6
@@
asmlinkage long sys_vfork(struct pt_regs regs)
NULL, NULL);
}
NULL, NULL);
}
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched ((unsigned long) scheduling_functions_start_here)
-#define last_sched ((unsigned long) scheduling_functions_end_here)
-
unsigned long get_wchan(struct task_struct *p)
{
unsigned long stack;
unsigned long get_wchan(struct task_struct *p)
{
unsigned long stack;
@@
-596,14
+591,12
@@
unsigned long get_wchan(struct task_struct *p)
if (fp < (unsigned long)stack || fp > (unsigned long)stack+THREAD_SIZE)
return 0;
rip = *(u64 *)(fp+8);
if (fp < (unsigned long)stack || fp > (unsigned long)stack+THREAD_SIZE)
return 0;
rip = *(u64 *)(fp+8);
- if (
rip < first_sched || rip >= last_sched
)
+ if (
!in_sched_functions(rip)
)
return rip;
fp = *(u64 *)fp;
} while (count++ < 16);
return 0;
}
return rip;
fp = *(u64 *)fp;
} while (count++ < 16);
return 0;
}
-#undef last_sched
-#undef first_sched
long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
{
long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
{
@@
-672,7
+665,7
@@
long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
rdmsrl(MSR_FS_BASE, base);
} else
base = task->thread.fs;
rdmsrl(MSR_FS_BASE, base);
} else
base = task->thread.fs;
- ret = put_user(base, (unsigned long *)addr);
+ ret = put_user(base, (unsigned long
__user
*)addr);
break;
}
case ARCH_GET_GS: {
break;
}
case ARCH_GET_GS: {
@@
-683,7
+676,7
@@
long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
rdmsrl(MSR_KERNEL_GS_BASE, base);
} else
base = task->thread.gs;
rdmsrl(MSR_KERNEL_GS_BASE, base);
} else
base = task->thread.gs;
- ret = put_user(base, (unsigned long *)addr);
+ ret = put_user(base, (unsigned long
__user
*)addr);
break;
}
break;
}