Re: [PATCH v2] x86: Load __USER_DS into DS/ES after resume
From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date: 2015-06-15 16:14:06
On Sun, 2015-06-14 at 09:49 +0200, Ingo Molnar wrote:
quoted hunk ↗ jump to hunk
* Linus Torvalds [off-list ref] wrote:quoted
On Jun 13, 2015 8:56 PM, "Ingo Molnar" [off-list ref] wrote:quoted
Ok, so something like the patch below, right? movw $__KERNEL_DS, %ax movw %ax, %ss - movw %ax, %ds - movw %ax, %es movw %ax, %fs movw %ax, %gs + movw $__KERNEL_DS, %ax + movw %ax, %ds + movw %ax, %es.. except with less cut-and-paste bugs. That second KERNEL should be USER.Yeah, doh :-/ Updated patch below. Thanks, Ingo ===== arch/x86/kernel/acpi/wakeup_32.S | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)diff --git a/arch/x86/kernel/acpi/wakeup_32.S b/arch/x86/kernel/acpi/wakeup_32.S index 665c6b7d2ea9..0c26b1b44e51 100644 --- a/arch/x86/kernel/acpi/wakeup_32.S +++ b/arch/x86/kernel/acpi/wakeup_32.S@@ -12,11 +12,13 @@ ENTRY(wakeup_pmode_return) wakeup_pmode_return: movw $__KERNEL_DS, %ax movw %ax, %ss - movw %ax, %ds - movw %ax, %es movw %ax, %fs movw %ax, %gs + movw $__USER_DS, %ax + movw %ax, %ds + movw %ax, %es + # reload the gdt, as we need the full 32 bit address lidt saved_idt lldt saved_ldt
We did suggest this patch to our customer and initial test results showed no crash. But they didn't merge this because they did months of testing with my earlier patch with load/save segment of ds, which will store restore _USER_DS. I tried this patch again today on another 32 bit system and STR didn't break, so if you apply this change, during next kernel upgrade this will be picked up. Thanks to you, Andy, Brian for helping on this issue. - Srinivas