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
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
arch
/
i386
/
kernel
/
signal.c
diff --git
a/arch/i386/kernel/signal.c
b/arch/i386/kernel/signal.c
index
0f187c9
..
13755e1
100644
(file)
--- a/
arch/i386/kernel/signal.c
+++ b/
arch/i386/kernel/signal.c
@@
-21,6
+21,7
@@
#include <linux/suspend.h>
#include <linux/tracehook.h>
#include <linux/elf.h>
#include <linux/suspend.h>
#include <linux/tracehook.h>
#include <linux/elf.h>
+#include <linux/binfmts.h>
#include <asm/processor.h>
#include <asm/ucontext.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
#include <asm/ucontext.h>
#include <asm/uaccess.h>
@@
-128,7
+129,7
@@
restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax
X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \
X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF)
X86_EFLAGS_TF | X86_EFLAGS_SF | X86_EFLAGS_ZF | \
X86_EFLAGS_AF | X86_EFLAGS_PF | X86_EFLAGS_CF)
-
GET
_SEG(gs);
+
COPY
_SEG(gs);
GET_SEG(fs);
COPY_SEG(es);
COPY_SEG(ds);
GET_SEG(fs);
COPY_SEG(es);
COPY_SEG(ds);
@@
-244,9
+245,7
@@
setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate,
{
int tmp, err = 0;
{
int tmp, err = 0;
- tmp = 0;
- savesegment(gs, tmp);
- err |= __put_user(tmp, (unsigned int __user *)&sc->gs);
+ err |= __put_user(regs->xgs, (unsigned int __user *)&sc->gs);
savesegment(fs, tmp);
err |= __put_user(tmp, (unsigned int __user *)&sc->fs);
savesegment(fs, tmp);
err |= __put_user(tmp, (unsigned int __user *)&sc->fs);
@@
-351,7
+350,10
@@
static int setup_frame(int sig, struct k_sigaction *ka,
goto give_sigsegv;
}
goto give_sigsegv;
}
- restorer = (void *)VDSO_SYM(&__kernel_sigreturn);
+ if (current->binfmt->hasvdso)
+ restorer = (void *)VDSO_SYM(&__kernel_sigreturn);
+ else
+ restorer = (void *)&frame->retcode;
if (ka->sa.sa_flags & SA_RESTORER)
restorer = ka->sa.sa_restorer;
if (ka->sa.sa_flags & SA_RESTORER)
restorer = ka->sa.sa_restorer;