stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Andy Lutomirski <luto@amacapital.net>,
	Ingo Molnar <mingo@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH 4.1 37/78] Revert x86 sigcontext cleanups
Date: Fri, 11 Sep 2015 15:49:38 -0700	[thread overview]
Message-ID: <20150911224611.586428882@linuxfoundation.org> (raw)
In-Reply-To: <20150911224606.758437370@linuxfoundation.org>

4.1-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Linus Torvalds <torvalds@linux-foundation.org>

commit ed596cde9425509ec6ce88e19f03e9b13b6f518b upstream.

This reverts commits 9a036b93a344 ("x86/signal/64: Remove 'fs' and 'gs'
from sigcontext") and c6f2062935c8 ("x86/signal/64: Fix SS handling for
signals delivered to 64-bit programs").

They were cleanups, but they break dosemu by changing the signal return
behavior (and removing 'fs' and 'gs' from the sigcontext struct - while
not actually changing any behavior - causes build problems).

Reported-and-tested-by: Stas Sergeev <stsp@list.ru>
Acked-by: Andy Lutomirski <luto@amacapital.net>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/include/asm/sigcontext.h      |    6 +++---
 arch/x86/include/uapi/asm/sigcontext.h |   21 +++------------------
 arch/x86/kernel/signal.c               |   26 +++++++++++---------------
 3 files changed, 17 insertions(+), 36 deletions(-)

--- a/arch/x86/include/asm/sigcontext.h
+++ b/arch/x86/include/asm/sigcontext.h
@@ -57,9 +57,9 @@ struct sigcontext {
 	unsigned long ip;
 	unsigned long flags;
 	unsigned short cs;
-	unsigned short __pad2;	/* Was called gs, but was always zero. */
-	unsigned short __pad1;	/* Was called fs, but was always zero. */
-	unsigned short ss;
+	unsigned short gs;
+	unsigned short fs;
+	unsigned short __pad0;
 	unsigned long err;
 	unsigned long trapno;
 	unsigned long oldmask;
--- a/arch/x86/include/uapi/asm/sigcontext.h
+++ b/arch/x86/include/uapi/asm/sigcontext.h
@@ -177,24 +177,9 @@ struct sigcontext {
 	__u64 rip;
 	__u64 eflags;		/* RFLAGS */
 	__u16 cs;
-
-	/*
-	 * Prior to 2.5.64 ("[PATCH] x86-64 updates for 2.5.64-bk3"),
-	 * Linux saved and restored fs and gs in these slots.  This
-	 * was counterproductive, as fsbase and gsbase were never
-	 * saved, so arch_prctl was presumably unreliable.
-	 *
-	 * If these slots are ever needed for any other purpose, there
-	 * is some risk that very old 64-bit binaries could get
-	 * confused.  I doubt that many such binaries still work,
-	 * though, since the same patch in 2.5.64 also removed the
-	 * 64-bit set_thread_area syscall, so it appears that there is
-	 * no TLS API that works in both pre- and post-2.5.64 kernels.
-	 */
-	__u16 __pad2;		/* Was gs. */
-	__u16 __pad1;		/* Was fs. */
-
-	__u16 ss;
+	__u16 gs;
+	__u16 fs;
+	__u16 __pad0;
 	__u64 err;
 	__u64 trapno;
 	__u64 oldmask;
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -93,8 +93,15 @@ int restore_sigcontext(struct pt_regs *r
 		COPY(r15);
 #endif /* CONFIG_X86_64 */
 
+#ifdef CONFIG_X86_32
 		COPY_SEG_CPL3(cs);
 		COPY_SEG_CPL3(ss);
+#else /* !CONFIG_X86_32 */
+		/* Kernel saves and restores only the CS segment register on signals,
+		 * which is the bare minimum needed to allow mixed 32/64-bit code.
+		 * App's signal handler can save/restore other segments if needed. */
+		COPY_SEG_CPL3(cs);
+#endif /* CONFIG_X86_32 */
 
 		get_user_ex(tmpflags, &sc->flags);
 		regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
@@ -154,9 +161,8 @@ int setup_sigcontext(struct sigcontext _
 #else /* !CONFIG_X86_32 */
 		put_user_ex(regs->flags, &sc->flags);
 		put_user_ex(regs->cs, &sc->cs);
-		put_user_ex(0, &sc->__pad2);
-		put_user_ex(0, &sc->__pad1);
-		put_user_ex(regs->ss, &sc->ss);
+		put_user_ex(0, &sc->gs);
+		put_user_ex(0, &sc->fs);
 #endif /* CONFIG_X86_32 */
 
 		put_user_ex(fpstate, &sc->fpstate);
@@ -450,19 +456,9 @@ static int __setup_rt_frame(int sig, str
 
 	regs->sp = (unsigned long)frame;
 
-	/*
-	 * Set up the CS and SS registers to run signal handlers in
-	 * 64-bit mode, even if the handler happens to be interrupting
-	 * 32-bit or 16-bit code.
-	 *
-	 * SS is subtle.  In 64-bit mode, we don't need any particular
-	 * SS descriptor, but we do need SS to be valid.  It's possible
-	 * that the old SS is entirely bogus -- this can happen if the
-	 * signal we're trying to deliver is #GP or #SS caused by a bad
-	 * SS value.
-	 */
+	/* Set up the CS register to run signal handlers in 64-bit mode,
+	   even if the handler happens to be interrupting 32-bit code. */
 	regs->cs = __USER_CS;
-	regs->ss = __USER_DS;
 
 	return 0;
 }



  parent reply	other threads:[~2015-09-11 22:50 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-11 22:49 [PATCH 4.1 00/78] 4.1.6-stable review Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 01/78] ipc,sem: fix use after free on IPC_RMID after a task using same semaphore set exits Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 02/78] ipc/sem.c: update/correct memory barriers Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 03/78] mm/hwpoison: fix page refcount of unknown non LRU page Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 04/78] mm/hwpoison: fix fail isolate hugetlbfs page w/ refcount held Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 05/78] clk: pxa: pxa3xx: fix CKEN register access Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 08/78] rsi: Fix failure to load firmware after memory leak fix and fix the leak Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 09/78] perf: Fix fasync handling on inherited events Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 10/78] perf: Fix running time accounting Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 11/78] perf: Fix double-free of the AUX buffer Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 12/78] perf: Fix PERF_EVENT_IOC_PERIOD migration race Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 13/78] iwlwifi: pcie: fix prepare card flow Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 14/78] rtlwifi: rtl8723be: Add module parameter for MSI interrupts Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 15/78] rtlwifi: Fix NULL dereference when PCI driver used as an AP Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 16/78] x86/xen: build "Xen PV" APIC driver for domU as well Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 17/78] xen/xenbus: Dont leak memory when unmapping the ring on HVM backend Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 18/78] dm thin metadata: delete btrees when releasing metadata snapshot Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 19/78] localmodconfig: Use Kbuild files too Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 20/78] EDAC, ppc4xx: Access mci->csrows array elements properly Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 21/78] HID: hid-input: Fix accessing freed memory during device disconnect Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 22/78] HID: uclogic: fix limit in uclogic_tablet_enable() Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 23/78] drm/radeon: add new OLAND pci id Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 24/78] drm/vmwgfx: Fix execbuf locking issues Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 25/78] libfc: Fix fc_exch_recv_req() error path Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 26/78] libfc: Fix fc_fcp_cleanup_each_cmd() Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 27/78] ARM: imx6: correct i.MX6 PCIe interrupt routing Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 28/78] ARM: dts: omap243x: Fix broken pbias device creation Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 29/78] ARM: dts: dra7: " Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 30/78] ARM: dts: OMAP4: " Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 31/78] ARM: dts: OMAP5: " Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 32/78] ARM: 8385/1: VDSO: group link options Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 33/78] ARM: 8384/1: VDSO: force use of BFD linker Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 34/78] ARM: v7 setup function should invalidate L1 cache Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 35/78] ARM: invalidate L1 before enabling coherency Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 36/78] mfd: arizona: Fix initialisation of the PM runtime Greg Kroah-Hartman
2015-09-11 22:49 ` Greg Kroah-Hartman [this message]
2015-09-11 22:49 ` [PATCH 4.1 38/78] regmap: regcache-rbtree: Clean new present bits on present bitmap resize Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 39/78] MIPS: Fix seccomp syscall argument for MIPS64 Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 40/78] libiscsi: Fix host busy blocking during connection teardown Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 41/78] sd: Fix maximum I/O size for BLOCK_PC requests Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 42/78] crypto: nx - respect sg limit bounds when building sg lists for SHA Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 43/78] crypto: caam - fix memory corruption in ahash_final_ctx Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 44/78] Revert "libata-eh: Set information field for autosense" Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 45/78] Revert "libata: Implement support for sense data reporting" Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 46/78] Revert "libata: Implement NCQ autosense" Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 48/78] ALSA: usb-audio: Fix runtime PM unbalance Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 49/78] ALSA: hda - Fix the white noise on Dell laptop Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 50/78] ALSA: usb: Add native DSD support for Gustard DAC-X20U Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 51/78] ALSA: hda - Shutdown CX20722 on reboot/free to avoid spurious noises Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 52/78] ALSA: hda - Check all inputs for is_active_nid_for_any() Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 53/78] ALSA: hda - Fix path power activation Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 54/78] ALSA: hda: fix possible NULL dereference Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 55/78] mac80211: fix invalid read in minstrel_sort_best_tp_rates() Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 56/78] target/iscsi: Fix double free of a TUR followed by a solicited NOPOUT Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 57/78] PCI: Dont use 64-bit bus addresses on PA-RISC Greg Kroah-Hartman
2015-09-11 22:49 ` [PATCH 4.1 58/78] Input: gpio_keys_polled - request GPIO pin as input Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 59/78] drm/atmel-hlcdc: Compile suspend/resume for PM_SLEEP only Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 60/78] drm/i915: Flag the execlists context object as dirty after every use Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 63/78] 9p: ensure err is initialized to 0 in p9_client_read/write Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 64/78] irqchip/crossbar: Restore the irq_set_type() mechanism Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 65/78] irqchip/crossbar: Restore the mask on suspend behaviour Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 66/78] irqchip/crossbar: Restore set_wake functionality Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 67/78] ARM: OMAP: wakeupgen: Restore the irq_set_type() mechanism Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 68/78] genirq: Dont return ENOSYS in irq_chip_retrigger_hierarchy Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 69/78] genirq: Introduce irq_chip_set_type_parent() helper Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 71/78] can: pcan_usb: dont provide CAN FD bittimings by non-FD adapters Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 72/78] Add factory recertified Crucial M500s to blacklist Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 73/78] fnic: Use the local variable instead of I/O flag to acquire io_req_lock in fnic_queuecommand() to avoid deadloack Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 74/78] arm64: KVM: Fix host crash when injecting a fault into a 32bit guest Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 75/78] arm64: perf: fix unassigned cpu_pmu->plat_device when probing PMU PPIs Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 76/78] x86/xen: make CONFIG_XEN depend on CONFIG_X86_LOCAL_APIC Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 77/78] x86/apic: Fix fallout from x2apic cleanup Greg Kroah-Hartman
2015-09-11 22:50 ` [PATCH 4.1 78/78] x86/idle: Restore trace_cpu_idle to mwait_idle() calls Greg Kroah-Hartman
2015-09-11 23:15 ` [PATCH 4.1 00/78] 4.1.6-stable review Christoph Biedl
2015-09-12  0:59   ` Greg KH
2015-09-11 23:16 ` Holger Hoffstätte
2015-09-12  0:59   ` Greg KH
2015-09-12  0:16 ` Shuah Khan
2015-09-12  1:00   ` Greg Kroah-Hartman
2015-09-12  1:00 ` [PATCH 4.1 00/78] 4.1.7-stable review Greg Kroah-Hartman
2015-09-12  2:10   ` Shuah Khan
2015-09-12  4:39     ` Greg Kroah-Hartman
2015-09-12  4:25   ` Guenter Roeck
2015-09-12  4:39     ` Greg Kroah-Hartman
2015-09-12  8:53   ` Sudip Mukherjee
2015-09-12 15:55     ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150911224611.586428882@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mingo@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).