linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Slaby <jslaby@suse.cz>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org, Andy Lutomirski <luto@amacapital.net>,
	Andi Kleen <andi@firstfloor.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Ingo Molnar <mingo@kernel.org>
Subject: Re: [PATCH 3.18 04/84] x86_64, switch_to(): Load TLS descriptors before switching DS and ES
Date: Wed, 07 Jan 2015 16:26:37 +0100	[thread overview]
Message-ID: <54AD502D.7070107@suse.cz> (raw)
In-Reply-To: <20150107014029.158919470@linuxfoundation.org>

On 01/07/2015, 02:49 AM, Greg Kroah-Hartman wrote:
> 3.18-stable review patch.  If anyone has any objections, please let me know.

Greg, Andi raised an objection against this one for 3.12 which still
holds here and for other trees:
https://www.mail-archive.com/stable@vger.kernel.org/msg106471.html

Quoting:
On 01/06/2015, 07:53 PM, Andi Kleen wrote:
> IMHO this is not stable material. Significant risk you broke
> something obscure, and it's not clear it fixes any real problem.
>
> At least wait some more time first.

Thanks.

> ------------------
> 
> From: Andy Lutomirski <luto@amacapital.net>
> 
> commit f647d7c155f069c1a068030255c300663516420e upstream.
> 
> Otherwise, if buggy user code points DS or ES into the TLS
> array, they would be corrupted after a context switch.
> 
> This also significantly improves the comments and documents some
> gotchas in the code.
> 
> Before this patch, the both tests below failed.  With this
> patch, the es test passes, although the gsbase test still fails.
> 
>  ----- begin es test -----
> 
> /*
>  * Copyright (c) 2014 Andy Lutomirski
>  * GPL v2
>  */
> 
> static unsigned short GDT3(int idx)
> {
> 	return (idx << 3) | 3;
> }
> 
> static int create_tls(int idx, unsigned int base)
> {
> 	struct user_desc desc = {
> 		.entry_number    = idx,
> 		.base_addr       = base,
> 		.limit           = 0xfffff,
> 		.seg_32bit       = 1,
> 		.contents        = 0, /* Data, grow-up */
> 		.read_exec_only  = 0,
> 		.limit_in_pages  = 1,
> 		.seg_not_present = 0,
> 		.useable         = 0,
> 	};
> 
> 	if (syscall(SYS_set_thread_area, &desc) != 0)
> 		err(1, "set_thread_area");
> 
> 	return desc.entry_number;
> }
> 
> int main()
> {
> 	int idx = create_tls(-1, 0);
> 	printf("Allocated GDT index %d\n", idx);
> 
> 	unsigned short orig_es;
> 	asm volatile ("mov %%es,%0" : "=rm" (orig_es));
> 
> 	int errors = 0;
> 	int total = 1000;
> 	for (int i = 0; i < total; i++) {
> 		asm volatile ("mov %0,%%es" : : "rm" (GDT3(idx)));
> 		usleep(100);
> 
> 		unsigned short es;
> 		asm volatile ("mov %%es,%0" : "=rm" (es));
> 		asm volatile ("mov %0,%%es" : : "rm" (orig_es));
> 		if (es != GDT3(idx)) {
> 			if (errors == 0)
> 				printf("[FAIL]\tES changed from 0x%hx to 0x%hx\n",
> 				       GDT3(idx), es);
> 			errors++;
> 		}
> 	}
> 
> 	if (errors) {
> 		printf("[FAIL]\tES was corrupted %d/%d times\n", errors, total);
> 		return 1;
> 	} else {
> 		printf("[OK]\tES was preserved\n");
> 		return 0;
> 	}
> }
> 
>  ----- end es test -----
> 
>  ----- begin gsbase test -----
> 
> /*
>  * gsbase.c, a gsbase test
>  * Copyright (c) 2014 Andy Lutomirski
>  * GPL v2
>  */
> 
> static unsigned char *testptr, *testptr2;
> 
> static unsigned char read_gs_testvals(void)
> {
> 	unsigned char ret;
> 	asm volatile ("movb %%gs:%1, %0" : "=r" (ret) : "m" (*testptr));
> 	return ret;
> }
> 
> int main()
> {
> 	int errors = 0;
> 
> 	testptr = mmap((void *)0x200000000UL, 1, PROT_READ | PROT_WRITE,
> 		       MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
> 	if (testptr == MAP_FAILED)
> 		err(1, "mmap");
> 
> 	testptr2 = mmap((void *)0x300000000UL, 1, PROT_READ | PROT_WRITE,
> 		       MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
> 	if (testptr2 == MAP_FAILED)
> 		err(1, "mmap");
> 
> 	*testptr = 0;
> 	*testptr2 = 1;
> 
> 	if (syscall(SYS_arch_prctl, ARCH_SET_GS,
> 		    (unsigned long)testptr2 - (unsigned long)testptr) != 0)
> 		err(1, "ARCH_SET_GS");
> 
> 	usleep(100);
> 
> 	if (read_gs_testvals() == 1) {
> 		printf("[OK]\tARCH_SET_GS worked\n");
> 	} else {
> 		printf("[FAIL]\tARCH_SET_GS failed\n");
> 		errors++;
> 	}
> 
> 	asm volatile ("mov %0,%%gs" : : "r" (0));
> 
> 	if (read_gs_testvals() == 0) {
> 		printf("[OK]\tWriting 0 to gs worked\n");
> 	} else {
> 		printf("[FAIL]\tWriting 0 to gs failed\n");
> 		errors++;
> 	}
> 
> 	usleep(100);
> 
> 	if (read_gs_testvals() == 0) {
> 		printf("[OK]\tgsbase is still zero\n");
> 	} else {
> 		printf("[FAIL]\tgsbase was corrupted\n");
> 		errors++;
> 	}
> 
> 	return errors == 0 ? 0 : 1;
> }
> 
>  ----- end gsbase test -----
> 
> Signed-off-by: Andy Lutomirski <luto@amacapital.net>
> Cc: Andi Kleen <andi@firstfloor.org>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Link: http://lkml.kernel.org/r/509d27c9fec78217691c3dad91cec87e1006b34a.1418075657.git.luto@amacapital.net
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> ---
>  arch/x86/kernel/process_64.c |  101 +++++++++++++++++++++++++++++++------------
>  1 file changed, 73 insertions(+), 28 deletions(-)
> 
> --- a/arch/x86/kernel/process_64.c
> +++ b/arch/x86/kernel/process_64.c
> @@ -283,24 +283,9 @@ __switch_to(struct task_struct *prev_p,
>  
>  	fpu = switch_fpu_prepare(prev_p, next_p, cpu);
>  
> -	/*
> -	 * Reload esp0, LDT and the page table pointer:
> -	 */
> +	/* Reload esp0 and ss1. */
>  	load_sp0(tss, next);
>  
> -	/*
> -	 * Switch DS and ES.
> -	 * This won't pick up thread selector changes, but I guess that is ok.
> -	 */
> -	savesegment(es, prev->es);
> -	if (unlikely(next->es | prev->es))
> -		loadsegment(es, next->es);
> -
> -	savesegment(ds, prev->ds);
> -	if (unlikely(next->ds | prev->ds))
> -		loadsegment(ds, next->ds);
> -
> -
>  	/* We must save %fs and %gs before load_TLS() because
>  	 * %fs and %gs may be cleared by load_TLS().
>  	 *
> @@ -309,41 +294,101 @@ __switch_to(struct task_struct *prev_p,
>  	savesegment(fs, fsindex);
>  	savesegment(gs, gsindex);
>  
> +	/*
> +	 * Load TLS before restoring any segments so that segment loads
> +	 * reference the correct GDT entries.
> +	 */
>  	load_TLS(next, cpu);
>  
>  	/*
> -	 * Leave lazy mode, flushing any hypercalls made here.
> -	 * This must be done before restoring TLS segments so
> -	 * the GDT and LDT are properly updated, and must be
> -	 * done before math_state_restore, so the TS bit is up
> -	 * to date.
> +	 * Leave lazy mode, flushing any hypercalls made here.  This
> +	 * must be done after loading TLS entries in the GDT but before
> +	 * loading segments that might reference them, and and it must
> +	 * be done before math_state_restore, so the TS bit is up to
> +	 * date.
>  	 */
>  	arch_end_context_switch(next_p);
>  
> +	/* Switch DS and ES.
> +	 *
> +	 * Reading them only returns the selectors, but writing them (if
> +	 * nonzero) loads the full descriptor from the GDT or LDT.  The
> +	 * LDT for next is loaded in switch_mm, and the GDT is loaded
> +	 * above.
> +	 *
> +	 * We therefore need to write new values to the segment
> +	 * registers on every context switch unless both the new and old
> +	 * values are zero.
> +	 *
> +	 * Note that we don't need to do anything for CS and SS, as
> +	 * those are saved and restored as part of pt_regs.
> +	 */
> +	savesegment(es, prev->es);
> +	if (unlikely(next->es | prev->es))
> +		loadsegment(es, next->es);
> +
> +	savesegment(ds, prev->ds);
> +	if (unlikely(next->ds | prev->ds))
> +		loadsegment(ds, next->ds);
> +
>  	/*
>  	 * Switch FS and GS.
>  	 *
> -	 * Segment register != 0 always requires a reload.  Also
> -	 * reload when it has changed.  When prev process used 64bit
> -	 * base always reload to avoid an information leak.
> +	 * These are even more complicated than FS and GS: they have
> +	 * 64-bit bases are that controlled by arch_prctl.  Those bases
> +	 * only differ from the values in the GDT or LDT if the selector
> +	 * is 0.
> +	 *
> +	 * Loading the segment register resets the hidden base part of
> +	 * the register to 0 or the value from the GDT / LDT.  If the
> +	 * next base address zero, writing 0 to the segment register is
> +	 * much faster than using wrmsr to explicitly zero the base.
> +	 *
> +	 * The thread_struct.fs and thread_struct.gs values are 0
> +	 * if the fs and gs bases respectively are not overridden
> +	 * from the values implied by fsindex and gsindex.  They
> +	 * are nonzero, and store the nonzero base addresses, if
> +	 * the bases are overridden.
> +	 *
> +	 * (fs != 0 && fsindex != 0) || (gs != 0 && gsindex != 0) should
> +	 * be impossible.
> +	 *
> +	 * Therefore we need to reload the segment registers if either
> +	 * the old or new selector is nonzero, and we need to override
> +	 * the base address if next thread expects it to be overridden.
> +	 *
> +	 * This code is unnecessarily slow in the case where the old and
> +	 * new indexes are zero and the new base is nonzero -- it will
> +	 * unnecessarily write 0 to the selector before writing the new
> +	 * base address.
> +	 *
> +	 * Note: This all depends on arch_prctl being the only way that
> +	 * user code can override the segment base.  Once wrfsbase and
> +	 * wrgsbase are enabled, most of this code will need to change.
>  	 */
>  	if (unlikely(fsindex | next->fsindex | prev->fs)) {
>  		loadsegment(fs, next->fsindex);
> +
>  		/*
> -		 * Check if the user used a selector != 0; if yes
> -		 *  clear 64bit base, since overloaded base is always
> -		 *  mapped to the Null selector
> +		 * If user code wrote a nonzero value to FS, then it also
> +		 * cleared the overridden base address.
> +		 *
> +		 * XXX: if user code wrote 0 to FS and cleared the base
> +		 * address itself, we won't notice and we'll incorrectly
> +		 * restore the prior base address next time we reschdule
> +		 * the process.
>  		 */
>  		if (fsindex)
>  			prev->fs = 0;
>  	}
> -	/* when next process has a 64bit base use it */
>  	if (next->fs)
>  		wrmsrl(MSR_FS_BASE, next->fs);
>  	prev->fsindex = fsindex;
>  
>  	if (unlikely(gsindex | next->gsindex | prev->gs)) {
>  		load_gs_index(next->gsindex);
> +
> +		/* This works (and fails) the same way as fsindex above. */
>  		if (gsindex)
>  			prev->gs = 0;
>  	}
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


-- 
js
suse labs

  reply	other threads:[~2015-01-07 15:26 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-07  1:49 [PATCH 3.18 00/84] 3.18.2-stable review Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 01/84] isofs: Fix infinite looping over CE entries Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 02/84] x86/tls: Validate TLS entries to protect espfix Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 03/84] x86/tls: Disallow unusual TLS segments Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 04/84] x86_64, switch_to(): Load TLS descriptors before switching DS and ES Greg Kroah-Hartman
2015-01-07 15:26   ` Jiri Slaby [this message]
2015-01-08  1:27     ` Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 05/84] x86, kvm: Clear paravirt_enabled on KVM guests for espfix32s benefit Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 06/84] brcmfmac: Fix bitmap malloc bug in msgbuf Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 07/84] clocksource: arch_timer: Fix code to use physical timers when requested Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 08/84] mfd: twl4030-power: Fix regression with missing compatible flag Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 09/84] mfd: tc6393xb: Fail ohci suspend if full state restore is required Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 10/84] mmc: dw_mmc: avoid write to CDTHRCTL on older versions Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 11/84] mmc: omap_hsmmc: Fix UHS card with DDR50 support Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 12/84] mmc: block: add newline to sysfs display of force_ro Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 13/84] mmc: sdhci-pci-o2micro: Fix Dell E5440 issue Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 14/84] megaraid_sas: corrected return of wait_event from abort frame path Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 15/84] megaraid_sas: dndinaness related bug fixes Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 16/84] regulator: anatop: Set default voltage selector for vddpu Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 17/84] scsi: correct return values for .eh_abort_handler implementations Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 18/84] f2fs: avoid returning uninitialized value to userspace from f2fs_trim_fs() Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 19/84] f2fs: fix possible data corruption in f2fs_write_begin() Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 20/84] nfs41: fix nfs4_proc_layoutget error handling Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 21/84] dcache: fix kmemcheck warning in switch_names Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 22/84] dm bufio: fix memleak when using a dm_buffers inline bio Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 23/84] dm crypt: use memzero_explicit for on-stack buffer Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 24/84] dm cache: only use overwrite optimisation for promotion when in writeback mode Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 25/84] dm cache: dirty flag was mistakenly being cleared when promoting via overwrite Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 26/84] dm cache: fix spurious cell_defer when dealing with partial block at end of device Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 27/84] dm space map metadata: fix sm_bootstrap_get_nr_blocks() Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 28/84] dm thin: fix inability to discard blocks when in out-of-data-space mode Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 29/84] dm thin: fix missing out-of-data-space to write mode transition if blocks are released Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 30/84] dm thin: fix a race in thin_dtr Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 31/84] arm64: Add COMPAT_HWCAP_LPAE Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 32/84] arm64: bpf: lift restriction on last instruction Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 33/84] drm/tegra: gem: dumb: pitch and size are outputs Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 34/84] ARM: tegra: Re-add removed SoC id macro to tegra_resume() Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 35/84] ARM: mvebu: make the coherency_ll.S functions work with no coherency fabric Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 36/84] ARM: mvebu: disable I/O coherency on non-SMP situations on Armada 370/375/38x/XP Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 37/84] ARM: mvebu: remove conflicting muxing on Armada 370 DB Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 39/84] x86/asm/traps: Disable tracing and kprobes in fixup_bad_iret and sync_regs Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 40/84] x86/tls: Dont validate lm in set_thread_area() after all Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 41/84] isofs: Fix unchecked printing of ER records Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 42/84] x86, microcode, AMD: Do not use smp_processor_id() in preemtible context Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 43/84] x86, microcode, intel: Drop unused parameter Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 44/84] x86, microcode: Dont initialize microcode code on paravirt Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 45/84] x86, microcode: Reload microcode on resume Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 46/84] x86/microcode/intel: Fish out the stashed microcode for the BSP Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 47/84] KEYS: Fix stale key registration at error path Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 48/84] mac80211: copy chandef from AP vif to VLANs Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 49/84] mac80211: avoid using uninitialized stack data Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 51/84] mac80211: free management frame keys when removing station Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 52/84] mnt: Fix a memory stomp in umount Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 53/84] thermal: Fix error path in thermal_init() Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 54/84] mnt: Implicitly add MNT_NODEV on remount when it was implicitly added by mount Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 55/84] mnt: Update unprivileged remount test Greg Kroah-Hartman
2015-01-07  1:49 ` [PATCH 3.18 56/84] umount: Disallow unprivileged mount force Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 57/84] groups: Consolidate the setgroups permission checks Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 58/84] userns: Document what the invariant required for safe unprivileged mappings Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 59/84] userns: Dont allow setgroups until a gid mapping has been setablished Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 60/84] userns: Dont allow unprivileged creation of gid mappings Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 61/84] userns: Check euid no fsuid when establishing an unprivileged uid mapping Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 62/84] userns: Only allow the creator of the userns unprivileged mappings Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 63/84] userns: Rename id_map_mutex to userns_state_mutex Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 64/84] userns: Add a knob to disable setgroups on a per user namespace basis Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 65/84] userns: Allow setting gid_maps without privilege when setgroups is disabled Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 66/84] userns: Unbreak the unprivileged remount tests Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 67/84] audit: use supplied gfp_mask from audit_buffer in kauditd_send_multicast_skb Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 68/84] audit: dont attempt to lookup PIDs when changing PID filtering audit rules Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 69/84] audit: restore AUDIT_LOGINUID unset ABI Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 70/84] crypto: af_alg - fix backlog handling Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 71/84] ncpfs: return proper error from NCP_IOC_SETROOT ioctl Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 72/84] mm/CMA: fix boot regression due to physical address of high_memory Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 73/84] exit: pidns: alloc_pid() leaks pid_namespace if child_reaper is exiting Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 74/84] udf: Check path length when reading symlink Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 75/84] udf: Verify i_size when loading inode Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 76/84] udf: Verify symlink size before loading it Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 77/84] udf: Check component length before reading it Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 78/84] eCryptfs: Force RO mount when encrypted view is enabled Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 79/84] eCryptfs: Remove buggy and unnecessary write in file name decode routine Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 80/84] Btrfs: make sure we wait on logged extents when fsycning two subvols Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 81/84] btrfs: fix wrong accounting of raid1 data profile in statfs Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 82/84] Btrfs: do not move em to modified list when unpinning Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 83/84] Btrfs: make sure logged extents complete in the current transaction V3 Greg Kroah-Hartman
2015-01-07  1:50 ` [PATCH 3.18 84/84] Btrfs: fix fs corruption on transaction abort if device supports discard Greg Kroah-Hartman
2015-01-07 13:47 ` [PATCH 3.18 00/84] 3.18.2-stable review Guenter Roeck
2015-01-07 23:33 ` Shuah Khan
2015-01-07 23:45   ` Greg Kroah-Hartman
2015-01-08 10:20 ` Satoru Takeuchi
2015-01-08 16:33   ` 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=54AD502D.7070107@suse.cz \
    --to=jslaby@suse.cz \
    --cc=andi@firstfloor.org \
    --cc=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).