From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Liping Zhang <zlpnobody@gmail.com>,
Pablo Neira Ayuso <pablo@netfilter.org>,
Sasha Levin <alexander.levin@verizon.com>
Subject: [PATCH 4.4 46/78] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table
Date: Fri, 22 Dec 2017 09:46:27 +0100 [thread overview]
Message-ID: <20171222084602.068297519@linuxfoundation.org> (raw)
In-Reply-To: <20171222084556.909780563@linuxfoundation.org>
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Liping Zhang <zlpnobody@gmail.com>
[ Upstream commit 83d90219a5df8d950855ce73229a97b63605c317 ]
The nf_ct_helper_hash table is protected by nf_ct_helper_mutex, while
nfct_helper operation is protected by nfnl_lock(NFNL_SUBSYS_CTHELPER).
So it's possible that one CPU is walking the nf_ct_helper_hash for
cthelper add/get/del, another cpu is doing nf_conntrack_helpers_unregister
at the same time. This is dangrous, and may cause use after free error.
Note, delete operation will flush all cthelpers added via nfnetlink, so
using rcu to do protect is not easy.
Now introduce a dummy list to record all the cthelpers added via
nfnetlink, then we can walk the dummy list instead of walking the
nf_ct_helper_hash. Also, keep nfnl_cthelper_dump_table unchanged, it
may be invoked without nfnl_lock(NFNL_SUBSYS_CTHELPER) held.
Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/netfilter/nfnetlink_cthelper.c | 185 +++++++++++++++++--------------------
1 file changed, 85 insertions(+), 100 deletions(-)
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -32,6 +32,13 @@ MODULE_LICENSE("GPL");
MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
MODULE_DESCRIPTION("nfnl_cthelper: User-space connection tracking helpers");
+struct nfnl_cthelper {
+ struct list_head list;
+ struct nf_conntrack_helper helper;
+};
+
+static LIST_HEAD(nfnl_cthelper_list);
+
static int
nfnl_userspace_cthelper(struct sk_buff *skb, unsigned int protoff,
struct nf_conn *ct, enum ip_conntrack_info ctinfo)
@@ -205,14 +212,16 @@ nfnl_cthelper_create(const struct nlattr
struct nf_conntrack_tuple *tuple)
{
struct nf_conntrack_helper *helper;
+ struct nfnl_cthelper *nfcth;
int ret;
if (!tb[NFCTH_TUPLE] || !tb[NFCTH_POLICY] || !tb[NFCTH_PRIV_DATA_LEN])
return -EINVAL;
- helper = kzalloc(sizeof(struct nf_conntrack_helper), GFP_KERNEL);
- if (helper == NULL)
+ nfcth = kzalloc(sizeof(*nfcth), GFP_KERNEL);
+ if (nfcth == NULL)
return -ENOMEM;
+ helper = &nfcth->helper;
ret = nfnl_cthelper_parse_expect_policy(helper, tb[NFCTH_POLICY]);
if (ret < 0)
@@ -249,11 +258,12 @@ nfnl_cthelper_create(const struct nlattr
if (ret < 0)
goto err2;
+ list_add_tail(&nfcth->list, &nfnl_cthelper_list);
return 0;
err2:
kfree(helper->expect_policy);
err1:
- kfree(helper);
+ kfree(nfcth);
return ret;
}
@@ -379,7 +389,8 @@ nfnl_cthelper_new(struct sock *nfnl, str
const char *helper_name;
struct nf_conntrack_helper *cur, *helper = NULL;
struct nf_conntrack_tuple tuple;
- int ret = 0, i;
+ struct nfnl_cthelper *nlcth;
+ int ret = 0;
if (!tb[NFCTH_NAME] || !tb[NFCTH_TUPLE])
return -EINVAL;
@@ -390,31 +401,22 @@ nfnl_cthelper_new(struct sock *nfnl, str
if (ret < 0)
return ret;
- rcu_read_lock();
- for (i = 0; i < nf_ct_helper_hsize && !helper; i++) {
- hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
+ list_for_each_entry(nlcth, &nfnl_cthelper_list, list) {
+ cur = &nlcth->helper;
- /* skip non-userspace conntrack helpers. */
- if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
- continue;
+ if (strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+ continue;
- if (strncmp(cur->name, helper_name,
- NF_CT_HELPER_NAME_LEN) != 0)
- continue;
+ if ((tuple.src.l3num != cur->tuple.src.l3num ||
+ tuple.dst.protonum != cur->tuple.dst.protonum))
+ continue;
- if ((tuple.src.l3num != cur->tuple.src.l3num ||
- tuple.dst.protonum != cur->tuple.dst.protonum))
- continue;
+ if (nlh->nlmsg_flags & NLM_F_EXCL)
+ return -EEXIST;
- if (nlh->nlmsg_flags & NLM_F_EXCL) {
- ret = -EEXIST;
- goto err;
- }
- helper = cur;
- break;
- }
+ helper = cur;
+ break;
}
- rcu_read_unlock();
if (helper == NULL)
ret = nfnl_cthelper_create(tb, &tuple);
@@ -422,9 +424,6 @@ nfnl_cthelper_new(struct sock *nfnl, str
ret = nfnl_cthelper_update(tb, helper);
return ret;
-err:
- rcu_read_unlock();
- return ret;
}
static int
@@ -588,11 +587,12 @@ static int
nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
const struct nlmsghdr *nlh, const struct nlattr * const tb[])
{
- int ret = -ENOENT, i;
+ int ret = -ENOENT;
struct nf_conntrack_helper *cur;
struct sk_buff *skb2;
char *helper_name = NULL;
struct nf_conntrack_tuple tuple;
+ struct nfnl_cthelper *nlcth;
bool tuple_set = false;
if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -613,45 +613,39 @@ nfnl_cthelper_get(struct sock *nfnl, str
tuple_set = true;
}
- for (i = 0; i < nf_ct_helper_hsize; i++) {
- hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
-
- /* skip non-userspace conntrack helpers. */
- if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
- continue;
-
- if (helper_name && strncmp(cur->name, helper_name,
- NF_CT_HELPER_NAME_LEN) != 0) {
- continue;
- }
- if (tuple_set &&
- (tuple.src.l3num != cur->tuple.src.l3num ||
- tuple.dst.protonum != cur->tuple.dst.protonum))
- continue;
-
- skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
- if (skb2 == NULL) {
- ret = -ENOMEM;
- break;
- }
+ list_for_each_entry(nlcth, &nfnl_cthelper_list, list) {
+ cur = &nlcth->helper;
+ if (helper_name &&
+ strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+ continue;
+
+ if (tuple_set &&
+ (tuple.src.l3num != cur->tuple.src.l3num ||
+ tuple.dst.protonum != cur->tuple.dst.protonum))
+ continue;
+
+ skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
+ if (skb2 == NULL) {
+ ret = -ENOMEM;
+ break;
+ }
- ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
- nlh->nlmsg_seq,
- NFNL_MSG_TYPE(nlh->nlmsg_type),
- NFNL_MSG_CTHELPER_NEW, cur);
- if (ret <= 0) {
- kfree_skb(skb2);
- break;
- }
+ ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
+ nlh->nlmsg_seq,
+ NFNL_MSG_TYPE(nlh->nlmsg_type),
+ NFNL_MSG_CTHELPER_NEW, cur);
+ if (ret <= 0) {
+ kfree_skb(skb2);
+ break;
+ }
- ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
- MSG_DONTWAIT);
- if (ret > 0)
- ret = 0;
+ ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
+ MSG_DONTWAIT);
+ if (ret > 0)
+ ret = 0;
- /* this avoids a loop in nfnetlink. */
- return ret == -EAGAIN ? -ENOBUFS : ret;
- }
+ /* this avoids a loop in nfnetlink. */
+ return ret == -EAGAIN ? -ENOBUFS : ret;
}
return ret;
}
@@ -662,10 +656,10 @@ nfnl_cthelper_del(struct sock *nfnl, str
{
char *helper_name = NULL;
struct nf_conntrack_helper *cur;
- struct hlist_node *tmp;
struct nf_conntrack_tuple tuple;
bool tuple_set = false, found = false;
- int i, j = 0, ret;
+ struct nfnl_cthelper *nlcth, *n;
+ int j = 0, ret;
if (tb[NFCTH_NAME])
helper_name = nla_data(tb[NFCTH_NAME]);
@@ -678,30 +672,27 @@ nfnl_cthelper_del(struct sock *nfnl, str
tuple_set = true;
}
- for (i = 0; i < nf_ct_helper_hsize; i++) {
- hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
- hnode) {
- /* skip non-userspace conntrack helpers. */
- if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
- continue;
-
- j++;
-
- if (helper_name && strncmp(cur->name, helper_name,
- NF_CT_HELPER_NAME_LEN) != 0) {
- continue;
- }
- if (tuple_set &&
- (tuple.src.l3num != cur->tuple.src.l3num ||
- tuple.dst.protonum != cur->tuple.dst.protonum))
- continue;
+ list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
+ cur = &nlcth->helper;
+ j++;
+
+ if (helper_name &&
+ strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+ continue;
+
+ if (tuple_set &&
+ (tuple.src.l3num != cur->tuple.src.l3num ||
+ tuple.dst.protonum != cur->tuple.dst.protonum))
+ continue;
+
+ found = true;
+ nf_conntrack_helper_unregister(cur);
+ kfree(cur->expect_policy);
- found = true;
- nf_conntrack_helper_unregister(cur);
- kfree(cur->expect_policy);
- kfree(cur);
- }
+ list_del(&nlcth->list);
+ kfree(nlcth);
}
+
/* Make sure we return success if we flush and there is no helpers */
return (found || j == 0) ? 0 : -ENOENT;
}
@@ -750,22 +741,16 @@ err_out:
static void __exit nfnl_cthelper_exit(void)
{
struct nf_conntrack_helper *cur;
- struct hlist_node *tmp;
- int i;
+ struct nfnl_cthelper *nlcth, *n;
nfnetlink_subsys_unregister(&nfnl_cthelper_subsys);
- for (i=0; i<nf_ct_helper_hsize; i++) {
- hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
- hnode) {
- /* skip non-userspace conntrack helpers. */
- if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
- continue;
+ list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
+ cur = &nlcth->helper;
- nf_conntrack_helper_unregister(cur);
- kfree(cur->expect_policy);
- kfree(cur);
- }
+ nf_conntrack_helper_unregister(cur);
+ kfree(cur->expect_policy);
+ kfree(nlcth);
}
}
next prev parent reply other threads:[~2017-12-22 8:46 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-22 8:45 [PATCH 4.4 00/78] 4.4.108-stable review Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 01/78] arm64: Initialise high_memory global variable earlier Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 02/78] cxl: Check if vphb exists before iterating over AFU devices Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 03/78] x86/mm: Add INVPCID helpers Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 04/78] x86/mm: Fix INVPCID asm constraint Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 05/78] x86/mm: Add a noinvpcid boot option to turn off INVPCID Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 06/78] x86/mm: If INVPCID is available, use it to flush global mappings Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 07/78] mm/rmap: batched invalidations should use existing api Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 08/78] mm/mmu_context, sched/core: Fix mmu_context.h assumption Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 09/78] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 10/78] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 11/78] x86/mm, sched/core: Uninline switch_mm() Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 12/78] x86/mm, sched/core: Turn off IRQs in switch_mm() Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 13/78] ARM: Hide finish_arch_post_lock_switch() from modules Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 14/78] sched/core: Idle_task_exit() shouldnt use switch_mm_irqs_off() Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 15/78] x86/irq: Do not substract irq_tlb_count from irq_call_count Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 16/78] ALSA: hda - add support for docking station for HP 820 G2 Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 17/78] ALSA: hda - add support for docking station for HP 840 G3 Greg Kroah-Hartman
2017-12-22 8:45 ` [PATCH 4.4 18/78] arm: kprobes: Fix the return address of multiple kretprobes Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 19/78] arm: kprobes: Align stack to 8-bytes in test code Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 20/78] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 21/78] r8152: fix the list rx_done may be used without initialization Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 22/78] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 23/78] sch_dsmark: fix invalid skb_cow() usage Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 24/78] bna: integer overflow bug in debugfs Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 26/78] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 27/78] usb: gadget: udc: remove pointer dereference after free Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 28/78] netfilter: nfnl_cthelper: fix runtime expectation policy updates Greg Kroah-Hartman
2018-01-20 18:37 ` Ben Hutchings
2017-12-22 8:46 ` [PATCH 4.4 29/78] netfilter: nfnl_cthelper: Fix memory leak Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 30/78] inet: frag: release spinlock before calling icmp_send() Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 31/78] pinctrl: st: add irq_request/release_resources callbacks Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 32/78] scsi: lpfc: Fix PT2PT PRLI reject Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 36/78] hwmon: (asus_atk0110) fix uninitialized data access Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 37/78] i2c: mux: pca954x: Add missing pca9546 definition to chip_desc Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 38/78] HID: xinmo: fix for out of range for THT 2P arcade controller Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 39/78] r8152: prevent the driver from transmitting packets with carrier off Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 40/78] s390/qeth: no ETH header for outbound AF_IUCV Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 41/78] bna: avoid writing uninitialized data into hw registers Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 42/78] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 43/78] i40e: Do not enable NAPI on q_vectors that have no rings Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 44/78] RDMA/iser: Fix possible mr leak on device removal event Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 45/78] irda: vlsi_ir: fix check for DMA mapping errors Greg Kroah-Hartman
2017-12-22 8:46 ` Greg Kroah-Hartman [this message]
2017-12-22 8:46 ` [PATCH 4.4 47/78] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 48/78] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 49/78] KVM: pci-assign: do not map smm memory slot pages in vt-d page tables Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 50/78] isdn: kcapi: avoid uninitialized data Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 51/78] xhci: plat: Register shutdown for xhci_plat Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 52/78] netfilter: nfnetlink_queue: fix secctx memory leak Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 53/78] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 54/78] cpuidle: powernv: Pass correct drv->cpumask for registration Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 55/78] bnxt_en: Fix NULL pointer dereference in reopen failure path Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 56/78] backlight: pwm_bl: Fix overflow condition Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 57/78] crypto: crypto4xx - increase context and scatter ring buffer elements Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 58/78] rtc: pl031: make interrupt optional Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 59/78] net: phy: at803x: Change error to EINVAL for invalid MAC Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 60/78] PCI: Avoid bus reset if bridge itself is broken Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 61/78] scsi: cxgb4i: fix Tx skb leak Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 62/78] scsi: mpt3sas: Fix IO error occurs on pulling out a drive from RAID1 volume created on two SATA drive Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 63/78] PCI: Create SR-IOV virtfn/physfn links before attaching driver Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 64/78] igb: check memory allocation failure Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 65/78] ixgbe: fix use of uninitialized padding Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 66/78] PCI/AER: Report non-fatal errors only to the affected endpoint Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 67/78] scsi: lpfc: Fix secure firmware updates Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 68/78] scsi: lpfc: PLOGI failures during NPIV testing Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 69/78] fm10k: ensure we process SM mbx when processing VF mbx Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 70/78] tcp: fix under-evaluated ssthresh in TCP Vegas Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 71/78] rtc: set the alarm to the next expiring timer Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 72/78] cpuidle: fix broadcast control when broadcast can not be entered Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 73/78] thermal: hisilicon: Handle return value of clk_prepare_enable Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 74/78] MIPS: math-emu: Fix final emulation phase for certain instructions Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 75/78] Revert "Bluetooth: btusb: driver to enable the usb-wakeup feature" Greg Kroah-Hartman
2017-12-22 17:32 ` Brian Norris
2017-12-23 9:16 ` Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 76/78] ALSA: hda - Clear the leftover component assignment at snd_hdac_i915_exit() Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 77/78] ALSA: hda - Degrade i915 binding failure message Greg Kroah-Hartman
2017-12-22 8:46 ` [PATCH 4.4 78/78] ALSA: hda - Fix yet another i915 pointer leftover in error path Greg Kroah-Hartman
2017-12-22 15:48 ` [PATCH 4.4 00/78] 4.4.108-stable review Nathan Chancellor
2017-12-22 15:58 ` Greg Kroah-Hartman
2017-12-22 17:24 ` Naresh Kamboju
2017-12-23 9:17 ` Greg Kroah-Hartman
2017-12-22 18:18 ` Guenter Roeck
2017-12-23 9:19 ` Greg Kroah-Hartman
2017-12-23 14:46 ` Greg Kroah-Hartman
2017-12-23 16:13 ` Guenter Roeck
2017-12-23 16:26 ` Greg Kroah-Hartman
2017-12-23 17:11 ` Guenter Roeck
2017-12-23 21:20 ` Guenter Roeck
2017-12-22 21:11 ` Shuah Khan
2017-12-24 1:30 ` Guenter Roeck
2017-12-24 7:43 ` Greg Kroah-Hartman
2017-12-24 16:52 ` Guenter Roeck
2017-12-25 13:35 ` 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=20171222084602.068297519@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=alexander.levin@verizon.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=stable@vger.kernel.org \
--cc=zlpnobody@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).