|
@@ -113,6 +113,27 @@ asmlinkage int sys_sigaltstack(unsigned long bx)
|
|
|
return do_sigaltstack(uss, uoss, regs->sp);
|
|
|
}
|
|
|
|
|
|
+#define COPY(x) { \
|
|
|
+ err |= __get_user(regs->x, &sc->x); \
|
|
|
+}
|
|
|
+
|
|
|
+#define COPY_SEG(seg) { \
|
|
|
+ unsigned short tmp; \
|
|
|
+ err |= __get_user(tmp, &sc->seg); \
|
|
|
+ regs->seg = tmp; \
|
|
|
+}
|
|
|
+
|
|
|
+#define COPY_SEG_STRICT(seg) { \
|
|
|
+ unsigned short tmp; \
|
|
|
+ err |= __get_user(tmp, &sc->seg); \
|
|
|
+ regs->seg = tmp | 3; \
|
|
|
+}
|
|
|
+
|
|
|
+#define GET_SEG(seg) { \
|
|
|
+ unsigned short tmp; \
|
|
|
+ err |= __get_user(tmp, &sc->seg); \
|
|
|
+ loadsegment(seg, tmp); \
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
* Do a signal return; undo the signal stack.
|
|
@@ -126,23 +147,6 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
|
|
|
/* Always make any pending restarted system calls return -EINTR */
|
|
|
current_thread_info()->restart_block.fn = do_no_restart_syscall;
|
|
|
|
|
|
-#define COPY(x) err |= __get_user(regs->x, &sc->x)
|
|
|
-
|
|
|
-#define COPY_SEG(seg) \
|
|
|
- { unsigned short tmp; \
|
|
|
- err |= __get_user(tmp, &sc->seg); \
|
|
|
- regs->seg = tmp; }
|
|
|
-
|
|
|
-#define COPY_SEG_STRICT(seg) \
|
|
|
- { unsigned short tmp; \
|
|
|
- err |= __get_user(tmp, &sc->seg); \
|
|
|
- regs->seg = tmp|3; }
|
|
|
-
|
|
|
-#define GET_SEG(seg) \
|
|
|
- { unsigned short tmp; \
|
|
|
- err |= __get_user(tmp, &sc->seg); \
|
|
|
- loadsegment(seg, tmp); }
|
|
|
-
|
|
|
GET_SEG(gs);
|
|
|
COPY_SEG(fs);
|
|
|
COPY_SEG(es);
|