diff options
author | David Woodhouse <dwmw2@shinybook.infradead.org> | 2005-05-19 11:54:00 +0100 |
---|---|---|
committer | David Woodhouse <dwmw2@shinybook.infradead.org> | 2005-05-19 11:54:00 +0100 |
commit | 7063e6c717f6108c4b3fc3135a516c86ef944870 (patch) | |
tree | ec6eec10b4dc93474100e6e366df028bd3314fda /arch/x86_64/kernel/ptrace.c | |
parent | 7ca0026495dbb644b4e32ede76be44072cb2bc7a (diff) | |
parent | 05d3794aa8bd3b2c9f7920a05003c331cdeb75c5 (diff) | |
download | op-kernel-dev-7063e6c717f6108c4b3fc3135a516c86ef944870.zip op-kernel-dev-7063e6c717f6108c4b3fc3135a516c86ef944870.tar.gz |
Merge with master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'arch/x86_64/kernel/ptrace.c')
-rw-r--r-- | arch/x86_64/kernel/ptrace.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c index e26e86b..60dc9b9 100644 --- a/arch/x86_64/kernel/ptrace.c +++ b/arch/x86_64/kernel/ptrace.c @@ -257,13 +257,13 @@ static int putreg(struct task_struct *child, value &= 0xffff; return 0; case offsetof(struct user_regs_struct,fs_base): - if (!((value >> 48) == 0 || (value >> 48) == 0xffff)) - return -EIO; + if (value >= TASK_SIZE) + return -EIO; child->thread.fs = value; return 0; case offsetof(struct user_regs_struct,gs_base): - if (!((value >> 48) == 0 || (value >> 48) == 0xffff)) - return -EIO; + if (value >= TASK_SIZE) + return -EIO; child->thread.gs = value; return 0; case offsetof(struct user_regs_struct, eflags): @@ -277,6 +277,11 @@ static int putreg(struct task_struct *child, return -EIO; value &= 0xffff; break; + case offsetof(struct user_regs_struct, rip): + /* Check if the new RIP address is canonical */ + if (value >= TASK_SIZE) + return -EIO; + break; } put_stack_long(child, regno - sizeof(struct pt_regs), value); return 0; |