From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Shawn Bohrer <sbohrer@cloudflare.com>,
Florian Westphal <fw@strlen.de>,
Pablo Neira Ayuso <pablo@netfilter.org>
Subject: [PATCH 4.20 010/111] netfilter: nf_conncount: merge lookup and add functions
Date: Mon, 21 Jan 2019 14:42:04 +0100 [thread overview]
Message-ID: <20190121122456.891645963@linuxfoundation.org> (raw)
In-Reply-To: <20190121122455.819406896@linuxfoundation.org>
4.20-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <fw@strlen.de>
commit df4a902509766897f7371fdfa4c3bf8bc321b55d upstream.
'lookup' is always followed by 'add'.
Merge both and make the list-walk part of nf_conncount_add().
This also avoids one unneeded unlock/re-lock pair.
Extra care needs to be taken in count_tree, as we only hold rcu
read lock, i.e. we can only insert to an existing tree node after
acquiring its lock and making sure it has a nonzero count.
As a zero count should be rare, just fall back to insert_tree()
(which acquires tree lock).
This issue and its solution were pointed out by Shawn Bohrer
during patch review.
Reviewed-by: Shawn Bohrer <sbohrer@cloudflare.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/net/netfilter/nf_conntrack_count.h | 18 ---
net/netfilter/nf_conncount.c | 146 +++++++++++++----------------
net/netfilter/nft_connlimit.c | 14 --
3 files changed, 72 insertions(+), 106 deletions(-)
--- a/include/net/netfilter/nf_conntrack_count.h
+++ b/include/net/netfilter/nf_conntrack_count.h
@@ -5,12 +5,6 @@
struct nf_conncount_data;
-enum nf_conncount_list_add {
- NF_CONNCOUNT_ADDED, /* list add was ok */
- NF_CONNCOUNT_ERR, /* -ENOMEM, must drop skb */
- NF_CONNCOUNT_SKIP, /* list is already reclaimed by gc */
-};
-
struct nf_conncount_list {
spinlock_t list_lock;
struct list_head head; /* connections with the same filtering key */
@@ -29,18 +23,12 @@ unsigned int nf_conncount_count(struct n
const struct nf_conntrack_tuple *tuple,
const struct nf_conntrack_zone *zone);
-void nf_conncount_lookup(struct net *net, struct nf_conncount_list *list,
- const struct nf_conntrack_tuple *tuple,
- const struct nf_conntrack_zone *zone,
- bool *addit);
+int nf_conncount_add(struct net *net, struct nf_conncount_list *list,
+ const struct nf_conntrack_tuple *tuple,
+ const struct nf_conntrack_zone *zone);
void nf_conncount_list_init(struct nf_conncount_list *list);
-enum nf_conncount_list_add
-nf_conncount_add(struct nf_conncount_list *list,
- const struct nf_conntrack_tuple *tuple,
- const struct nf_conntrack_zone *zone);
-
bool nf_conncount_gc_list(struct net *net,
struct nf_conncount_list *list);
--- a/net/netfilter/nf_conncount.c
+++ b/net/netfilter/nf_conncount.c
@@ -83,38 +83,6 @@ static int key_diff(const u32 *a, const
return memcmp(a, b, klen * sizeof(u32));
}
-enum nf_conncount_list_add
-nf_conncount_add(struct nf_conncount_list *list,
- const struct nf_conntrack_tuple *tuple,
- const struct nf_conntrack_zone *zone)
-{
- struct nf_conncount_tuple *conn;
-
- if (WARN_ON_ONCE(list->count > INT_MAX))
- return NF_CONNCOUNT_ERR;
-
- conn = kmem_cache_alloc(conncount_conn_cachep, GFP_ATOMIC);
- if (conn == NULL)
- return NF_CONNCOUNT_ERR;
-
- conn->tuple = *tuple;
- conn->zone = *zone;
- conn->cpu = raw_smp_processor_id();
- conn->jiffies32 = (u32)jiffies;
- conn->dead = false;
- spin_lock_bh(&list->list_lock);
- if (list->dead == true) {
- kmem_cache_free(conncount_conn_cachep, conn);
- spin_unlock_bh(&list->list_lock);
- return NF_CONNCOUNT_SKIP;
- }
- list_add_tail(&conn->node, &list->head);
- list->count++;
- spin_unlock_bh(&list->list_lock);
- return NF_CONNCOUNT_ADDED;
-}
-EXPORT_SYMBOL_GPL(nf_conncount_add);
-
static void __conn_free(struct rcu_head *h)
{
struct nf_conncount_tuple *conn;
@@ -177,11 +145,10 @@ find_or_evict(struct net *net, struct nf
return ERR_PTR(-EAGAIN);
}
-void nf_conncount_lookup(struct net *net,
- struct nf_conncount_list *list,
- const struct nf_conntrack_tuple *tuple,
- const struct nf_conntrack_zone *zone,
- bool *addit)
+static int __nf_conncount_add(struct net *net,
+ struct nf_conncount_list *list,
+ const struct nf_conntrack_tuple *tuple,
+ const struct nf_conntrack_zone *zone)
{
const struct nf_conntrack_tuple_hash *found;
struct nf_conncount_tuple *conn, *conn_n;
@@ -189,9 +156,6 @@ void nf_conncount_lookup(struct net *net
unsigned int collect = 0;
bool free_entry = false;
- /* best effort only */
- *addit = tuple ? true : false;
-
/* check the saved connections */
list_for_each_entry_safe(conn, conn_n, &list->head, node) {
if (collect > CONNCOUNT_GC_MAX_NODES)
@@ -201,21 +165,19 @@ void nf_conncount_lookup(struct net *net
if (IS_ERR(found)) {
/* Not found, but might be about to be confirmed */
if (PTR_ERR(found) == -EAGAIN) {
- if (!tuple)
- continue;
-
if (nf_ct_tuple_equal(&conn->tuple, tuple) &&
nf_ct_zone_id(&conn->zone, conn->zone.dir) ==
nf_ct_zone_id(zone, zone->dir))
- *addit = false;
- } else if (PTR_ERR(found) == -ENOENT)
+ return 0; /* already exists */
+ } else {
collect++;
+ }
continue;
}
found_ct = nf_ct_tuplehash_to_ctrack(found);
- if (tuple && nf_ct_tuple_equal(&conn->tuple, tuple) &&
+ if (nf_ct_tuple_equal(&conn->tuple, tuple) &&
nf_ct_zone_equal(found_ct, zone, zone->dir)) {
/*
* We should not see tuples twice unless someone hooks
@@ -223,7 +185,8 @@ void nf_conncount_lookup(struct net *net
*
* Attempt to avoid a re-add in this case.
*/
- *addit = false;
+ nf_ct_put(found_ct);
+ return 0;
} else if (already_closed(found_ct)) {
/*
* we do not care about connections which are
@@ -237,8 +200,38 @@ void nf_conncount_lookup(struct net *net
nf_ct_put(found_ct);
}
+
+ if (WARN_ON_ONCE(list->count > INT_MAX))
+ return -EOVERFLOW;
+
+ conn = kmem_cache_alloc(conncount_conn_cachep, GFP_ATOMIC);
+ if (conn == NULL)
+ return -ENOMEM;
+
+ conn->tuple = *tuple;
+ conn->zone = *zone;
+ conn->cpu = raw_smp_processor_id();
+ conn->jiffies32 = (u32)jiffies;
+ list_add_tail(&conn->node, &list->head);
+ list->count++;
+ return 0;
+}
+
+int nf_conncount_add(struct net *net,
+ struct nf_conncount_list *list,
+ const struct nf_conntrack_tuple *tuple,
+ const struct nf_conntrack_zone *zone)
+{
+ int ret;
+
+ /* check the saved connections */
+ spin_lock_bh(&list->list_lock);
+ ret = __nf_conncount_add(net, list, tuple, zone);
+ spin_unlock_bh(&list->list_lock);
+
+ return ret;
}
-EXPORT_SYMBOL_GPL(nf_conncount_lookup);
+EXPORT_SYMBOL_GPL(nf_conncount_add);
void nf_conncount_list_init(struct nf_conncount_list *list)
{
@@ -339,13 +332,11 @@ insert_tree(struct net *net,
const struct nf_conntrack_tuple *tuple,
const struct nf_conntrack_zone *zone)
{
- enum nf_conncount_list_add ret;
struct nf_conncount_rb *gc_nodes[CONNCOUNT_GC_MAX_NODES];
struct rb_node **rbnode, *parent;
struct nf_conncount_rb *rbconn;
struct nf_conncount_tuple *conn;
unsigned int count = 0, gc_count = 0;
- bool node_found = false;
bool do_gc = true;
spin_lock_bh(&nf_conncount_locks[hash]);
@@ -363,20 +354,15 @@ restart:
} else if (diff > 0) {
rbnode = &((*rbnode)->rb_right);
} else {
- /* unlikely: other cpu added node already */
- node_found = true;
- ret = nf_conncount_add(&rbconn->list, tuple, zone);
- if (ret == NF_CONNCOUNT_ERR) {
+ int ret;
+
+ ret = nf_conncount_add(net, &rbconn->list, tuple, zone);
+ if (ret)
count = 0; /* hotdrop */
- } else if (ret == NF_CONNCOUNT_ADDED) {
+ else
count = rbconn->list.count;
- } else {
- /* NF_CONNCOUNT_SKIP, rbconn is already
- * reclaimed by gc, insert a new tree node
- */
- node_found = false;
- }
- break;
+ tree_nodes_free(root, gc_nodes, gc_count);
+ goto out_unlock;
}
if (gc_count >= ARRAY_SIZE(gc_nodes))
@@ -394,9 +380,6 @@ restart:
goto restart;
}
- if (node_found)
- goto out_unlock;
-
/* expected case: match, insert new node */
rbconn = kmem_cache_alloc(conncount_rb_cachep, GFP_ATOMIC);
if (rbconn == NULL)
@@ -431,7 +414,6 @@ count_tree(struct net *net,
const struct nf_conntrack_tuple *tuple,
const struct nf_conntrack_zone *zone)
{
- enum nf_conncount_list_add ret;
struct rb_root *root;
struct rb_node *parent;
struct nf_conncount_rb *rbconn;
@@ -444,7 +426,6 @@ count_tree(struct net *net,
parent = rcu_dereference_raw(root->rb_node);
while (parent) {
int diff;
- bool addit;
rbconn = rb_entry(parent, struct nf_conncount_rb, node);
@@ -454,24 +435,29 @@ count_tree(struct net *net,
} else if (diff > 0) {
parent = rcu_dereference_raw(parent->rb_right);
} else {
- /* same source network -> be counted! */
- nf_conncount_lookup(net, &rbconn->list, tuple, zone,
- &addit);
+ int ret;
- if (!addit)
+ if (!tuple) {
+ nf_conncount_gc_list(net, &rbconn->list);
return rbconn->list.count;
+ }
- ret = nf_conncount_add(&rbconn->list, tuple, zone);
- if (ret == NF_CONNCOUNT_ERR) {
- return 0; /* hotdrop */
- } else if (ret == NF_CONNCOUNT_ADDED) {
- return rbconn->list.count;
- } else {
- /* NF_CONNCOUNT_SKIP, rbconn is already
- * reclaimed by gc, insert a new tree node
- */
+ spin_lock_bh(&rbconn->list.list_lock);
+ /* Node might be about to be free'd.
+ * We need to defer to insert_tree() in this case.
+ */
+ if (rbconn->list.count == 0) {
+ spin_unlock_bh(&rbconn->list.list_lock);
break;
}
+
+ /* same source network -> be counted! */
+ ret = __nf_conncount_add(net, &rbconn->list, tuple, zone);
+ spin_unlock_bh(&rbconn->list.list_lock);
+ if (ret)
+ return 0; /* hotdrop */
+ else
+ return rbconn->list.count;
}
}
--- a/net/netfilter/nft_connlimit.c
+++ b/net/netfilter/nft_connlimit.c
@@ -30,7 +30,6 @@ static inline void nft_connlimit_do_eval
enum ip_conntrack_info ctinfo;
const struct nf_conn *ct;
unsigned int count;
- bool addit;
tuple_ptr = &tuple;
@@ -44,19 +43,12 @@ static inline void nft_connlimit_do_eval
return;
}
- nf_conncount_lookup(nft_net(pkt), &priv->list, tuple_ptr, zone,
- &addit);
- count = priv->list.count;
-
- if (!addit)
- goto out;
-
- if (nf_conncount_add(&priv->list, tuple_ptr, zone) == NF_CONNCOUNT_ERR) {
+ if (nf_conncount_add(nft_net(pkt), &priv->list, tuple_ptr, zone)) {
regs->verdict.code = NF_DROP;
return;
}
- count++;
-out:
+
+ count = priv->list.count;
if ((count > priv->limit) ^ priv->invert) {
regs->verdict.code = NFT_BREAK;
next prev parent reply other threads:[~2019-01-21 13:48 UTC|newest]
Thread overview: 122+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-21 13:41 [PATCH 4.20 000/111] 4.20.4-stable review Greg Kroah-Hartman
2019-01-21 13:41 ` [PATCH 4.20 001/111] tty/ldsem: Wake up readers after timed out down_write() Greg Kroah-Hartman
2019-01-21 13:41 ` [PATCH 4.20 002/111] tty: Hold tty_ldisc_lock() during tty_reopen() Greg Kroah-Hartman
2019-01-21 13:41 ` [PATCH 4.20 003/111] tty: Simplify tty->count math in tty_reopen() Greg Kroah-Hartman
2019-01-21 13:41 ` [PATCH 4.20 004/111] tty: Dont hold ldisc lock in tty_reopen() if ldisc present Greg Kroah-Hartman
2019-01-21 13:41 ` [PATCH 4.20 005/111] can: gw: ensure DLC boundaries after CAN frame modification Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 006/111] netfilter: nf_conncount: replace CONNCOUNT_LOCK_SLOTS with CONNCOUNT_SLOTS Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 007/111] netfilter: nf_conncount: dont skip eviction when age is negative Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 008/111] netfilter: nf_conncount: split gc in two phases Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 009/111] netfilter: nf_conncount: restart search when nodes have been erased Greg Kroah-Hartman
2019-01-21 13:42 ` Greg Kroah-Hartman [this message]
2019-01-21 13:42 ` [PATCH 4.20 011/111] netfilter: nf_conncount: move all list iterations under spinlock Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 012/111] netfilter: nf_conncount: speculative garbage collection on empty lists Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 013/111] netfilter: nf_conncount: fix argument order to find_next_bit Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 014/111] mmc: sdhci-msm: Disable CDR function on TX Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 015/111] arm64/kvm: consistently handle host HCR_EL2 flags Greg Kroah-Hartman
2019-01-21 13:42 ` Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 016/111] arm64: Dont trap host pointer auth use to EL2 Greg Kroah-Hartman
2019-01-21 13:42 ` Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 017/111] ipv6: fix kernel-infoleak in ipv6_local_error() Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 018/111] net: bridge: fix a bug on using a neighbour cache entry without checking its state Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 019/111] packet: Do not leak dev refcounts on error exit Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 020/111] tcp: change txhash on SYN-data timeout Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 021/111] tun: publish tfile after its fully initialized Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 022/111] net: phy: add missing phy driver features Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 023/111] net: phy: Add missing features to PHY drivers Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 024/111] net: phy: meson-gxl: Use the genphy_soft_reset callback Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 025/111] lan743x: Remove phy_read from link status change function Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 026/111] IN_BADCLASS: fix macro to actually work Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 027/111] r8169: load Realtek PHY driver module before r8169 Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 028/111] bonding: update nest level on unlink Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 029/111] ip: on queued skb use skb_header_pointer instead of pskb_may_pull Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 030/111] r8169: dont try to read counters if chip is in a PCI power-save state Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 031/111] smc: move unhash as early as possible in smc_release() Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 032/111] crypto: sm3 - fix undefined shift by >= width of value Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 033/111] crypto: caam - fix zero-length buffer DMA mapping Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 034/111] crypto: authencesn - Avoid twice completion call in decrypt path Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 035/111] crypto: ccree - convert to use crypto_authenc_extractkeys() Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 036/111] crypto: bcm " Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 037/111] crypto: authenc - fix parsing key with misaligned rta_len Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 038/111] crypto: talitos - reorder code in talitos_edesc_alloc() Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 039/111] crypto: talitos - fix ablkcipher for CONFIG_VMAP_STACK Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 040/111] xen: Fix x86 sched_clock() interface for xen Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 041/111] Revert "btrfs: balance dirty metadata pages in btrfs_finish_ordered_io" Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 042/111] btrfs: wait on ordered extents on abort cleanup Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 043/111] Yama: Check for pid death before checking ancestry Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 044/111] scsi: core: Synchronize request queue PM status only on successful resume Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 045/111] scsi: sd: Fix cache_type_store() Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 046/111] virtio: dont allocate vqs when names[i] = NULL Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 047/111] virtio-balloon: tweak config_changed implementation Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 048/111] mips: fix n32 compat_ipc_parse_version Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 049/111] MIPS: BCM47XX: Setup struct device for the SoC Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 050/111] MIPS: lantiq: Fix IPI interrupt handling Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 051/111] MIPS: OCTEON: fix kexec support Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 052/111] drm/i915/gvt: Fix mmap range check Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 053/111] drm/rockchip: add missing of_node_put Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 054/111] OF: properties: " Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 055/111] mfd: tps6586x: Handle interrupts on suspend Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 056/111] media: v4l: ioctl: Validate num_planes for debug messages Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 057/111] media: vim2m: only cancel work if it is for right context Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 058/111] RDMA/nldev: Dont expose unsafe global rkey to regular user Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 059/111] RDMA/vmw_pvrdma: Return the correct opcode when creating WR Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 060/111] kbuild: Disable LD_DEAD_CODE_DATA_ELIMINATION with ftrace & GCC <= 4.7 Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 061/111] kbuild: fix single target build for external module Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 062/111] kbuild: mark prepare0 as PHONY to fix external module build Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 063/111] net: dsa: realtek-smi: fix OF child-node lookup Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 064/111] pstore/ram: Avoid allocation and leak of platform data Greg Kroah-Hartman
2019-01-21 13:42 ` [PATCH 4.20 065/111] SUNRPC: Fix TCP receive code on archs with flush_dcache_page() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 066/111] powerpc/tm: Limit TM code inside PPC_TRANSACTIONAL_MEM Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 067/111] arm64: kaslr: ensure randomized quantities are clean to the PoC Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 068/111] arm64: dts: marvell: armada-ap806: reserve PSCI area Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 069/111] fbdev: offb: Fix OF node name handling Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 070/111] Disable MSI also when pcie-octeon.pcie_disable on Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 071/111] fix int_sqrt64() for very large numbers Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 072/111] omap2fb: Fix stack memory disclosure Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 073/111] media: vivid: fix error handling of kthread_run Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 074/111] media: vivid: set min width/height to a value > 0 Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 075/111] bpf: in __bpf_redirect_no_mac pull mac only if present Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 076/111] ipv6: make icmp6_send() robust against null skb->dev Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 077/111] LSM: Check for NULL cred-security on free Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 078/111] media: vb2: vb2_mmap: move lock up Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 079/111] sunrpc: handle ENOMEM in rpcb_getport_async Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 080/111] netfilter: ebtables: account ebt_table_info to kmemcg Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 081/111] block: use rcu_work instead of call_rcu to avoid sleep in softirq Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 082/111] drm/vkms: Fix plane duplicate_state Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 083/111] gpu/drm: Fix lock held when returning to user space Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 084/111] selinux: fix GPF on invalid policy Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 085/111] blockdev: Fix livelocks on loop device Greg Kroah-Hartman
2019-01-21 14:03 ` Jan Kara
2019-01-21 14:23 ` Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 086/111] sctp: allocate sctp_sockaddr_entry with kzalloc Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 087/111] tipc: fix uninit-value in in tipc_conn_rcv_sub Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 088/111] tipc: fix uninit-value in tipc_nl_compat_link_reset_stats Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 089/111] tipc: fix uninit-value in tipc_nl_compat_bearer_enable Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 090/111] tipc: fix uninit-value in tipc_nl_compat_link_set Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 091/111] tipc: fix uninit-value in tipc_nl_compat_name_table_dump Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 092/111] tipc: fix uninit-value in tipc_nl_compat_doit Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 093/111] block/loop: Dont grab "struct file" for vfs_getattr() operation Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 094/111] block/loop: Use global lock for ioctl() operation Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 095/111] loop: Fold __loop_release into loop_release Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 096/111] loop: Get rid of loop_index_mutex Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 097/111] loop: Push lo_ctl_mutex down into individual ioctls Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 098/111] loop: Split setting of lo_state from loop_clr_fd Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 099/111] loop: Push loop_ctl_mutex down into loop_clr_fd() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 100/111] loop: Push loop_ctl_mutex down to loop_get_status() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 101/111] loop: Push loop_ctl_mutex down to loop_set_status() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 102/111] loop: Push loop_ctl_mutex down to loop_set_fd() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 103/111] loop: Push loop_ctl_mutex down to loop_change_fd() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 104/111] loop: Move special partition reread handling in loop_clr_fd() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 105/111] loop: Move loop_reread_partitions() out of loop_ctl_mutex Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 106/111] loop: Fix deadlock when calling blkdev_reread_part() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 107/111] loop: Avoid circular locking dependency between loop_ctl_mutex and bd_mutex Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 108/111] loop: Get rid of nested acquisition of loop_ctl_mutex Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 109/111] loop: Fix double mutex_unlock(&loop_ctl_mutex) in loop_control_ioctl() Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 110/111] loop: drop caches if offset or block_size are changed Greg Kroah-Hartman
2019-01-21 13:43 ` [PATCH 4.20 111/111] drm/fb-helper: Ignore the value of fb_var_screeninfo.pixclock Greg Kroah-Hartman
2019-01-22 13:33 ` [PATCH 4.20 000/111] 4.20.4-stable review Naresh Kamboju
2019-01-22 16:44 ` Greg Kroah-Hartman
2019-01-22 19:24 ` Guenter Roeck
2019-01-23 6:43 ` Greg Kroah-Hartman
2019-01-22 22:25 ` shuah
2019-01-23 6:43 ` 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=20190121122456.891645963@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=fw@strlen.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=sbohrer@cloudflare.com \
--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.