All of lore.kernel.org
 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,
	Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>,
	Pablo Neira Ayuso <pablo@netfilter.org>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.4 094/111] Revert "netfilter: x_tables: Switch synchronization to RCU"
Date: Mon, 29 Mar 2021 09:58:42 +0200	[thread overview]
Message-ID: <20210329075618.343390003@linuxfoundation.org> (raw)
In-Reply-To: <20210329075615.186199980@linuxfoundation.org>

From: Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>

[ Upstream commit d3d40f237480abf3268956daf18cdc56edd32834 ]

This reverts commit cc00bcaa589914096edef7fb87ca5cee4a166b5c.

This (and the preceding) patch basically re-implemented the RCU
mechanisms of patch 784544739a25. That patch was replaced because of the
performance problems that it created when replacing tables. Now, we have
the same issue: the call to synchronize_rcu() makes replacing tables
slower by as much as an order of magnitude.

Prior to using RCU a script calling "iptables" approx. 200 times was
taking 1.16s. With RCU this increased to 11.59s.

Revert these patches and fix the issue in a different way.

Signed-off-by: Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 include/linux/netfilter/x_tables.h |  5 +--
 net/ipv4/netfilter/arp_tables.c    | 14 ++++-----
 net/ipv4/netfilter/ip_tables.c     | 14 ++++-----
 net/ipv6/netfilter/ip6_tables.c    | 14 ++++-----
 net/netfilter/x_tables.c           | 49 +++++++++++++++++++++---------
 5 files changed, 56 insertions(+), 40 deletions(-)

diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
index f5c21b7d2974..1b261c51b3a3 100644
--- a/include/linux/netfilter/x_tables.h
+++ b/include/linux/netfilter/x_tables.h
@@ -227,7 +227,7 @@ struct xt_table {
 	unsigned int valid_hooks;
 
 	/* Man behind the curtain... */
-	struct xt_table_info __rcu *private;
+	struct xt_table_info *private;
 
 	/* Set this to THIS_MODULE if you are a module, otherwise NULL */
 	struct module *me;
@@ -448,9 +448,6 @@ xt_get_per_cpu_counter(struct xt_counters *cnt, unsigned int cpu)
 
 struct nf_hook_ops *xt_hook_ops_alloc(const struct xt_table *, nf_hookfn *);
 
-struct xt_table_info
-*xt_table_get_private_protected(const struct xt_table *table);
-
 #ifdef CONFIG_COMPAT
 #include <net/compat.h>
 
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
index 12d242fedffd..680a1320399d 100644
--- a/net/ipv4/netfilter/arp_tables.c
+++ b/net/ipv4/netfilter/arp_tables.c
@@ -203,7 +203,7 @@ unsigned int arpt_do_table(struct sk_buff *skb,
 
 	local_bh_disable();
 	addend = xt_write_recseq_begin();
-	private = rcu_access_pointer(table->private);
+	private = READ_ONCE(table->private); /* Address dependency. */
 	cpu     = smp_processor_id();
 	table_base = private->entries;
 	jumpstack  = (struct arpt_entry **)private->jumpstack[cpu];
@@ -649,7 +649,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table)
 {
 	unsigned int countersize;
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 
 	/* We need atomic snapshot of counters: rest doesn't change
 	 * (other than comefrom, which userspace doesn't care
@@ -673,7 +673,7 @@ static int copy_entries_to_user(unsigned int total_size,
 	unsigned int off, num;
 	const struct arpt_entry *e;
 	struct xt_counters *counters;
-	struct xt_table_info *private = xt_table_get_private_protected(table);
+	struct xt_table_info *private = table->private;
 	int ret = 0;
 	void *loc_cpu_entry;
 
@@ -808,7 +808,7 @@ static int get_info(struct net *net, void __user *user,
 	t = xt_request_find_table_lock(net, NFPROTO_ARP, name);
 	if (!IS_ERR(t)) {
 		struct arpt_getinfo info;
-		const struct xt_table_info *private = xt_table_get_private_protected(t);
+		const struct xt_table_info *private = t->private;
 #ifdef CONFIG_COMPAT
 		struct xt_table_info tmp;
 
@@ -861,7 +861,7 @@ static int get_entries(struct net *net, struct arpt_get_entries __user *uptr,
 
 	t = xt_find_table_lock(net, NFPROTO_ARP, get.name);
 	if (!IS_ERR(t)) {
-		const struct xt_table_info *private = xt_table_get_private_protected(t);
+		const struct xt_table_info *private = t->private;
 
 		if (get.size == private->size)
 			ret = copy_entries_to_user(private->size,
@@ -1020,7 +1020,7 @@ static int do_add_counters(struct net *net, const void __user *user,
 	}
 
 	local_bh_disable();
-	private = xt_table_get_private_protected(t);
+	private = t->private;
 	if (private->number != tmp.num_counters) {
 		ret = -EINVAL;
 		goto unlock_up_free;
@@ -1357,7 +1357,7 @@ static int compat_copy_entries_to_user(unsigned int total_size,
 				       void __user *userptr)
 {
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 	void __user *pos;
 	unsigned int size;
 	int ret = 0;
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
index cbbc8a7b8278..8c320b7a423c 100644
--- a/net/ipv4/netfilter/ip_tables.c
+++ b/net/ipv4/netfilter/ip_tables.c
@@ -258,7 +258,7 @@ ipt_do_table(struct sk_buff *skb,
 	WARN_ON(!(table->valid_hooks & (1 << hook)));
 	local_bh_disable();
 	addend = xt_write_recseq_begin();
-	private = rcu_access_pointer(table->private);
+	private = READ_ONCE(table->private); /* Address dependency. */
 	cpu        = smp_processor_id();
 	table_base = private->entries;
 	jumpstack  = (struct ipt_entry **)private->jumpstack[cpu];
@@ -791,7 +791,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table)
 {
 	unsigned int countersize;
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 
 	/* We need atomic snapshot of counters: rest doesn't change
 	   (other than comefrom, which userspace doesn't care
@@ -815,7 +815,7 @@ copy_entries_to_user(unsigned int total_size,
 	unsigned int off, num;
 	const struct ipt_entry *e;
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 	int ret = 0;
 	const void *loc_cpu_entry;
 
@@ -965,7 +965,7 @@ static int get_info(struct net *net, void __user *user,
 	t = xt_request_find_table_lock(net, AF_INET, name);
 	if (!IS_ERR(t)) {
 		struct ipt_getinfo info;
-		const struct xt_table_info *private = xt_table_get_private_protected(t);
+		const struct xt_table_info *private = t->private;
 #ifdef CONFIG_COMPAT
 		struct xt_table_info tmp;
 
@@ -1019,7 +1019,7 @@ get_entries(struct net *net, struct ipt_get_entries __user *uptr,
 
 	t = xt_find_table_lock(net, AF_INET, get.name);
 	if (!IS_ERR(t)) {
-		const struct xt_table_info *private = xt_table_get_private_protected(t);
+		const struct xt_table_info *private = t->private;
 		if (get.size == private->size)
 			ret = copy_entries_to_user(private->size,
 						   t, uptr->entrytable);
@@ -1175,7 +1175,7 @@ do_add_counters(struct net *net, const void __user *user,
 	}
 
 	local_bh_disable();
-	private = xt_table_get_private_protected(t);
+	private = t->private;
 	if (private->number != tmp.num_counters) {
 		ret = -EINVAL;
 		goto unlock_up_free;
@@ -1570,7 +1570,7 @@ compat_copy_entries_to_user(unsigned int total_size, struct xt_table *table,
 			    void __user *userptr)
 {
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 	void __user *pos;
 	unsigned int size;
 	int ret = 0;
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
index 01cdde25eb16..85d8ed970cdc 100644
--- a/net/ipv6/netfilter/ip6_tables.c
+++ b/net/ipv6/netfilter/ip6_tables.c
@@ -280,7 +280,7 @@ ip6t_do_table(struct sk_buff *skb,
 
 	local_bh_disable();
 	addend = xt_write_recseq_begin();
-	private = rcu_access_pointer(table->private);
+	private = READ_ONCE(table->private); /* Address dependency. */
 	cpu        = smp_processor_id();
 	table_base = private->entries;
 	jumpstack  = (struct ip6t_entry **)private->jumpstack[cpu];
@@ -807,7 +807,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table)
 {
 	unsigned int countersize;
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 
 	/* We need atomic snapshot of counters: rest doesn't change
 	   (other than comefrom, which userspace doesn't care
@@ -831,7 +831,7 @@ copy_entries_to_user(unsigned int total_size,
 	unsigned int off, num;
 	const struct ip6t_entry *e;
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 	int ret = 0;
 	const void *loc_cpu_entry;
 
@@ -981,7 +981,7 @@ static int get_info(struct net *net, void __user *user,
 	t = xt_request_find_table_lock(net, AF_INET6, name);
 	if (!IS_ERR(t)) {
 		struct ip6t_getinfo info;
-		const struct xt_table_info *private = xt_table_get_private_protected(t);
+		const struct xt_table_info *private = t->private;
 #ifdef CONFIG_COMPAT
 		struct xt_table_info tmp;
 
@@ -1036,7 +1036,7 @@ get_entries(struct net *net, struct ip6t_get_entries __user *uptr,
 
 	t = xt_find_table_lock(net, AF_INET6, get.name);
 	if (!IS_ERR(t)) {
-		struct xt_table_info *private = xt_table_get_private_protected(t);
+		struct xt_table_info *private = t->private;
 		if (get.size == private->size)
 			ret = copy_entries_to_user(private->size,
 						   t, uptr->entrytable);
@@ -1191,7 +1191,7 @@ do_add_counters(struct net *net, const void __user *user, unsigned int len,
 	}
 
 	local_bh_disable();
-	private = xt_table_get_private_protected(t);
+	private = t->private;
 	if (private->number != tmp.num_counters) {
 		ret = -EINVAL;
 		goto unlock_up_free;
@@ -1579,7 +1579,7 @@ compat_copy_entries_to_user(unsigned int total_size, struct xt_table *table,
 			    void __user *userptr)
 {
 	struct xt_counters *counters;
-	const struct xt_table_info *private = xt_table_get_private_protected(table);
+	const struct xt_table_info *private = table->private;
 	void __user *pos;
 	unsigned int size;
 	int ret = 0;
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 8b60fc04c67c..ef6d51a3798b 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -1351,14 +1351,6 @@ struct xt_counters *xt_counters_alloc(unsigned int counters)
 }
 EXPORT_SYMBOL(xt_counters_alloc);
 
-struct xt_table_info
-*xt_table_get_private_protected(const struct xt_table *table)
-{
-	return rcu_dereference_protected(table->private,
-					 mutex_is_locked(&xt[table->af].mutex));
-}
-EXPORT_SYMBOL(xt_table_get_private_protected);
-
 struct xt_table_info *
 xt_replace_table(struct xt_table *table,
 	      unsigned int num_counters,
@@ -1366,6 +1358,7 @@ xt_replace_table(struct xt_table *table,
 	      int *error)
 {
 	struct xt_table_info *private;
+	unsigned int cpu;
 	int ret;
 
 	ret = xt_jumpstack_alloc(newinfo);
@@ -1375,20 +1368,47 @@ xt_replace_table(struct xt_table *table,
 	}
 
 	/* Do the substitution. */
-	private = xt_table_get_private_protected(table);
+	local_bh_disable();
+	private = table->private;
 
 	/* Check inside lock: is the old number correct? */
 	if (num_counters != private->number) {
 		pr_debug("num_counters != table->private->number (%u/%u)\n",
 			 num_counters, private->number);
+		local_bh_enable();
 		*error = -EAGAIN;
 		return NULL;
 	}
 
 	newinfo->initial_entries = private->initial_entries;
+	/*
+	 * Ensure contents of newinfo are visible before assigning to
+	 * private.
+	 */
+	smp_wmb();
+	table->private = newinfo;
+
+	/* make sure all cpus see new ->private value */
+	smp_wmb();
 
-	rcu_assign_pointer(table->private, newinfo);
-	synchronize_rcu();
+	/*
+	 * Even though table entries have now been swapped, other CPU's
+	 * may still be using the old entries...
+	 */
+	local_bh_enable();
+
+	/* ... so wait for even xt_recseq on all cpus */
+	for_each_possible_cpu(cpu) {
+		seqcount_t *s = &per_cpu(xt_recseq, cpu);
+		u32 seq = raw_read_seqcount(s);
+
+		if (seq & 1) {
+			do {
+				cond_resched();
+				cpu_relax();
+			} while (seq == raw_read_seqcount(s));
+		}
+	}
 
 #ifdef CONFIG_AUDIT
 	if (audit_enabled) {
@@ -1429,12 +1449,12 @@ struct xt_table *xt_register_table(struct net *net,
 	}
 
 	/* Simplifies replace_table code. */
-	rcu_assign_pointer(table->private, bootstrap);
+	table->private = bootstrap;
 
 	if (!xt_replace_table(table, 0, newinfo, &ret))
 		goto unlock;
 
-	private = xt_table_get_private_protected(table);
+	private = table->private;
 	pr_debug("table->private->number = %u\n", private->number);
 
 	/* save number of initial entries */
@@ -1457,8 +1477,7 @@ void *xt_unregister_table(struct xt_table *table)
 	struct xt_table_info *private;
 
 	mutex_lock(&xt[table->af].mutex);
-	private = xt_table_get_private_protected(table);
-	RCU_INIT_POINTER(table->private, NULL);
+	private = table->private;
 	list_del(&table->list);
 	mutex_unlock(&xt[table->af].mutex);
 	kfree(table);
-- 
2.30.1




  parent reply	other threads:[~2021-03-29  8:24 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-29  7:57 [PATCH 5.4 000/111] 5.4.109-rc1 review Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 001/111] hugetlbfs: hugetlb_fault_mutex_hash() cleanup Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 002/111] net: fec: ptp: avoid register access when ipg clock is disabled Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 003/111] powerpc/4xx: Fix build errors from mfdcr() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 004/111] atm: eni: dont release is never initialized Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 005/111] atm: lanai: dont run lanai_dev_close if not open Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 006/111] Revert "r8152: adjust the settings about MAC clock speed down for RTL8153" Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 007/111] ALSA: hda: ignore invalid NHLT table Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 008/111] ixgbe: Fix memleak in ixgbe_configure_clsu32 Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 009/111] net: tehuti: fix error return code in bdx_probe() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 010/111] net: intel: iavf: fix error return code of iavf_init_get_resources() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 011/111] sun/niu: fix wrong RXMAC_BC_FRM_CNT_COUNT count Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 012/111] gianfar: fix jumbo packets+napi+rx overrun crash Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 013/111] cifs: ask for more credit on async read/write code paths Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 014/111] cpufreq: blacklist Arm Vexpress platforms in cpufreq-dt-platdev Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 015/111] gpiolib: acpi: Add missing IRQF_ONESHOT Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 016/111] nfs: fix PNFS_FLEXFILE_LAYOUT Kconfig default Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 017/111] NFS: Correct size calculation for create reply length Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 018/111] net: hisilicon: hns: fix error return code of hns_nic_clear_all_rx_fetch() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 019/111] net: wan: fix error return code of uhdlc_init() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 020/111] net: davicom: Use platform_get_irq_optional() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 021/111] atm: uPD98402: fix incorrect allocation Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 022/111] atm: idt77252: fix null-ptr-dereference Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 023/111] cifs: change noisy error message to FYI Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 024/111] irqchip/ingenic: Add support for the JZ4760 Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 025/111] sparc64: Fix opcode filtering in handling of no fault loads Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 026/111] habanalabs: Call put_pid() when releasing control device Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 027/111] u64_stats,lockdep: Fix u64_stats_init() vs lockdep Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 028/111] regulator: qcom-rpmh: Correct the pmic5_hfsmps515 buck Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 029/111] drm/amd/display: Revert dram_clock_change_latency for DCN2.1 Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 030/111] drm/amdgpu: fb BO should be ttm_bo_type_device Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 031/111] drm/radeon: fix AGP dependency Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 032/111] nvme: add NVME_REQ_CANCELLED flag in nvme_cancel_request() Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 033/111] nvme-fc: return NVME_SC_HOST_ABORTED_CMD when a command has been aborted Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 034/111] nvme-pci: add the DISABLE_WRITE_ZEROES quirk for a Samsung PM1725a Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 035/111] nfs: we dont support removing system.nfs4_acl Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 036/111] block: Suppress uevent for hidden device when removed Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 037/111] ia64: fix ia64_syscall_get_set_arguments() for break-based syscalls Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 038/111] ia64: fix ptrace(PTRACE_SYSCALL_INFO_EXIT) sign Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 039/111] netsec: restore phy power state after controller reset Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 040/111] platform/x86: intel-vbtn: Stop reporting SW_DOCK events Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 041/111] squashfs: fix inode lookup sanity checks Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 042/111] squashfs: fix xattr id and id " Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 043/111] kasan: fix per-page tags for non-page_alloc pages Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 044/111] gcov: fix clang-11+ support Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 045/111] ACPI: video: Add missing callback back for Sony VPCEH3U1E Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 046/111] arm64: dts: ls1046a: mark crypto engine dma coherent Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 047/111] arm64: dts: ls1012a: " Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 048/111] arm64: dts: ls1043a: " Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 049/111] ARM: dts: at91-sama5d27_som1: fix phy address to 7 Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 050/111] integrity: double check iint_cache was initialized Greg Kroah-Hartman
2021-03-29  7:57 ` [PATCH 5.4 051/111] dm verity: fix DM_VERITY_OPTS_MAX value Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 052/111] dm ioctl: fix out of bounds array access when no devices Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 053/111] bus: omap_l3_noc: mark l3 irqs as IRQF_NO_THREAD Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 054/111] veth: Store queue_mapping independently of XDP prog presence Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 055/111] libbpf: Fix INSTALL flag order Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 056/111] net/mlx5e: Dont match on Geneve options in case option masks are all zero Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 057/111] ipv6: fix suspecious RCU usage warning Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 058/111] macvlan: macvlan_count_rx() needs to be aware of preemption Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 059/111] net: sched: validate stab values Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 060/111] net: dsa: bcm_sf2: Qualify phydev->dev_flags based on port Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 061/111] igc: Fix Pause Frame Advertising Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 062/111] igc: Fix Supported Pause Frame Link Setting Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 063/111] e1000e: add rtnl_lock() to e1000_reset_task Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 064/111] e1000e: Fix error handling in e1000_set_d0_lplu_state_82571 Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 065/111] net/qlcnic: Fix a use after free in qlcnic_83xx_get_minidump_template Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 066/111] ftgmac100: Restart MAC HW once Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 067/111] selftests/bpf: Set gopt opt_class to 0 if get tunnel opt failed Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 068/111] netfilter: ctnetlink: fix dump of the expect mask attribute Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 069/111] tcp: relookup sock for RST+ACK packets handled by obsolete req sock Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 070/111] can: peak_usb: add forgotten supported devices Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 071/111] can: flexcan: flexcan_chip_freeze(): fix chip freeze for missing bitrate Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 072/111] can: kvaser_pciefd: Always disable bus load reporting Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 073/111] can: c_can_pci: c_can_pci_remove(): fix use-after-free Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 074/111] can: c_can: move runtime PM enable/disable to c_can_platform Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 075/111] can: m_can: m_can_do_rx_poll(): fix extraneous msg loss warning Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 076/111] can: m_can: m_can_rx_peripheral(): fix RX being blocked by errors Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 077/111] mac80211: fix rate mask reset Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 078/111] nfp: flower: fix pre_tun mask id allocation Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 079/111] libbpf: Use SOCK_CLOEXEC when opening the netlink socket Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 080/111] octeontx2-af: Fix irq free in rvu teardown Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 081/111] octeontx2-af: fix infinite loop in unmapping NPC counter Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 082/111] net: cdc-phonet: fix data-interface release on probe failure Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 083/111] r8152: limit the RX buffer size of RTL8153A for USB 2.0 Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 084/111] net: stmmac: dwmac-sun8i: Provide TX and RX fifo sizes Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 085/111] selftests: forwarding: vxlan_bridge_1d: Fix vxlan ecn decapsulate value Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 086/111] libbpf: Fix BTF dump of pointer-to-array-of-struct Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 087/111] drm/msm: fix shutdown hook in case GPU components failed to bind Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 088/111] arm64: kdump: update ppos when reading elfcorehdr Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 089/111] PM: runtime: Defer suspending suppliers Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 090/111] net/mlx5e: Fix error path for ethtool set-priv-flag Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 091/111] PM: EM: postpone creating the debugfs dir till fs_initcall Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 092/111] RDMA/cxgb4: Fix adapter LE hash errors while destroying ipv6 listening server Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 093/111] bpf: Dont do bpf_cgroup_storage_set() for kuprobe/tp programs Greg Kroah-Hartman
2021-03-29  7:58 ` Greg Kroah-Hartman [this message]
2021-03-29  7:58 ` [PATCH 5.4 095/111] netfilter: x_tables: Use correct memory barriers Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 096/111] Revert "netfilter: x_tables: Update remaining dereference to RCU" Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 097/111] ACPI: scan: Rearrange memory allocation in acpi_device_add() Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 098/111] ACPI: scan: Use unique number for instance_no Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 099/111] perf auxtrace: Fix auxtrace queue conflict Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 100/111] block: recalculate segment count for multi-segment discards correctly Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 101/111] scsi: Revert "qla2xxx: Make sure that aborted commands are freed" Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 102/111] scsi: qedi: Fix error return code of qedi_alloc_global_queues() Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 103/111] scsi: mpt3sas: Fix error return code of mpt3sas_base_attach() Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 104/111] locking/mutex: Fix non debug version of mutex_lock_io_nested() Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 105/111] x86/mem_encrypt: Correct physical address calculation in __set_clr_pte_enc() Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 106/111] can: dev: Move device back to init netns on owning netns delete Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 107/111] net: dsa: b53: VLAN filtering is global to all users Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 108/111] net: qrtr: fix a kernel-infoleak in qrtr_recvmsg() Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 109/111] mac80211: fix double free in ibss_leave Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 110/111] ext4: add reclaim checks to xattr code Greg Kroah-Hartman
2021-03-29  7:58 ` [PATCH 5.4 111/111] can: peak_usb: Revert "can: peak_usb: add forgotten supported devices" Greg Kroah-Hartman
2021-03-29 17:36 ` [PATCH 5.4 000/111] 5.4.109-rc1 review Florian Fainelli
2021-03-29 21:33 ` Guenter Roeck
2021-03-30  1:10 ` Samuel Zou
2021-03-30  1:27 ` Shuah Khan
2021-03-30  5:50 ` Naresh Kamboju
2021-03-30  9:35 ` Jon Hunter

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=20210329075618.343390003@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.tomlinson@alliedtelesis.co.nz \
    --cc=pablo@netfilter.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.