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)
next prev 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).