]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.15
authorSasha Levin <sashal@kernel.org>
Wed, 7 Aug 2024 19:08:59 +0000 (15:08 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 7 Aug 2024 19:10:03 +0000 (15:10 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.15/genirq-allow-irq_chip-registration-functions-to-take.patch [new file with mode: 0644]
queue-5.15/netfilter-ipset-add-list-flush-to-cancel_gc.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/genirq-allow-irq_chip-registration-functions-to-take.patch b/queue-5.15/genirq-allow-irq_chip-registration-functions-to-take.patch
new file mode 100644 (file)
index 0000000..6b13978
--- /dev/null
@@ -0,0 +1,87 @@
+From 3b697a31f8ed0355273b1e9fe8c2bae9a876eb6e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Feb 2022 16:25:59 +0000
+Subject: genirq: Allow irq_chip registration functions to take a const
+ irq_chip
+
+From: Marc Zyngier <maz@kernel.org>
+
+[ Upstream commit 393e1280f765661cf39785e967676a4e57324126 ]
+
+In order to let a const irqchip be fed to the irqchip layer, adjust
+the various prototypes. An extra cast in irq_set_chip()() is required
+to avoid a warning.
+
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+Acked-by: Linus Walleij <linus.walleij@linaro.org>
+Link: https://lore.kernel.org/r/20220209162607.1118325-3-maz@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/irq.h | 7 ++++---
+ kernel/irq/chip.c   | 9 +++------
+ 2 files changed, 7 insertions(+), 9 deletions(-)
+
+diff --git a/include/linux/irq.h b/include/linux/irq.h
+index f9e6449fbbbae..4fd8d900a1b86 100644
+--- a/include/linux/irq.h
++++ b/include/linux/irq.h
+@@ -709,10 +709,11 @@ extern struct irq_chip no_irq_chip;
+ extern struct irq_chip dummy_irq_chip;
+ extern void
+-irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
++irq_set_chip_and_handler_name(unsigned int irq, const struct irq_chip *chip,
+                             irq_flow_handler_t handle, const char *name);
+-static inline void irq_set_chip_and_handler(unsigned int irq, struct irq_chip *chip,
++static inline void irq_set_chip_and_handler(unsigned int irq,
++                                          const struct irq_chip *chip,
+                                           irq_flow_handler_t handle)
+ {
+       irq_set_chip_and_handler_name(irq, chip, handle, NULL);
+@@ -802,7 +803,7 @@ static inline void irq_set_percpu_devid_flags(unsigned int irq)
+ }
+ /* Set/get chip/data for an IRQ: */
+-extern int irq_set_chip(unsigned int irq, struct irq_chip *chip);
++extern int irq_set_chip(unsigned int irq, const struct irq_chip *chip);
+ extern int irq_set_handler_data(unsigned int irq, void *data);
+ extern int irq_set_chip_data(unsigned int irq, void *data);
+ extern int irq_set_irq_type(unsigned int irq, unsigned int type);
+diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
+index 7ea66e55ef86b..0a893df1b8099 100644
+--- a/kernel/irq/chip.c
++++ b/kernel/irq/chip.c
+@@ -38,7 +38,7 @@ struct irqaction chained_action = {
+  *    @irq:   irq number
+  *    @chip:  pointer to irq chip description structure
+  */
+-int irq_set_chip(unsigned int irq, struct irq_chip *chip)
++int irq_set_chip(unsigned int irq, const struct irq_chip *chip)
+ {
+       unsigned long flags;
+       struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
+@@ -46,10 +46,7 @@ int irq_set_chip(unsigned int irq, struct irq_chip *chip)
+       if (!desc)
+               return -EINVAL;
+-      if (!chip)
+-              chip = &no_irq_chip;
+-
+-      desc->irq_data.chip = chip;
++      desc->irq_data.chip = (struct irq_chip *)(chip ?: &no_irq_chip);
+       irq_put_desc_unlock(desc, flags);
+       /*
+        * For !CONFIG_SPARSE_IRQ make the irq show up in
+@@ -1075,7 +1072,7 @@ irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle,
+ EXPORT_SYMBOL_GPL(irq_set_chained_handler_and_data);
+ void
+-irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
++irq_set_chip_and_handler_name(unsigned int irq, const struct irq_chip *chip,
+                             irq_flow_handler_t handle, const char *name)
+ {
+       irq_set_chip(irq, chip);
+-- 
+2.43.0
+
diff --git a/queue-5.15/netfilter-ipset-add-list-flush-to-cancel_gc.patch b/queue-5.15/netfilter-ipset-add-list-flush-to-cancel_gc.patch
new file mode 100644 (file)
index 0000000..52f1f94
--- /dev/null
@@ -0,0 +1,39 @@
+From 502da7bbb00b328ce1bb60ad347797b024d60297 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 17 Apr 2024 18:51:41 +0500
+Subject: netfilter: ipset: Add list flush to cancel_gc
+
+From: Alexander Maltsev <keltar.gw@gmail.com>
+
+[ Upstream commit c1193d9bbbd379defe9be3c6de566de684de8a6f ]
+
+Flushing list in cancel_gc drops references to other lists right away,
+without waiting for RCU to destroy list. Fixes race when referenced
+ipsets can't be destroyed while referring list is scheduled for destroy.
+
+Fixes: 97f7cf1cd80e ("netfilter: ipset: fix performance regression in swap operation")
+Signed-off-by: Alexander Maltsev <keltar.gw@gmail.com>
+Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netfilter/ipset/ip_set_list_set.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
+index e839c356bcb56..902ff2f3bc72b 100644
+--- a/net/netfilter/ipset/ip_set_list_set.c
++++ b/net/netfilter/ipset/ip_set_list_set.c
+@@ -547,6 +547,9 @@ list_set_cancel_gc(struct ip_set *set)
+       if (SET_WITH_TIMEOUT(set))
+               del_timer_sync(&map->gc);
++
++      /* Flush list to drop references to other ipsets */
++      list_set_flush(set);
+ }
+ static const struct ip_set_type_variant set_variant = {
+-- 
+2.43.0
+
index ba3965593870bc15effb64b54129379b080c5eb2..56fafd4f56543ea06875973f02c299e06b40544e 100644 (file)
@@ -372,3 +372,5 @@ drm-vmwgfx-fix-a-deadlock-in-dma-buf-fence-polling.patch
 net-usb-sr9700-fix-uninitialized-variable-use-in-sr_mdio_read.patch
 r8169-don-t-increment-tx_dropped-in-case-of-netdev_tx_busy.patch
 mptcp-fix-duplicate-data-handling.patch
+netfilter-ipset-add-list-flush-to-cancel_gc.patch
+genirq-allow-irq_chip-registration-functions-to-take.patch