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

diff --git a/queue-5.4/genirq-allow-irq_chip-registration-functions-to-take.patch b/queue-5.4/genirq-allow-irq_chip-registration-functions-to-take.patch
new file mode 100644 (file)
index 0000000..a1a1d4c
--- /dev/null
@@ -0,0 +1,87 @@
+From efb701bc04af40c136a7815c4ad20c6ffef584b5 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 5655da9eb1fb9..0c3f153f60670 100644
+--- a/include/linux/irq.h
++++ b/include/linux/irq.h
+@@ -677,10 +677,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);
+@@ -770,7 +771,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 498f76beb8766..5f85eac6af11b 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
+@@ -1086,7 +1083,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.4/netfilter-ipset-add-list-flush-to-cancel_gc.patch b/queue-5.4/netfilter-ipset-add-list-flush-to-cancel_gc.patch
new file mode 100644 (file)
index 0000000..74ab2b9
--- /dev/null
@@ -0,0 +1,39 @@
+From 2daa1f90f88fc206dc6cc76c5a33c16ac23d5e22 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 9f4f0126d6ed5..c4aae8c586acf 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 403aa9e126cb7219340717c5394297c85c31f94e..2ebd43d50b06b4464d77f900d751524b19c12470 100644 (file)
@@ -180,3 +180,5 @@ hid-wacom-modify-pen-ids.patch
 protect-the-fetch-of-fd-in-do_dup2-from-mispredictions.patch
 alsa-usb-audio-correct-surround-channels-in-uac1-channel-map.patch
 net-usb-sr9700-fix-uninitialized-variable-use-in-sr_mdio_read.patch
+netfilter-ipset-add-list-flush-to-cancel_gc.patch
+genirq-allow-irq_chip-registration-functions-to-take.patch