All of lore.kernel.org
 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>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Willy Tarreau <w@1wt.eu>, Ingo Molnar <mingo@kernel.org>
Subject: [PATCH 3.10 02/38] x86/tls: Validate TLS entries to protect espfix
Date: Tue,  6 Jan 2015 17:50:14 -0800	[thread overview]
Message-ID: <20150107014952.866254269@linuxfoundation.org> (raw)
In-Reply-To: <20150107014952.440109372@linuxfoundation.org>

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

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

From: Andy Lutomirski <luto@amacapital.net>

commit 41bdc78544b8a93a9c6814b8bbbfef966272abbe upstream.

Installing a 16-bit RW data segment into the GDT defeats espfix.
AFAICT this will not affect glibc, Wine, or dosemu at all.

Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Willy Tarreau <w@1wt.eu>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kernel/tls.c |   23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

--- a/arch/x86/kernel/tls.c
+++ b/arch/x86/kernel/tls.c
@@ -27,6 +27,21 @@ static int get_free_idx(void)
 	return -ESRCH;
 }
 
+static bool tls_desc_okay(const struct user_desc *info)
+{
+	if (LDT_empty(info))
+		return true;
+
+	/*
+	 * espfix is required for 16-bit data segments, but espfix
+	 * only works for LDT segments.
+	 */
+	if (!info->seg_32bit)
+		return false;
+
+	return true;
+}
+
 static void set_tls_desc(struct task_struct *p, int idx,
 			 const struct user_desc *info, int n)
 {
@@ -66,6 +81,9 @@ int do_set_thread_area(struct task_struc
 	if (copy_from_user(&info, u_info, sizeof(info)))
 		return -EFAULT;
 
+	if (!tls_desc_okay(&info))
+		return -EINVAL;
+
 	if (idx == -1)
 		idx = info.entry_number;
 
@@ -192,6 +210,7 @@ int regset_tls_set(struct task_struct *t
 {
 	struct user_desc infobuf[GDT_ENTRY_TLS_ENTRIES];
 	const struct user_desc *info;
+	int i;
 
 	if (pos >= GDT_ENTRY_TLS_ENTRIES * sizeof(struct user_desc) ||
 	    (pos % sizeof(struct user_desc)) != 0 ||
@@ -205,6 +224,10 @@ int regset_tls_set(struct task_struct *t
 	else
 		info = infobuf;
 
+	for (i = 0; i < count / sizeof(struct user_desc); i++)
+		if (!tls_desc_okay(info + i))
+			return -EINVAL;
+
 	set_tls_desc(target,
 		     GDT_ENTRY_TLS_MIN + (pos / sizeof(struct user_desc)),
 		     info, count / sizeof(struct user_desc));



  parent reply	other threads:[~2015-01-07  1:52 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-07  1:50 [PATCH 3.10 00/38] 3.10.64-stable review Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 01/38] isofs: Fix infinite looping over CE entries Greg Kroah-Hartman
2015-01-07  1:50 ` Greg Kroah-Hartman [this message]
2015-01-07  1:50 ` [PATCH 3.10 03/38] x86/tls: Disallow unusual TLS segments Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 04/38] x86_64, switch_to(): Load TLS descriptors before switching DS and ES Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 05/38] x86, kvm: Clear paravirt_enabled on KVM guests for espfix32s benefit Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 06/38] md/bitmap: always wait for writes on unplug Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 07/38] mfd: tc6393xb: Fail ohci suspend if full state restore is required Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 08/38] mmc: block: add newline to sysfs display of force_ro Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 09/38] megaraid_sas: corrected return of wait_event from abort frame path Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 10/38] nfs41: fix nfs4_proc_layoutget error handling Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 11/38] dm bufio: fix memleak when using a dm_buffers inline bio Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 12/38] dm space map metadata: fix sm_bootstrap_get_nr_blocks() Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 13/38] x86/tls: Dont validate lm in set_thread_area() after all Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 14/38] isofs: Fix unchecked printing of ER records Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 15/38] KEYS: Fix stale key registration at error path Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 17/38] mac80211: free management frame keys when removing station Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 18/38] mnt: Implicitly add MNT_NODEV on remount when it was implicitly added by mount Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 19/38] mnt: Update unprivileged remount test Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 20/38] umount: Disallow unprivileged mount force Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 21/38] groups: Consolidate the setgroups permission checks Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 22/38] userns: Document what the invariant required for safe unprivileged mappings Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 23/38] userns: Dont allow setgroups until a gid mapping has been setablished Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 24/38] userns: Dont allow unprivileged creation of gid mappings Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 25/38] userns: Check euid no fsuid when establishing an unprivileged uid mapping Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 26/38] userns: Only allow the creator of the userns unprivileged mappings Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 27/38] userns: Rename id_map_mutex to userns_state_mutex Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 28/38] userns: Add a knob to disable setgroups on a per user namespace basis Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 29/38] userns: Allow setting gid_maps without privilege when setgroups is disabled Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 30/38] userns: Unbreak the unprivileged remount tests Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 31/38] crypto: af_alg - fix backlog handling Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 32/38] ncpfs: return proper error from NCP_IOC_SETROOT ioctl Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 33/38] exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 34/38] udf: Verify symlink size before loading it Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 35/38] eCryptfs: Force RO mount when encrypted view is enabled Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 36/38] eCryptfs: Remove buggy and unnecessary write in file name decode routine Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 37/38] Btrfs: do not move em to modified list when unpinning Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.10 38/38] Btrfs: fix fs corruption on transaction abort if device supports discard Greg Kroah-Hartman
2015-01-07 13:38 ` [PATCH 3.10 00/38] 3.10.64-stable review Guenter Roeck
2015-01-07 23:33 ` Shuah Khan

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=20150107014952.866254269@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=hpa@zytor.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mingo@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=w@1wt.eu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.