aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/ptrace_32.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/ptrace_32.c b/arch/x86/kernel/ptrace_32.c
index 5aca84ef26d..26071305de2 100644
--- a/arch/x86/kernel/ptrace_32.c
+++ b/arch/x86/kernel/ptrace_32.c
@@ -55,6 +55,12 @@ static int putreg(struct task_struct *child,
55 if (value && (value & 3) != 3) 55 if (value && (value & 3) != 3)
56 return -EIO; 56 return -EIO;
57 child->thread.gs = value; 57 child->thread.gs = value;
58 if (child == current)
59 /*
60 * The user-mode %gs is not affected by
61 * kernel entry, so we must update the CPU.
62 */
63 loadsegment(gs, value);
58 return 0; 64 return 0;
59 case DS: 65 case DS:
60 case ES: 66 case ES:
@@ -104,6 +110,8 @@ static unsigned long getreg(struct task_struct *child, unsigned long regno)
104 break; 110 break;
105 case GS: 111 case GS:
106 retval = child->thread.gs; 112 retval = child->thread.gs;
113 if (child == current)
114 savesegment(gs, retval);
107 break; 115 break;
108 case DS: 116 case DS:
109 case ES: 117 case ES: