linux-kernel.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, Pengfei Wang <wpengfeinudt@gmail.com>,
	Paul Moore <paul@paul-moore.com>
Subject: [PATCH 4.7 105/186] audit: fix a double fetch in audit_log_single_execve_arg()
Date: Thu, 18 Aug 2016 15:58:42 +0200	[thread overview]
Message-ID: <20160818135936.731241107@linuxfoundation.org> (raw)
In-Reply-To: <20160818135932.219369981@linuxfoundation.org>

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

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

From: Paul Moore <paul@paul-moore.com>

commit 43761473c254b45883a64441dd0bc85a42f3645c upstream.

There is a double fetch problem in audit_log_single_execve_arg()
where we first check the execve(2) argumnets for any "bad" characters
which would require hex encoding and then re-fetch the arguments for
logging in the audit record[1].  Of course this leaves a window of
opportunity for an unsavory application to munge with the data.

This patch reworks things by only fetching the argument data once[2]
into a buffer where it is scanned and logged into the audit
records(s).  In addition to fixing the double fetch, this patch
improves on the original code in a few other ways: better handling
of large arguments which require encoding, stricter record length
checking, and some performance improvements (completely unverified,
but we got rid of some strlen() calls, that's got to be a good
thing).

As part of the development of this patch, I've also created a basic
regression test for the audit-testsuite, the test can be tracked on
GitHub at the following link:

 * https://github.com/linux-audit/audit-testsuite/issues/25

[1] If you pay careful attention, there is actually a triple fetch
problem due to a strnlen_user() call at the top of the function.

[2] This is a tiny white lie, we do make a call to strnlen_user()
prior to fetching the argument data.  I don't like it, but due to the
way the audit record is structured we really have no choice unless we
copy the entire argument at once (which would require a rather
wasteful allocation).  The good news is that with this patch the
kernel no longer relies on this strnlen_user() value for anything
beyond recording it in the log, we also update it with a trustworthy
value whenever possible.

Reported-by: Pengfei Wang <wpengfeinudt@gmail.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/auditsc.c |  332 +++++++++++++++++++++++++++----------------------------
 1 file changed, 164 insertions(+), 168 deletions(-)

--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -72,6 +72,7 @@
 #include <linux/compat.h>
 #include <linux/ctype.h>
 #include <linux/string.h>
+#include <linux/uaccess.h>
 #include <uapi/linux/limits.h>
 
 #include "audit.h"
@@ -81,7 +82,8 @@
 #define AUDITSC_SUCCESS 1
 #define AUDITSC_FAILURE 2
 
-/* no execve audit message should be longer than this (userspace limits) */
+/* no execve audit message should be longer than this (userspace limits),
+ * see the note near the top of audit_log_execve_info() about this value */
 #define MAX_EXECVE_AUDIT_LEN 7500
 
 /* max length to print of cmdline/proctitle value during audit */
@@ -987,184 +989,178 @@ static int audit_log_pid_context(struct
 	return rc;
 }
 
-/*
- * to_send and len_sent accounting are very loose estimates.  We aren't
- * really worried about a hard cap to MAX_EXECVE_AUDIT_LEN so much as being
- * within about 500 bytes (next page boundary)
- *
- * why snprintf?  an int is up to 12 digits long.  if we just assumed when
- * logging that a[%d]= was going to be 16 characters long we would be wasting
- * space in every audit message.  In one 7500 byte message we can log up to
- * about 1000 min size arguments.  That comes down to about 50% waste of space
- * if we didn't do the snprintf to find out how long arg_num_len was.
- */
-static int audit_log_single_execve_arg(struct audit_context *context,
-					struct audit_buffer **ab,
-					int arg_num,
-					size_t *len_sent,
-					const char __user *p,
-					char *buf)
-{
-	char arg_num_len_buf[12];
-	const char __user *tmp_p = p;
-	/* how many digits are in arg_num? 5 is the length of ' a=""' */
-	size_t arg_num_len = snprintf(arg_num_len_buf, 12, "%d", arg_num) + 5;
-	size_t len, len_left, to_send;
-	size_t max_execve_audit_len = MAX_EXECVE_AUDIT_LEN;
-	unsigned int i, has_cntl = 0, too_long = 0;
-	int ret;
-
-	/* strnlen_user includes the null we don't want to send */
-	len_left = len = strnlen_user(p, MAX_ARG_STRLEN) - 1;
+static void audit_log_execve_info(struct audit_context *context,
+				  struct audit_buffer **ab)
+{
+	long len_max;
+	long len_rem;
+	long len_full;
+	long len_buf;
+	long len_abuf;
+	long len_tmp;
+	bool require_data;
+	bool encode;
+	unsigned int iter;
+	unsigned int arg;
+	char *buf_head;
+	char *buf;
+	const char __user *p = (const char __user *)current->mm->arg_start;
 
-	/*
-	 * We just created this mm, if we can't find the strings
-	 * we just copied into it something is _very_ wrong. Similar
-	 * for strings that are too long, we should not have created
-	 * any.
-	 */
-	if (WARN_ON_ONCE(len < 0 || len > MAX_ARG_STRLEN - 1)) {
-		send_sig(SIGKILL, current, 0);
-		return -1;
+	/* NOTE: this buffer needs to be large enough to hold all the non-arg
+	 *       data we put in the audit record for this argument (see the
+	 *       code below) ... at this point in time 96 is plenty */
+	char abuf[96];
+
+	/* NOTE: we set MAX_EXECVE_AUDIT_LEN to a rather arbitrary limit, the
+	 *       current value of 7500 is not as important as the fact that it
+	 *       is less than 8k, a setting of 7500 gives us plenty of wiggle
+	 *       room if we go over a little bit in the logging below */
+	WARN_ON_ONCE(MAX_EXECVE_AUDIT_LEN > 7500);
+	len_max = MAX_EXECVE_AUDIT_LEN;
+
+	/* scratch buffer to hold the userspace args */
+	buf_head = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL);
+	if (!buf_head) {
+		audit_panic("out of memory for argv string");
+		return;
 	}
+	buf = buf_head;
+
+	audit_log_format(*ab, "argc=%d", context->execve.argc);
 
-	/* walk the whole argument looking for non-ascii chars */
+	len_rem = len_max;
+	len_buf = 0;
+	len_full = 0;
+	require_data = true;
+	encode = false;
+	iter = 0;
+	arg = 0;
 	do {
-		if (len_left > MAX_EXECVE_AUDIT_LEN)
-			to_send = MAX_EXECVE_AUDIT_LEN;
-		else
-			to_send = len_left;
-		ret = copy_from_user(buf, tmp_p, to_send);
-		/*
-		 * There is no reason for this copy to be short. We just
-		 * copied them here, and the mm hasn't been exposed to user-
-		 * space yet.
-		 */
-		if (ret) {
-			WARN_ON(1);
-			send_sig(SIGKILL, current, 0);
-			return -1;
-		}
-		buf[to_send] = '\0';
-		has_cntl = audit_string_contains_control(buf, to_send);
-		if (has_cntl) {
-			/*
-			 * hex messages get logged as 2 bytes, so we can only
-			 * send half as much in each message
-			 */
-			max_execve_audit_len = MAX_EXECVE_AUDIT_LEN / 2;
-			break;
-		}
-		len_left -= to_send;
-		tmp_p += to_send;
-	} while (len_left > 0);
-
-	len_left = len;
-
-	if (len > max_execve_audit_len)
-		too_long = 1;
-
-	/* rewalk the argument actually logging the message */
-	for (i = 0; len_left > 0; i++) {
-		int room_left;
-
-		if (len_left > max_execve_audit_len)
-			to_send = max_execve_audit_len;
-		else
-			to_send = len_left;
-
-		/* do we have space left to send this argument in this ab? */
-		room_left = MAX_EXECVE_AUDIT_LEN - arg_num_len - *len_sent;
-		if (has_cntl)
-			room_left -= (to_send * 2);
-		else
-			room_left -= to_send;
-		if (room_left < 0) {
-			*len_sent = 0;
-			audit_log_end(*ab);
-			*ab = audit_log_start(context, GFP_KERNEL, AUDIT_EXECVE);
-			if (!*ab)
-				return 0;
-		}
+		/* NOTE: we don't ever want to trust this value for anything
+		 *       serious, but the audit record format insists we
+		 *       provide an argument length for really long arguments,
+		 *       e.g. > MAX_EXECVE_AUDIT_LEN, so we have no choice but
+		 *       to use strncpy_from_user() to obtain this value for
+		 *       recording in the log, although we don't use it
+		 *       anywhere here to avoid a double-fetch problem */
+		if (len_full == 0)
+			len_full = strnlen_user(p, MAX_ARG_STRLEN) - 1;
+
+		/* read more data from userspace */
+		if (require_data) {
+			/* can we make more room in the buffer? */
+			if (buf != buf_head) {
+				memmove(buf_head, buf, len_buf);
+				buf = buf_head;
+			}
 
-		/*
-		 * first record needs to say how long the original string was
-		 * so we can be sure nothing was lost.
-		 */
-		if ((i == 0) && (too_long))
-			audit_log_format(*ab, " a%d_len=%zu", arg_num,
-					 has_cntl ? 2*len : len);
-
-		/*
-		 * normally arguments are small enough to fit and we already
-		 * filled buf above when we checked for control characters
-		 * so don't bother with another copy_from_user
-		 */
-		if (len >= max_execve_audit_len)
-			ret = copy_from_user(buf, p, to_send);
-		else
-			ret = 0;
-		if (ret) {
-			WARN_ON(1);
-			send_sig(SIGKILL, current, 0);
-			return -1;
-		}
-		buf[to_send] = '\0';
+			/* fetch as much as we can of the argument */
+			len_tmp = strncpy_from_user(&buf_head[len_buf], p,
+						    len_max - len_buf);
+			if (len_tmp == -EFAULT) {
+				/* unable to copy from userspace */
+				send_sig(SIGKILL, current, 0);
+				goto out;
+			} else if (len_tmp == (len_max - len_buf)) {
+				/* buffer is not large enough */
+				require_data = true;
+				/* NOTE: if we are going to span multiple
+				 *       buffers force the encoding so we stand
+				 *       a chance at a sane len_full value and
+				 *       consistent record encoding */
+				encode = true;
+				len_full = len_full * 2;
+				p += len_tmp;
+			} else {
+				require_data = false;
+				if (!encode)
+					encode = audit_string_contains_control(
+								buf, len_tmp);
+				/* try to use a trusted value for len_full */
+				if (len_full < len_max)
+					len_full = (encode ?
+						    len_tmp * 2 : len_tmp);
+				p += len_tmp + 1;
+			}
+			len_buf += len_tmp;
+			buf_head[len_buf] = '\0';
 
-		/* actually log it */
-		audit_log_format(*ab, " a%d", arg_num);
-		if (too_long)
-			audit_log_format(*ab, "[%d]", i);
-		audit_log_format(*ab, "=");
-		if (has_cntl)
-			audit_log_n_hex(*ab, buf, to_send);
-		else
-			audit_log_string(*ab, buf);
-
-		p += to_send;
-		len_left -= to_send;
-		*len_sent += arg_num_len;
-		if (has_cntl)
-			*len_sent += to_send * 2;
-		else
-			*len_sent += to_send;
-	}
-	/* include the null we didn't log */
-	return len + 1;
-}
+			/* length of the buffer in the audit record? */
+			len_abuf = (encode ? len_buf * 2 : len_buf + 2);
+		}
 
-static void audit_log_execve_info(struct audit_context *context,
-				  struct audit_buffer **ab)
-{
-	int i, len;
-	size_t len_sent = 0;
-	const char __user *p;
-	char *buf;
+		/* write as much as we can to the audit log */
+		if (len_buf > 0) {
+			/* NOTE: some magic numbers here - basically if we
+			 *       can't fit a reasonable amount of data into the
+			 *       existing audit buffer, flush it and start with
+			 *       a new buffer */
+			if ((sizeof(abuf) + 8) > len_rem) {
+				len_rem = len_max;
+				audit_log_end(*ab);
+				*ab = audit_log_start(context,
+						      GFP_KERNEL, AUDIT_EXECVE);
+				if (!*ab)
+					goto out;
+			}
 
-	p = (const char __user *)current->mm->arg_start;
+			/* create the non-arg portion of the arg record */
+			len_tmp = 0;
+			if (require_data || (iter > 0) ||
+			    ((len_abuf + sizeof(abuf)) > len_rem)) {
+				if (iter == 0) {
+					len_tmp += snprintf(&abuf[len_tmp],
+							sizeof(abuf) - len_tmp,
+							" a%d_len=%lu",
+							arg, len_full);
+				}
+				len_tmp += snprintf(&abuf[len_tmp],
+						    sizeof(abuf) - len_tmp,
+						    " a%d[%d]=", arg, iter++);
+			} else
+				len_tmp += snprintf(&abuf[len_tmp],
+						    sizeof(abuf) - len_tmp,
+						    " a%d=", arg);
+			WARN_ON(len_tmp >= sizeof(abuf));
+			abuf[sizeof(abuf) - 1] = '\0';
+
+			/* log the arg in the audit record */
+			audit_log_format(*ab, "%s", abuf);
+			len_rem -= len_tmp;
+			len_tmp = len_buf;
+			if (encode) {
+				if (len_abuf > len_rem)
+					len_tmp = len_rem / 2; /* encoding */
+				audit_log_n_hex(*ab, buf, len_tmp);
+				len_rem -= len_tmp * 2;
+				len_abuf -= len_tmp * 2;
+			} else {
+				if (len_abuf > len_rem)
+					len_tmp = len_rem - 2; /* quotes */
+				audit_log_n_string(*ab, buf, len_tmp);
+				len_rem -= len_tmp + 2;
+				/* don't subtract the "2" because we still need
+				 * to add quotes to the remaining string */
+				len_abuf -= len_tmp;
+			}
+			len_buf -= len_tmp;
+			buf += len_tmp;
+		}
 
-	audit_log_format(*ab, "argc=%d", context->execve.argc);
+		/* ready to move to the next argument? */
+		if ((len_buf == 0) && !require_data) {
+			arg++;
+			iter = 0;
+			len_full = 0;
+			require_data = true;
+			encode = false;
+		}
+	} while (arg < context->execve.argc);
 
-	/*
-	 * we need some kernel buffer to hold the userspace args.  Just
-	 * allocate one big one rather than allocating one of the right size
-	 * for every single argument inside audit_log_single_execve_arg()
-	 * should be <8k allocation so should be pretty safe.
-	 */
-	buf = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL);
-	if (!buf) {
-		audit_panic("out of memory for argv string");
-		return;
-	}
+	/* NOTE: the caller handles the final audit_log_end() call */
 
-	for (i = 0; i < context->execve.argc; i++) {
-		len = audit_log_single_execve_arg(context, ab, i,
-						  &len_sent, p, buf);
-		if (len <= 0)
-			break;
-		p += len;
-	}
-	kfree(buf);
+out:
+	kfree(buf_head);
 }
 
 static void show_special(struct audit_context *context, int *call_panic)

  parent reply	other threads:[~2016-08-18 14:13 UTC|newest]

Thread overview: 155+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20160818140817uscas1p238499f62d2adb3fdec69b8b057669de7@uscas1p2.samsung.com>
     [not found] ` <20160818135932.219369981@linuxfoundation.org>
2016-08-18 13:57   ` [PATCH 4.7 003/186] usb: gadget: pch_udc: reorder spin_[un]lock to avoid deadlock Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 007/186] USB: serial: option: add support for Telit LE910 PID 0x1206 Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 010/186] arm64: debug: unmask PSTATE.D earlier Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 011/186] arm64: Fix incorrect per-cpu usage for boot CPU Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 022/186] arm64: mm: avoid fdt_check_header() before the FDT is fully mapped Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 031/186] KVM: nVMX: Fix memory corruption when using VMCS shadowing Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 033/186] s390/cio: allow to reset channel measurement block Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 034/186] s390/mm: fix gmap tlb flush issues Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 036/186] intel_pstate: Fix MSR_CONFIG_TDP_x addressing in core_get_max_pstate() Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 039/186] perf/x86/intel/uncore: Fix uncore num_counters Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 041/186] [media] media: usbtv: prevent access to freed resources Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 042/186] [media] media: dvb_ringbuffer: Add memory barriers Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 044/186] [media] videobuf2-v4l2: Verify planes array in buffer dequeueing Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 045/186] [media] vb2: core: Skip planes array verification if pb is NULL Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 047/186] [media] sur40: lower poll interval to fix occasional FPS drops to ~56 FPS Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 048/186] [media] sur40: fix occasional oopses on device close Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 049/186] regulator: s2mps11: Fix the voltage linear range for s2mps15 Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 050/186] dm: fix second blk_delay_queue() parameter to be in msec units not jiffies Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 051/186] dm: set DMF_SUSPENDED* _before_ clearing DMF_NOFLUSH_SUSPENDING Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 052/186] xfs: bufferhead chains are invalid after end_page_writeback Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 053/186] hp-wmi: Fix wifi cannot be hard-unblocked Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 054/186] s5p-mfc: Set device name for reserved memory region devs Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 055/186] s5p-mfc: Add release callback for " Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 056/186] dm verity fec: fix block calculation Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 057/186] iwlwifi: pcie: enable interrupts before releasing the NICs CPU Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 058/186] iwlwifi: pcie: fix a race in firmware loading flow Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 059/186] iwlwifi: add new 8260 PCI IDs Greg Kroah-Hartman
2016-08-18 13:57   ` [PATCH 4.7 060/186] iwlwifi: add new 8265 Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 063/186] spi: pxa2xx: Clear all RFT bits in reset_sccr1() on Intel Quark Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 065/186] Bluetooth: Add support of 13d3:3490 AR3012 device Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 067/186] EDAC: Correct channel count limit Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 068/186] megaraid_sas: Do not fire MR_DCMD_PD_LIST_QUERY to controllers which do not support it Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 069/186] HID: uhid: fix timeout when probe races with IO Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 070/186] ovl: disallow overlayfs as upperdir Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 071/186] remoteproc: Fix potential race condition in rproc_add Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 072/186] ARC: mm: dont loose PTE_SPECIAL in pte_modify() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 073/186] ARC: dma: fix address translation in arc_dma_free Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 074/186] jbd2: make journal y2038 safe Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 075/186] fs/cifs: make share unaccessible at root level mountable Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 076/186] cifs: Check for existing directory when opening file with O_CREAT Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 077/186] cifs: unbreak TCP session reuse Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 078/186] cifs: fix crash due to race in hmac(md5) handling Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 079/186] CIFS: Fix a possible invalid memory access in smb2_query_symlink() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 080/186] random: add interrupt callback to VMBus IRQ handler Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 081/186] random: properly align get_random_int_hash Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 082/186] random: initialize the non-blocking pool via add_hwgenerator_randomness() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 083/186] random: print a warning for the first ten uninitialized random users Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 084/186] cachefiles: Fix race between inactivating and culling a cache object Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 089/186] powerpc/tm: Fix stack pointer corruption in __tm_recheckpoint() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 090/186] Btrfs: fix delalloc accounting after copy_from_user faults Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 091/186] nfs: dont create zero-length requests Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 092/186] nfsd: Fix race between FREE_STATEID and LOCK Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 093/186] nfsd: dont return an unhashed lock stateid after taking mutex Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 094/186] pNFS: Separate handling of NFS4ERR_LAYOUTTRYLATER and RECALLCONFLICT Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 095/186] pNFS: Fix post-layoutget error handling in pnfs_update_layout() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 096/186] pNFS: Handle NFS4ERR_RECALLCONFLICT correctly in LAYOUTGET Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 097/186] pNFS: Fix LAYOUTGET handling of NFS4ERR_BAD_STATEID and NFS4ERR_EXPIRED Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 099/186] iommu/exynos: Suppress unbinding to prevent system failure Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 100/186] iommu/vt-d: Return error code in domain_context_mapping_one() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 101/186] iommu/io-pgtable-arm: Fix iova_to_phys for block entries Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 102/186] iommu/amd: Handle IOMMU_DOMAIN_DMA in ops->domain_free call-back Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 103/186] iommu/amd: Init unity mappings only for dma_ops domains Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 104/186] iommu/amd: Update Alias-DTE in update_device_table() Greg Kroah-Hartman
2016-08-18 13:58   ` Greg Kroah-Hartman [this message]
2016-08-18 13:58   ` [PATCH 4.7 106/186] ARM: 8561/3: dma-mapping: Dont use outer_flush_range when the L2C is coherent Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 107/186] ARM: dts: sunxi: Add a startup delay for fixed regulator enabled phys Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 108/186] ARM: dts: realview: Fix PBX-A9 cache description Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 109/186] ARM: tegra: fix erroneous address in dts Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 110/186] Revert "ARM: aspeed: adapt defconfigs for new CONFIG_PRINTK_TIME" Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 111/186] cgroupns: Fix the locking in copy_cgroup_ns Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 112/186] cgroupns: Close race between cgroup_post_fork and copy_cgroup_ns Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 113/186] cgroupns: Only allow creation of hierarchies in the initial cgroup namespace Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 114/186] tpm_crb: fix address space of the return pointer in crb_map_res() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 115/186] clk: rockchip: fix incorrect rk3399 spdif-DPTX divider bits Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 116/186] soc: qcom: smp2p: Correct addressing of outgoing value Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 117/186] netlabel: add address family checks to netlbl_{sock,req}_delattr() Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 118/186] w1:omap_hdq: fix regression Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 120/186] drm/amdgpu: Poll for both connect/disconnect on analog connectors Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 121/186] drm/amdgpu: support backlight control for UNIPHY3 Greg Kroah-Hartman
2016-08-18 13:58   ` [PATCH 4.7 122/186] drm/amdgpu: Disable RPM helpers while reprobing connectors on resume Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 123/186] drm/amdgpu: fix firmware info version checks Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 124/186] drm/amdgpu/gmc7: add missing mullins case Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 126/186] drm/radeon: Poll for both connect/disconnect on analog connectors Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 127/186] drm/radeon: fix firmware info version checks Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 128/186] drm/radeon: support backlight control for UNIPHY3 Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 129/186] drm/nouveau: check for supported chipset before booting fbdev off the hw Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 130/186] drm/nouveau/gr/nv3x: fix instobj write offsets in gr setup Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 131/186] drm/nouveau/fbcon: fix font width not divisible by 8 Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 132/186] drm: Restore double clflush on the last partial cacheline Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 134/186] drm/amd/powerplay: fix the incorrect return value Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 135/186] drm/rockchip: allocate correct crtc state structure on reset Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 136/186] drm/i915/gen9: Add WaInPlaceDecompressionHang Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 141/186] balloon: check the number of available pages in leak balloon Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 142/186] ftrace/recordmcount: Work around for addition of metag magic but not relocations Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 143/186] metag: Fix __cmpxchg_u32 asm constraint for CMP Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 144/186] block: add missing group association in bio-cloning functions Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 145/186] block: fix bdi vs gendisk lifetime mismatch Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 146/186] floppy: fix open(O_ACCMODE) for ioctl-only open Greg Kroah-Hartman
2016-08-24 13:34     ` Mark Hounschell
2016-08-24 20:17       ` Greg Kroah-Hartman
2016-08-24 21:11         ` Jiri Kosina
2016-08-25 13:08           ` Mark Hounschell
2016-08-25 14:41             ` Jens Axboe
2016-08-25 14:50               ` Mark Hounschell
2016-08-25 14:53               ` Jiri Kosina
2016-08-25 14:57                 ` Jens Axboe
2016-08-18 13:59   ` [PATCH 4.7 147/186] mtd: nand: fix bug writing 1 byte less than page size Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 148/186] mm/hugetlb: avoid soft lockup in set_max_huge_pages() Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 149/186] ALSA: hda: Fix krealloc() with __GFP_ZERO usage Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 150/186] ALSA: hda/realtek - Cant adjust speakers volume on a Dell AIO Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 151/186] ALSA: hda: add AMD Bonaire AZ PCI ID with proper driver caps Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 152/186] ALSA: hda - Fix headset mic detection problem for two dell machines Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 153/186] IB/mlx5: Fix iteration overrun in GSI qps Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 154/186] IB/mlx5: Fix MODIFY_QP command input structure Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 155/186] IB/rdmavt: Disable by default Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 156/186] IB/rdmavt: Add missing spin_lock_init call for rdi->n_cqs_lock Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 157/186] IB/srpt: Limit the number of SG elements per work request Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 158/186] IB/core: Make rdma_rw_ctx_init() initialize all used fields Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 159/186] IB/core, RDMA RW API: Do not exceed QP SGE send limit Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 160/186] of: fix memory leak related to safe_name() Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 161/186] ubi: Make volume resize power cut aware Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 162/186] ubi: Fix early logging Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 163/186] ubi: Fix race condition between ubi device creation and udev Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 164/186] iscsi-target: Fix panic when adding second TCP connection to iSCSI session Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 165/186] target: Fix ordered task target_setup_cmd_from_cdb exception hang Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 166/186] target: Fix missing complete during ABORT_TASK + CMD_T_FABRIC_STOP Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 167/186] target: Fix race between iscsi-target connection shutdown + ABORT_TASK Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 168/186] target: Fix max_unmap_lba_count calc overflow Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 169/186] target: Fix ordered task CHECK_CONDITION early exception handling Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 170/186] um: Fix possible deadlock in sig_handler_common() Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 171/186] Input: elan_i2c - properly wake up touchpad on ASUS laptops Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 172/186] Input: i8042 - break load dependency between atkbd/psmouse and i8042 Greg Kroah-Hartman
2016-08-18 16:29     ` Dmitry Torokhov
2016-08-19  7:37       ` Greg Kroah-Hartman
2016-08-19 17:13         ` Dmitry Torokhov
2016-09-05 14:01           ` Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 173/186] SUNRPC: Dont allocate a full sockaddr_storage for tracing Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 174/186] MIPS: mm: Fix definition of R6 cache instruction Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 175/186] MIPS: Fix r4k clockevents registration Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 176/186] MIPS: Dont register r4k sched clock when CPUFREQ enabled Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 177/186] MIPS: hpet: Increase HPET_MIN_PROG_DELTA and decrease HPET_MIN_CYCLES Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 178/186] PCI: Mark Atheros AR9485 and QCA9882 to avoid bus reset Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 179/186] x86/platform/intel_mid_pci: Rework IRQ0 workaround Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 180/186] ACPI / EC: Work around method reentrancy limit in ACPICA for _Qxx Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 181/186] lpfc: fix oops in lpfc_sli4_scmd_to_wqidx_distr() from lpfc_send_taskmgmt() Greg Kroah-Hartman
2016-08-18 13:59   ` [PATCH 4.7 182/186] rtc: s3c: Add s3c_rtc_{enable/disable}_clk in s3c_rtc_setfreq() Greg Kroah-Hartman
2016-08-18 14:00   ` [PATCH 4.7 183/186] dm flakey: error READ bios during the down_interval Greg Kroah-Hartman
2016-08-18 14:00   ` [PATCH 4.7 184/186] module: Invalidate signatures on force-loaded modules Greg Kroah-Hartman
2016-08-18 14:00   ` [PATCH 4.7 185/186] Documentation/module-signing.txt: Note need for version info if reusing a key Greg Kroah-Hartman
2016-08-18 14:00   ` [PATCH 4.7 186/186] phy: rcar-gen3-usb2: fix mutex_lock calling in interrupt Greg Kroah-Hartman
2016-08-18 20:08   ` [PATCH 4.7 000/186] 4.7.2-stable review Guenter Roeck
2016-08-19  7:38     ` Greg Kroah-Hartman
2016-08-18 21:36   ` Shuah Khan
2016-08-19  7:32     ` Greg Kroah-Hartman
     [not found]   ` <57b761d9.45c8c20a.762ba.ebc2@mx.google.com>
2016-08-20  9:45     ` 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=20160818135936.731241107@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paul@paul-moore.com \
    --cc=stable@vger.kernel.org \
    --cc=wpengfeinudt@gmail.com \
    /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).