linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, Denis Kirjanov <kda@linux-powerpc.org>,
	"Yang Tao" <yang.tao172@zte.com.cn>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	"Ingo Molnar" <mingo@kernel.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Yi Wang" <wang.yi59@zte.com.cn>
Subject: [PATCH 3.16 096/148] futex: Prevent robust futex exit race
Date: Sat, 08 Feb 2020 18:20:35 +0000	[thread overview]
Message-ID: <lsq.1581185940.296689092@decadent.org.uk> (raw)
In-Reply-To: <lsq.1581185939.857586636@decadent.org.uk>

3.16.82-rc1 review patch.  If anyone has any objections, please let me know.

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

From: Yang Tao <yang.tao172@zte.com.cn>

commit ca16d5bee59807bf04deaab0a8eccecd5061528c upstream.

Robust futexes utilize the robust_list mechanism to allow the kernel to
release futexes which are held when a task exits. The exit can be voluntary
or caused by a signal or fault. This prevents that waiters block forever.

The futex operations in user space store a pointer to the futex they are
either locking or unlocking in the op_pending member of the per task robust
list.

After a lock operation has succeeded the futex is queued in the robust list
linked list and the op_pending pointer is cleared.

After an unlock operation has succeeded the futex is removed from the
robust list linked list and the op_pending pointer is cleared.

The robust list exit code checks for the pending operation and any futex
which is queued in the linked list. It carefully checks whether the futex
value is the TID of the exiting task. If so, it sets the OWNER_DIED bit and
tries to wake up a potential waiter.

This is race free for the lock operation but unlock has two race scenarios
where waiters might not be woken up. These issues can be observed with
regular robust pthread mutexes. PI aware pthread mutexes are not affected.

(1) Unlocking task is killed after unlocking the futex value in user space
    before being able to wake a waiter.

        pthread_mutex_unlock()
                |
                V
        atomic_exchange_rel (&mutex->__data.__lock, 0)
                        <------------------------killed
            lll_futex_wake ()                   |
                                                |
                                                |(__lock = 0)
                                                |(enter kernel)
                                                |
                                                V
                                            do_exit()
                                            exit_mm()
                                          mm_release()
                                        exit_robust_list()
                                        handle_futex_death()
                                                |
                                                |(__lock = 0)
                                                |(uval = 0)
                                                |
                                                V
        if ((uval & FUTEX_TID_MASK) != task_pid_vnr(curr))
                return 0;

    The sanity check which ensures that the user space futex is owned by
    the exiting task prevents the wakeup of waiters which in consequence
    block infinitely.

(2) Waiting task is killed after a wakeup and before it can acquire the
    futex in user space.

        OWNER                         WAITER
				futex_wait()
   pthread_mutex_unlock()               |
                |                       |
                |(__lock = 0)           |
                |                       |
                V                       |
         futex_wake() ------------>  wakeup()
                                        |
                                        |(return to userspace)
                                        |(__lock = 0)
                                        |
                                        V
                        oldval = mutex->__data.__lock
                                          <-----------------killed
    atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,  |
                        id | assume_other_futex_waiters, 0)      |
                                                                 |
                                                                 |
                                                   (enter kernel)|
                                                                 |
                                                                 V
                                                         do_exit()
                                                        |
                                                        |
                                                        V
                                        handle_futex_death()
                                        |
                                        |(__lock = 0)
                                        |(uval = 0)
                                        |
                                        V
        if ((uval & FUTEX_TID_MASK) != task_pid_vnr(curr))
                return 0;

    The sanity check which ensures that the user space futex is owned
    by the exiting task prevents the wakeup of waiters, which seems to
    be correct as the exiting task does not own the futex value, but
    the consequence is that other waiters wont be woken up and block
    infinitely.

In both scenarios the following conditions are true:

   - task->robust_list->list_op_pending != NULL
   - user space futex value == 0
   - Regular futex (not PI)

If these conditions are met then it is reasonably safe to wake up a
potential waiter in order to prevent the above problems.

As this might be a false positive it can cause spurious wakeups, but the
waiter side has to handle other types of unrelated wakeups, e.g. signals
gracefully anyway. So such a spurious wakeup will not affect the
correctness of these operations.

This workaround must not touch the user space futex value and cannot set
the OWNER_DIED bit because the lock value is 0, i.e. uncontended. Setting
OWNER_DIED in this case would result in inconsistent state and subsequently
in malfunction of the owner died handling in user space.

The rest of the user space state is still consistent as no other task can
observe the list_op_pending entry in the exiting tasks robust list.

The eventually woken up waiter will observe the uncontended lock value and
take it over.

[ tglx: Massaged changelog and comment. Made the return explicit and not
  	depend on the subsequent check and added constants to hand into
  	handle_futex_death() instead of plain numbers. Fixed a few coding
	style issues. ]

Fixes: 0771dfefc9e5 ("[PATCH] lightweight robust futexes: core")
Signed-off-by: Yang Tao <yang.tao172@zte.com.cn>
Signed-off-by: Yi Wang <wang.yi59@zte.com.cn>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/1573010582-35297-1-git-send-email-wang.yi59@zte.com.cn
Link: https://lkml.kernel.org/r/20191106224555.943191378@linutronix.de
[bwh: Backported to 3.16: Implementation is split between futex.c and
 futex_compat.c, with common definitions in <linux/futex.h>]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -2905,7 +2905,8 @@ err_unlock:
  * Process a futex-list entry, check whether it's owned by the
  * dying task, and do notification if so:
  */
-int handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi)
+int handle_futex_death(u32 __user *uaddr, struct task_struct *curr,
+		       bool pi, bool pending_op)
 {
 	u32 uval, uninitialized_var(nval), mval;
 
@@ -2917,6 +2918,42 @@ retry:
 	if (get_user(uval, uaddr))
 		return -1;
 
+	/*
+	 * Special case for regular (non PI) futexes. The unlock path in
+	 * user space has two race scenarios:
+	 *
+	 * 1. The unlock path releases the user space futex value and
+	 *    before it can execute the futex() syscall to wake up
+	 *    waiters it is killed.
+	 *
+	 * 2. A woken up waiter is killed before it can acquire the
+	 *    futex in user space.
+	 *
+	 * In both cases the TID validation below prevents a wakeup of
+	 * potential waiters which can cause these waiters to block
+	 * forever.
+	 *
+	 * In both cases the following conditions are met:
+	 *
+	 *	1) task->robust_list->list_op_pending != NULL
+	 *	   @pending_op == true
+	 *	2) User space futex value == 0
+	 *	3) Regular futex: @pi == false
+	 *
+	 * If these conditions are met, it is safe to attempt waking up a
+	 * potential waiter without touching the user space futex value and
+	 * trying to set the OWNER_DIED bit. The user space futex value is
+	 * uncontended and the rest of the user space mutex state is
+	 * consistent, so a woken waiter will just take over the
+	 * uncontended futex. Setting the OWNER_DIED bit would create
+	 * inconsistent state and malfunction of the user space owner died
+	 * handling.
+	 */
+	if (pending_op && !pi && !uval) {
+		futex_wake(uaddr, 1, 1, FUTEX_BITSET_MATCH_ANY);
+		return 0;
+	}
+
 	if ((uval & FUTEX_TID_MASK) == task_pid_vnr(curr)) {
 		/*
 		 * Ok, this dying thread is truly holding a futex
@@ -3021,10 +3058,11 @@ void exit_robust_list(struct task_struct
 		 * A pending lock might already be on the list, so
 		 * don't process it twice:
 		 */
-		if (entry != pending)
+		if (entry != pending) {
 			if (handle_futex_death((void __user *)entry + futex_offset,
-						curr, pi))
+						curr, pi, HANDLE_DEATH_LIST))
 				return;
+		}
 		if (rc)
 			return;
 		entry = next_entry;
@@ -3038,9 +3076,10 @@ void exit_robust_list(struct task_struct
 		cond_resched();
 	}
 
-	if (pending)
+	if (pending) {
 		handle_futex_death((void __user *)pending + futex_offset,
-				   curr, pip);
+				   curr, pip, HANDLE_DEATH_PENDING);
+	}
 }
 
 long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
--- a/kernel/futex_compat.c
+++ b/kernel/futex_compat.c
@@ -94,7 +94,8 @@ void compat_exit_robust_list(struct task
 		if (entry != pending) {
 			void __user *uaddr = futex_uaddr(entry, futex_offset);
 
-			if (handle_futex_death(uaddr, curr, pi))
+			if (handle_futex_death(uaddr, curr, pi,
+					       HANDLE_DEATH_LIST))
 				return;
 		}
 		if (rc)
@@ -113,7 +114,7 @@ void compat_exit_robust_list(struct task
 	if (pending) {
 		void __user *uaddr = futex_uaddr(pending, futex_offset);
 
-		handle_futex_death(uaddr, curr, pip);
+		handle_futex_death(uaddr, curr, pip, HANDLE_DEATH_PENDING);
 	}
 }
 
--- a/include/linux/futex.h
+++ b/include/linux/futex.h
@@ -11,8 +11,13 @@ union ktime;
 long do_futex(u32 __user *uaddr, int op, u32 val, union ktime *timeout,
 	      u32 __user *uaddr2, u32 val2, u32 val3);
 
+/* Constants for the pending_op argument of handle_futex_death */
+#define HANDLE_DEATH_PENDING	true
+#define HANDLE_DEATH_LIST	false
+
 extern int
-handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi);
+handle_futex_death(u32 __user *uaddr, struct task_struct *curr,
+		   bool pi, bool pending_op);
 
 /*
  * Futexes are matched on equal values of this key.


  parent reply	other threads:[~2020-02-08 18:31 UTC|newest]

Thread overview: 151+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-08 18:18 [PATCH 3.16 000/148] 3.16.82-rc1 review Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 001/148] ALSA: line6: Drop superfluous snd_device for PCM Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 002/148] ALSA: line6: Fix memory leak at line6_init_pcm() error path Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 003/148] x86: Treat R_X86_64_PLT32 as R_X86_64_PC32 Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 004/148] pstore/ram: Write new dumps to start of recycled zones Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 005/148] net: davinci_cpdma: use dma_addr_t for DMA address Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 006/148] stmmac: fix oversized frame reception Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 007/148] net: stmmac: use correct DMA buffer size in the RX descriptor Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 008/148] net: stmmac: don't stop NAPI processing when dropping a packet Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 009/148] workqueue: Fix spurious sanity check failures in destroy_workqueue() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 010/148] ath9k_hw: fix uninitialized variable data Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 011/148] pinctrl: samsung: Fix device node refcount leaks in S3C24xx wakeup controller init Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 012/148] pinctrl: samsung: Fix device node refcount leaks in S3C64xx " Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 013/148] media: ov6650: Fix incorrect use of JPEG colorspace Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 014/148] media: ov6650: Fix stored frame format not in sync with hardware Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 015/148] tools/power/cpupower: Fix initializer override in hsw_ext_cstates Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 016/148] cw1200: Fix a signedness bug in cw1200_load_firmware() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 017/148] ar5523: check NULL before memcpy() in ar5523_cmd() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 018/148] hwrng: omap3-rom - Call clk_disable_unprepare() on exit only if not idled Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 019/148] drm/i810: Prevent underflow in ioctl Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 020/148] ARM: dts: s3c64xx: Fix init order of clock providers Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 021/148] [media] usbvision: remove power_on_at_open and timed power off Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 022/148] [media] usbvision-video: two use after frees Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 023/148] [media] usbvision: fix locking error Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 024/148] " Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 025/148] media: usbvision: Fix invalid accesses after device disconnect Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 026/148] media: usbvision: Fix races among open, close, and disconnect Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 027/148] sunrpc: fix crash when cache_head become valid before update Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 028/148] PCI: Fix Intel ACS quirk UPDCR register address Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 029/148] Bluetooth: hci_core: fix init for HCI_USER_CHANNEL Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 030/148] spi: atmel: fix handling of cs_change set on non-last xfer Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 031/148] usb: gadget: u_serial: add missing port entry locking Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 032/148] compat_ioctl: handle SIOCOUTQNSD Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 033/148] x86/ioapic: Prevent inconsistent state when moving an interrupt Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 034/148] xfs: Sanity check flags of Q_XQUOTARM call Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 035/148] cpuidle: Do not unset the driver if it is there already Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 036/148] scsi: csiostor: Don't enable IRQs too early Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 037/148] scsi: esas2r: unlock on error in esas2r_nvram_read_direct() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 038/148] scsi: zfcp: trace channel log even for FCP command responses Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 039/148] clk: samsung: exynos5420: Preserve CPU clocks configuration during suspend/resume Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 040/148] mtd: spear_smi: Fix Write Burst mode Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 041/148] ARM: tegra: Fix FLOW_CTLR_HALT register clobbering by tegra_resume() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 042/148] quota: fix livelock in dquot_writeback_dquots Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 043/148] quota: Check that quota is not dirty before release Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 044/148] scsi: core: scsi_trace: Use get_unaligned_be*() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 045/148] blk-mq: fix deadlock when reading cpu_list Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 046/148] blk-mq: avoid sysfs buffer overflow with too many CPU cores Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 047/148] iio: imu: adis16480: assign bias value only if operation succeeded Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 048/148] blk-mq: make sure that line break can be printed Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 049/148] tty: serial: msm_serial: Fix flow control Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 050/148] ext2: check err when partial != NULL Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 051/148] media: radio: wl1273: fix interrupt masking on release Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 052/148] media: exynos4-is: Fix recursive locking in isp_video_release() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 053/148] staging: rtl8192e: fix potential use after free Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 054/148] jbd2: Fix possible overflow in jbd2_log_space_left() Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 055/148] bnx2x: Enable Multi-Cos feature Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 056/148] PM / devfreq: Lock devfreq in trans_stat_show Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 057/148] scsi: tracing: Fix handling of TRANSFER LENGTH == 0 for READ(6) and WRITE(6) Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 058/148] USB: serial: mos7840: add USB ID to support Moxa UPort 2210 Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 059/148] perf probe: Fix to handle optimized not-inlined functions Ben Hutchings
2020-02-08 18:19 ` [PATCH 3.16 060/148] perf probe: Fix to show lines of sys_ functions correctly Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 061/148] perf probe: Fix to add missed brace around if block Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 062/148] perf probe: Skip if the function address is 0 Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 063/148] perf probe: Fix to find range-only function instance Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 064/148] perf probe: Fix to show function entry line as probe-able Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 065/148] perf probe: Fix wrong address verification Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 066/148] perf probe: Fix to probe a function which has no entry pc Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 067/148] perf probe: Fix to probe an inline " Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 068/148] perf probe: Fix to list probe event with correct line number Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 069/148] perf probe: Fix to show inlined function callsite without entry_pc Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 070/148] usb: gadget: pch_udc: fix use after free Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 071/148] usb: Allow USB device to be warm reset in suspended state Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 072/148] appledisplay: fix error handling in the scheduled work Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 073/148] perf probe: Skip end-of-sequence and non statement lines Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 074/148] perf probe: Filter out instances except for inlined subroutine and subprogram Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 075/148] perf probe: Fix to show calling lines of inlined functions Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 076/148] perf probe: Skip overlapped location on searching variables Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 077/148] powerpc: Allow flush_icache_range to work across ranges >4GB Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 078/148] powerpc: Allow 64bit VDSO __kernel_sync_dicache " Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 079/148] ARM: ux500: remove unused regulator data Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 080/148] regulator: ab8500: Remove AB8505 USB regulator Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 081/148] regulator: ab8500: Remove SYSCLKREQ from enum ab8505_regulator_id Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 082/148] inetpeer: fix data-race in inet_putpeer / inet_putpeer Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 083/148] iio: adis16480: Add debugfs_reg_access entry Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 084/148] drm/i915/userptr: Try to acquire the page lock around set_page_dirty() Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 085/148] USB: serial: mos7720: fix remote wakeup Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 086/148] USB: serial: mos7840: " Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 087/148] fuse: verify attributes Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 088/148] fuse: verify nlink Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 089/148] ASoC: Jack: Fix NULL pointer dereference in snd_soc_jack_report Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 090/148] scsi: lpfc: fix: Coverity: lpfc_cmpl_els_rsp(): Null pointer dereferences Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 091/148] tty: serial: imx: use the sg count from dma_map_sg Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 092/148] tty: serial: pch_uart: correct usage of dma_unmap_sg Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 093/148] RDMA/srpt: Report the SCSI residual to the initiator Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 094/148] binder: Handle start==NULL in binder_update_page_range() Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 095/148] USB: serial: ftdi_sio: add device IDs for U-Blox C099-F9P Ben Hutchings
2020-02-08 18:20 ` Ben Hutchings [this message]
2020-02-08 18:20 ` [PATCH 3.16 097/148] x86/speculation: Fix incorrect MDS/TAA mitigation status Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 098/148] usb-serial: cp201x: support Mark-10 digital force gauge Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 099/148] USB: uas: honor flag to avoid CAPACITY16 Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 100/148] USB: uas: heed CAPACITY_HEURISTICS Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 101/148] USB: documentation: flags on usb-storage versus UAS Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 102/148] Btrfs: fix negative subv_writers counter and data space leak after buffered write Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 103/148] btrfs: check page->mapping when loading free space cache Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 104/148] serial: ifx6x60: add missed pm_runtime_disable Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 105/148] rtc: msm6242: Fix reading of 10-hour digit Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 106/148] Bluetooth: delete a stray unlock Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 107/148] ext4: work around deleting a file with i_nlink == 0 safely Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 108/148] scsi: qla4xxx: fix double free bug Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 109/148] scsi: bnx2i: fix potential use after free Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 110/148] iwlwifi: check kasprintf() return value Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 111/148] serial: serial_core: Perform NULL checks for break_ctl ops Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 112/148] KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 113/148] KVM: x86: do not modify masked bits of shared MSRs Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 114/148] x86/PCI: Avoid AMD FCH XHCI USB PME# from D0 defect Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 115/148] ALSA: cs4236: fix error return comparison of an unsigned integer Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 116/148] libtraceevent: Fix memory leakage in copy_filter_type Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 117/148] drm/radeon: fix bad DMA from INTERRUPT_CNTL2 Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 118/148] tty: vt: keyboard: reject invalid keycodes Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 119/148] CIFS: Respect O_SYNC and O_DIRECT flags during reconnect Ben Hutchings
2020-02-08 18:20 ` [PATCH 3.16 120/148] CIFS: Fix SMB2 oplock break processing Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 121/148] platform/x86: hp-wmi: Fix ACPI errors caused by too small buffer Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 122/148] platform/x86: hp-wmi: Fix ACPI errors caused by passing 0 as input size Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 123/148] macvlan: schedule bc_work even if error Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 124/148] PCI/MSI: Fix incorrect MSI-X masking on resume Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 125/148] xtensa: fix TLB sanity checker Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 126/148] perf regs: Make perf_reg_name() return "unknown" instead of NULL Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 127/148] ACPI / osl: speedup grace period in acpi_os_map_cleanup Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 128/148] ACPI: OSL: only free map once in osl.c Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 129/148] ACPI: bus: Fix NULL pointer check in acpi_bus_get_private_data() Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 130/148] openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info() Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 131/148] openvswitch: remove another BUG_ON() Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 132/148] cifs: Fix cifsInodeInfo lock_sem deadlock when reconnect occurs Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 133/148] CIFS: Fix NULL-pointer dereference in smb2_push_mandatory_locks Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 134/148] net: bridge: deny dev_set_mac_address() when unregistering Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 135/148] drm/radeon: fix r1xx/r2xx register checker for POT textures Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 136/148] xen/blkback: Avoid unmapping unmapped grant pages Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 137/148] hrtimer: Get rid of the resolution field in hrtimer_clock_base Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 138/148] powerpc: Fix vDSO clock_getres() Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 139/148] ALSA: pcm: oss: Avoid potential buffer overflows Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 140/148] tcp: md5: fix potential overestimation of TCP option space Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 141/148] tcp: syncookies: extend validity range Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 142/148] tcp: fix rejected syncookies due to stale timestamps Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 143/148] tcp: Protect accesses to .ts_recent_stamp with {READ,WRITE}_ONCE() Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 144/148] inet: protect against too small mtu values Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 145/148] deb-pkg: remove obsolete -isp option to dpkg-gencontrol Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 146/148] mmc: sdhci-s3c: Check if clk_set_rate() succeeds Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 147/148] mmc: sdhci-s3c: solve problem with sleeping in atomic context Ben Hutchings
2020-02-08 18:21 ` [PATCH 3.16 148/148] s390: Fix unmatched preempt_disable() on exit Ben Hutchings
2020-02-08 23:10 ` [PATCH 3.16 000/148] 3.16.82-rc1 review Guenter Roeck
2020-02-09 18:51   ` Ben Hutchings

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=lsq.1581185940.296689092@decadent.org.uk \
    --to=ben@decadent.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=kda@linux-powerpc.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=stable@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=wang.yi59@zte.com.cn \
    --cc=yang.tao172@zte.com.cn \
    /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).