diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2020-09-17 11:30:50 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2020-09-17 11:30:50 -0400 |
commit | 29b9834a743e3abc58e6dc64015c2a26d0b531e1 (patch) | |
tree | e13859e8b5dbfe2741fdaebbe78619a00720ff91 | |
parent | 4fa3928af4ad729a1473e6f0c8d84ff1b3524f1d (diff) | |
download | longterm-queue-5.2-29b9834a743e3abc58e6dc64015c2a26d0b531e1.tar.gz |
net: import "packet-DDOS" from mainline v5.3-rc1~140^2~250
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
9 files changed, 466 insertions, 0 deletions
diff --git a/queue/net-packet-constify-__packet_get_status-argument.patch b/queue/net-packet-constify-__packet_get_status-argument.patch new file mode 100644 index 00000000..0bef5ee1 --- /dev/null +++ b/queue/net-packet-constify-__packet_get_status-argument.patch @@ -0,0 +1,28 @@ +From 96f657e6cfc25b27d8189cb6b9eac66e1b1ff4f3 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:26 -0700 +Subject: [PATCH] net/packet: constify __packet_get_status() argument + +commit 96f657e6cfc25b27d8189cb6b9eac66e1b1ff4f3 upstream. + +struct packet_sock is only read. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index 7fa847dcea30..66fcfd5b51f8 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -384,7 +384,7 @@ static void __packet_set_status(struct packet_sock *po, void *frame, int status) + smp_wmb(); + } + +-static int __packet_get_status(struct packet_sock *po, void *frame) ++static int __packet_get_status(const struct packet_sock *po, void *frame) + { + union tpacket_uhdr h; + +-- +1.9.1 + diff --git a/queue/net-packet-constify-__packet_rcv_has_room.patch b/queue/net-packet-constify-__packet_rcv_has_room.patch new file mode 100644 index 00000000..7cebf0e5 --- /dev/null +++ b/queue/net-packet-constify-__packet_rcv_has_room.patch @@ -0,0 +1,43 @@ +From 0338a14523e3864524dafb6a66c7b82e94201317 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:29 -0700 +Subject: [PATCH] net/packet: constify __packet_rcv_has_room() + +commit 0338a14523e3864524dafb6a66c7b82e94201317 upstream. + +Goal is use the helper without lock being held. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index 5ef63d0c3ad0..a0564855ed9d 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -1224,15 +1224,18 @@ static bool __tpacket_v3_has_room(const struct packet_sock *po, int pow_off) + return prb_lookup_block(po, &po->rx_ring, idx, TP_STATUS_KERNEL); + } + +-static int __packet_rcv_has_room(struct packet_sock *po, struct sk_buff *skb) ++static int __packet_rcv_has_room(const struct packet_sock *po, ++ const struct sk_buff *skb) + { +- struct sock *sk = &po->sk; ++ const struct sock *sk = &po->sk; + int ret = ROOM_NONE; + + if (po->prot_hook.func != tpacket_rcv) { +- int avail = sk->sk_rcvbuf - atomic_read(&sk->sk_rmem_alloc) +- - (skb ? skb->truesize : 0); +- if (avail > (sk->sk_rcvbuf >> ROOM_POW_OFF)) ++ int rcvbuf = READ_ONCE(sk->sk_rcvbuf); ++ int avail = rcvbuf - atomic_read(&sk->sk_rmem_alloc) ++ - (skb ? skb->truesize : 0); ++ ++ if (avail > (rcvbuf >> ROOM_POW_OFF)) + return ROOM_NORMAL; + else if (avail > 0) + return ROOM_LOW; +-- +1.9.1 + diff --git a/queue/net-packet-constify-packet_lookup_frame-and-__tpacke.patch b/queue/net-packet-constify-packet_lookup_frame-and-__tpacke.patch new file mode 100644 index 00000000..73731e8e --- /dev/null +++ b/queue/net-packet-constify-packet_lookup_frame-and-__tpacke.patch @@ -0,0 +1,51 @@ +From d4b5bd98faec345933d6080989e035a833b1077a Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:27 -0700 +Subject: [PATCH] net/packet: constify packet_lookup_frame() and + __tpacket_has_room() + +commit d4b5bd98faec345933d6080989e035a833b1077a upstream. + +Goal is to be able to use __tpacket_has_room() without holding a lock. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index 66fcfd5b51f8..273bffd2130d 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -460,10 +460,10 @@ static __u32 __packet_set_timestamp(struct packet_sock *po, void *frame, + return ts_status; + } + +-static void *packet_lookup_frame(struct packet_sock *po, +- struct packet_ring_buffer *rb, +- unsigned int position, +- int status) ++static void *packet_lookup_frame(const struct packet_sock *po, ++ const struct packet_ring_buffer *rb, ++ unsigned int position, ++ int status) + { + unsigned int pg_vec_pos, frame_offset; + union tpacket_uhdr h; +@@ -1198,12 +1198,12 @@ static void packet_free_pending(struct packet_sock *po) + #define ROOM_LOW 0x1 + #define ROOM_NORMAL 0x2 + +-static bool __tpacket_has_room(struct packet_sock *po, int pow_off) ++static bool __tpacket_has_room(const struct packet_sock *po, int pow_off) + { + int idx, len; + +- len = po->rx_ring.frame_max + 1; +- idx = po->rx_ring.head; ++ len = READ_ONCE(po->rx_ring.frame_max) + 1; ++ idx = READ_ONCE(po->rx_ring.head); + if (pow_off) + idx += len >> pow_off; + if (idx >= len) +-- +1.9.1 + diff --git a/queue/net-packet-constify-prb_lookup_block-and-__tpacket_v.patch b/queue/net-packet-constify-prb_lookup_block-and-__tpacket_v.patch new file mode 100644 index 00000000..efd8e84e --- /dev/null +++ b/queue/net-packet-constify-prb_lookup_block-and-__tpacket_v.patch @@ -0,0 +1,52 @@ +From dcf70cefaf99a40cfa25face160f29c1cf3bf84d Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:28 -0700 +Subject: [PATCH] net/packet: constify prb_lookup_block() and + __tpacket_v3_has_room() + +commit dcf70cefaf99a40cfa25face160f29c1cf3bf84d upstream. + +Goal is to be able to use __tpacket_v3_has_room() without holding +a lock. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index 273bffd2130d..5ef63d0c3ad0 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -1082,10 +1082,10 @@ static void *packet_current_rx_frame(struct packet_sock *po, + } + } + +-static void *prb_lookup_block(struct packet_sock *po, +- struct packet_ring_buffer *rb, +- unsigned int idx, +- int status) ++static void *prb_lookup_block(const struct packet_sock *po, ++ const struct packet_ring_buffer *rb, ++ unsigned int idx, ++ int status) + { + struct tpacket_kbdq_core *pkc = GET_PBDQC_FROM_RB(rb); + struct tpacket_block_desc *pbd = GET_PBLOCK_DESC(pkc, idx); +@@ -1211,12 +1211,12 @@ static bool __tpacket_has_room(const struct packet_sock *po, int pow_off) + return packet_lookup_frame(po, &po->rx_ring, idx, TP_STATUS_KERNEL); + } + +-static bool __tpacket_v3_has_room(struct packet_sock *po, int pow_off) ++static bool __tpacket_v3_has_room(const struct packet_sock *po, int pow_off) + { + int idx, len; + +- len = po->rx_ring.prb_bdqc.knum_blocks; +- idx = po->rx_ring.prb_bdqc.kactive_blk_num; ++ len = READ_ONCE(po->rx_ring.prb_bdqc.knum_blocks); ++ idx = READ_ONCE(po->rx_ring.prb_bdqc.kactive_blk_num); + if (pow_off) + idx += len >> pow_off; + if (idx >= len) +-- +1.9.1 + diff --git a/queue/net-packet-implement-shortcut-in-tpacket_rcv.patch b/queue/net-packet-implement-shortcut-in-tpacket_rcv.patch new file mode 100644 index 00000000..95e4b95f --- /dev/null +++ b/queue/net-packet-implement-shortcut-in-tpacket_rcv.patch @@ -0,0 +1,43 @@ +From 2c51c6273c73ff04099f48fb42dfdd2acc7a1b70 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:31 -0700 +Subject: [PATCH] net/packet: implement shortcut in tpacket_rcv() + +commit 2c51c6273c73ff04099f48fb42dfdd2acc7a1b70 upstream. + +tpacket_rcv() can be hit under DDOS quite hard, since +it will always grab a socket spinlock, to eventually find +there is no room for an additional packet. + +Using tcpdump [1] on a busy host can lead to catastrophic consequences, +because of all cpus spinning on a contended spinlock. + +This replicates a similar strategy used in packet_rcv() + +[1] Also some applications mistakenly use af_packet socket +bound to ETH_P_ALL only to send packets. +Receive queue is never drained and immediately full. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index 2d499679811a..860ca3e6abf5 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -2193,6 +2193,12 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, + if (!res) + goto drop_n_restore; + ++ /* If we are flooded, just give up */ ++ if (__packet_rcv_has_room(po, skb) == ROOM_NONE) { ++ atomic_inc(&po->tp_drops); ++ goto drop_n_restore; ++ } ++ + if (skb->ip_summed == CHECKSUM_PARTIAL) + status |= TP_STATUS_CSUMNOTREADY; + else if (skb->pkt_type != PACKET_OUTGOING && +-- +1.9.1 + diff --git a/queue/net-packet-introduce-packet_rcv_try_clear_pressure-h.patch b/queue/net-packet-introduce-packet_rcv_try_clear_pressure-h.patch new file mode 100644 index 00000000..ed950083 --- /dev/null +++ b/queue/net-packet-introduce-packet_rcv_try_clear_pressure-h.patch @@ -0,0 +1,56 @@ +From 9bb6cd652454969fa0ae6c52c8ebd31472d0171c Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:33 -0700 +Subject: [PATCH] net/packet: introduce packet_rcv_try_clear_pressure() helper + +commit 9bb6cd652454969fa0ae6c52c8ebd31472d0171c upstream. + +There are two places where we want to clear the pressure +if possible, add a helper to make it more obvious. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Suggested-by: Willem de Bruijn <willemb@google.com> +Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index d409e2fdaa7e..8c27e198268a 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -1271,6 +1271,13 @@ static int packet_rcv_has_room(struct packet_sock *po, struct sk_buff *skb) + return ret; + } + ++static void packet_rcv_try_clear_pressure(struct packet_sock *po) ++{ ++ if (READ_ONCE(po->pressure) && ++ __packet_rcv_has_room(po, NULL) == ROOM_NORMAL) ++ WRITE_ONCE(po->pressure, 0); ++} ++ + static void packet_sock_destruct(struct sock *sk) + { + skb_queue_purge(&sk->sk_error_queue); +@@ -3308,8 +3315,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, + if (skb == NULL) + goto out; + +- if (READ_ONCE(pkt_sk(sk)->pressure)) +- packet_rcv_has_room(pkt_sk(sk), NULL); ++ packet_rcv_try_clear_pressure(pkt_sk(sk)); + + if (pkt_sk(sk)->has_vnet_hdr) { + err = packet_rcv_vnet(msg, skb, &len); +@@ -4127,8 +4133,7 @@ static __poll_t packet_poll(struct file *file, struct socket *sock, + TP_STATUS_KERNEL)) + mask |= EPOLLIN | EPOLLRDNORM; + } +- if (READ_ONCE(po->pressure) && __packet_rcv_has_room(po, NULL) == ROOM_NORMAL) +- WRITE_ONCE(po->pressure, 0); ++ packet_rcv_try_clear_pressure(po); + spin_unlock_bh(&sk->sk_receive_queue.lock); + spin_lock_bh(&sk->sk_write_queue.lock); + if (po->tx_ring.pg_vec) { +-- +1.9.1 + diff --git a/queue/net-packet-make-tp_drops-atomic.patch b/queue/net-packet-make-tp_drops-atomic.patch new file mode 100644 index 00000000..f8a217d1 --- /dev/null +++ b/queue/net-packet-make-tp_drops-atomic.patch @@ -0,0 +1,103 @@ +From 8e8e2951e3095732d7e780c241f61ea130955a57 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:30 -0700 +Subject: [PATCH] net/packet: make tp_drops atomic + +commit 8e8e2951e3095732d7e780c241f61ea130955a57 upstream. + +Under DDOS, we want to be able to increment tp_drops without +touching the spinlock. This will help readers to drain +the receive queue slightly faster :/ + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index a0564855ed9d..2d499679811a 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -758,7 +758,7 @@ static void prb_close_block(struct tpacket_kbdq_core *pkc1, + struct tpacket_hdr_v1 *h1 = &pbd1->hdr.bh1; + struct sock *sk = &po->sk; + +- if (po->stats.stats3.tp_drops) ++ if (atomic_read(&po->tp_drops)) + status |= TP_STATUS_LOSING; + + last_pkt = (struct tpacket3_hdr *)pkc1->prev; +@@ -2128,10 +2128,8 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, + + drop_n_acct: + is_drop_n_account = true; +- spin_lock(&sk->sk_receive_queue.lock); +- po->stats.stats1.tp_drops++; ++ atomic_inc(&po->tp_drops); + atomic_inc(&sk->sk_drops); +- spin_unlock(&sk->sk_receive_queue.lock); + + drop_n_restore: + if (skb_head != skb->data && skb_shared(skb)) { +@@ -2265,7 +2263,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, + * Anyways, moving it for V1/V2 only as V3 doesn't need this + * at packet level. + */ +- if (po->stats.stats1.tp_drops) ++ if (atomic_read(&po->tp_drops)) + status |= TP_STATUS_LOSING; + } + +@@ -2381,9 +2379,9 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, + return 0; + + drop_n_account: +- is_drop_n_account = true; +- po->stats.stats1.tp_drops++; + spin_unlock(&sk->sk_receive_queue.lock); ++ atomic_inc(&po->tp_drops); ++ is_drop_n_account = true; + + sk->sk_data_ready(sk); + kfree_skb(copy_skb); +@@ -3879,6 +3877,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, + void *data = &val; + union tpacket_stats_u st; + struct tpacket_rollover_stats rstats; ++ int drops; + + if (level != SOL_PACKET) + return -ENOPROTOOPT; +@@ -3895,14 +3894,17 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, + memcpy(&st, &po->stats, sizeof(st)); + memset(&po->stats, 0, sizeof(po->stats)); + spin_unlock_bh(&sk->sk_receive_queue.lock); ++ drops = atomic_xchg(&po->tp_drops, 0); + + if (po->tp_version == TPACKET_V3) { + lv = sizeof(struct tpacket_stats_v3); +- st.stats3.tp_packets += st.stats3.tp_drops; ++ st.stats3.tp_drops = drops; ++ st.stats3.tp_packets += drops; + data = &st.stats3; + } else { + lv = sizeof(struct tpacket_stats); +- st.stats1.tp_packets += st.stats1.tp_drops; ++ st.stats1.tp_drops = drops; ++ st.stats1.tp_packets += drops; + data = &st.stats1; + } + +diff --git a/net/packet/internal.h b/net/packet/internal.h +index 3bb7c5fb3bff..b5bcff2b7a43 100644 +--- a/net/packet/internal.h ++++ b/net/packet/internal.h +@@ -131,6 +131,7 @@ struct packet_sock { + struct net_device __rcu *cached_dev; + int (*xmit)(struct sk_buff *skb); + struct packet_type prot_hook ____cacheline_aligned_in_smp; ++ atomic_t tp_drops ____cacheline_aligned_in_smp; + }; + + static struct packet_sock *pkt_sk(struct sock *sk) +-- +1.9.1 + diff --git a/queue/net-packet-remove-locking-from-packet_rcv_has_room.patch b/queue/net-packet-remove-locking-from-packet_rcv_has_room.patch new file mode 100644 index 00000000..f0849bd4 --- /dev/null +++ b/queue/net-packet-remove-locking-from-packet_rcv_has_room.patch @@ -0,0 +1,74 @@ +From 3a2bb84e4aeab5c90d16e1cd17dbaa17631af529 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet <edumazet@google.com> +Date: Wed, 12 Jun 2019 09:52:32 -0700 +Subject: [PATCH] net/packet: remove locking from packet_rcv_has_room() + +commit 3a2bb84e4aeab5c90d16e1cd17dbaa17631af529 upstream. + +__packet_rcv_has_room() can now be run without lock being held. + +po->pressure is only a non persistent hint, we can mark +all read/write accesses with READ_ONCE()/WRITE_ONCE() +to document the fact that the field could be written +without any synchronization. + +Signed-off-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: David S. Miller <davem@davemloft.net> + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index 860ca3e6abf5..d409e2fdaa7e 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -1260,15 +1260,13 @@ static int __packet_rcv_has_room(const struct packet_sock *po, + + static int packet_rcv_has_room(struct packet_sock *po, struct sk_buff *skb) + { +- int ret; +- bool has_room; ++ int pressure, ret; + +- spin_lock_bh(&po->sk.sk_receive_queue.lock); + ret = __packet_rcv_has_room(po, skb); +- has_room = ret == ROOM_NORMAL; +- if (po->pressure == has_room) +- po->pressure = !has_room; +- spin_unlock_bh(&po->sk.sk_receive_queue.lock); ++ pressure = ret != ROOM_NORMAL; ++ ++ if (READ_ONCE(po->pressure) != pressure) ++ WRITE_ONCE(po->pressure, pressure); + + return ret; + } +@@ -1353,7 +1351,7 @@ static unsigned int fanout_demux_rollover(struct packet_fanout *f, + i = j = min_t(int, po->rollover->sock, num - 1); + do { + po_next = pkt_sk(f->arr[i]); +- if (po_next != po_skip && !po_next->pressure && ++ if (po_next != po_skip && !READ_ONCE(po_next->pressure) && + packet_rcv_has_room(po_next, skb) == ROOM_NORMAL) { + if (i != j) + po->rollover->sock = i; +@@ -3310,7 +3308,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, + if (skb == NULL) + goto out; + +- if (pkt_sk(sk)->pressure) ++ if (READ_ONCE(pkt_sk(sk)->pressure)) + packet_rcv_has_room(pkt_sk(sk), NULL); + + if (pkt_sk(sk)->has_vnet_hdr) { +@@ -4129,8 +4127,8 @@ static __poll_t packet_poll(struct file *file, struct socket *sock, + TP_STATUS_KERNEL)) + mask |= EPOLLIN | EPOLLRDNORM; + } +- if (po->pressure && __packet_rcv_has_room(po, NULL) == ROOM_NORMAL) +- po->pressure = 0; ++ if (READ_ONCE(po->pressure) && __packet_rcv_has_room(po, NULL) == ROOM_NORMAL) ++ WRITE_ONCE(po->pressure, 0); + spin_unlock_bh(&sk->sk_receive_queue.lock); + spin_lock_bh(&sk->sk_write_queue.lock); + if (po->tx_ring.pg_vec) { +-- +1.9.1 + diff --git a/queue/series b/queue/series index 6e364ebb..18fea96e 100644 --- a/queue/series +++ b/queue/series @@ -97,6 +97,22 @@ sh-landisk-Add-missing-initialization-of-sh_io_port_.patch drm-Added-orientation-quirk-for-ASUS-tablet-model-T1.patch drm-fix-drm_dp_mst_port-refcount-leaks-in-drm_dp_mst.patch drm-amdgpu-Fix-bug-where-DPM-is-not-enabled-after-hi.patch +# v5.3-rc1~140^2~250^2~7 --- v5.2-rc3-1001-g96f657e6cfc2 +net-packet-constify-__packet_get_status-argument.patch +# v5.3-rc1~140^2~250^2~6 --- v5.2-rc3-1002-gd4b5bd98faec +net-packet-constify-packet_lookup_frame-and-__tpacke.patch +# v5.3-rc1~140^2~250^2~5 --- v5.2-rc3-1003-gdcf70cefaf99 +net-packet-constify-prb_lookup_block-and-__tpacket_v.patch +# v5.3-rc1~140^2~250^2~4 --- v5.2-rc3-1004-g0338a14523e3 +net-packet-constify-__packet_rcv_has_room.patch +# v5.3-rc1~140^2~250^2~3 --- v5.2-rc3-1005-g8e8e2951e309 +net-packet-make-tp_drops-atomic.patch +# v5.3-rc1~140^2~250^2~2 --- v5.2-rc3-1006-g2c51c6273c73 +net-packet-implement-shortcut-in-tpacket_rcv.patch +# v5.3-rc1~140^2~250^2~1 --- v5.2-rc3-1007-g3a2bb84e4aea +net-packet-remove-locking-from-packet_rcv_has_room.patch +# v5.3-rc1~140^2~250^2 --- v5.2-rc3-1008-g9bb6cd652454 +net-packet-introduce-packet_rcv_try_clear_pressure-h.patch net-packet-fix-overflow-in-tpacket_rcv.patch rbd-require-global-CAP_SYS_ADMIN-for-mapping-and-unm.patch mm-hugetlb-fix-a-race-between-hugetlb-sysctl-handler.patch |