From 22de4c9868e4427a1fa386fed2808f23fc3af6a6 Mon Sep 17 00:00:00 2001 From: coolsnowwolf Date: Fri, 5 May 2023 13:37:38 +0800 Subject: [PATCH] kernel: bump 5.15 to 5.15.110 --- include/kernel-5.15 | 4 +- package/kernel/linux/modules/netsupport.mk | 2 +- .../910-unaligned_access_hacks.patch | 4 +- .../910-unaligned_access_hacks.patch | 4 +- ...632-v6.3-net-add-helper-eth_addr_add.patch | 41 +++++++++ ...611-v6.3-net-add-helper-eth_addr_add.patch | 41 +++++++++ ...e-between-coalescing-and-releasing-S.patch | 85 ------------------- ..._eth_soc-fix-flow_offload-related-re.patch | 33 ------- 8 files changed, 89 insertions(+), 125 deletions(-) create mode 100644 target/linux/generic/backport-5.10/632-v6.3-net-add-helper-eth_addr_add.patch create mode 100644 target/linux/generic/backport-5.15/611-v6.3-net-add-helper-eth_addr_add.patch delete mode 100644 target/linux/generic/backport-5.15/612-v6.3-skbuff-Fix-a-race-between-coalescing-and-releasing-S.patch delete mode 100644 target/linux/generic/pending-5.15/735-net-ethernet-mtk_eth_soc-fix-flow_offload-related-re.patch diff --git a/include/kernel-5.15 b/include/kernel-5.15 index 8575ce5d9..78aeee04f 100644 --- a/include/kernel-5.15 +++ b/include/kernel-5.15 @@ -1,2 +1,2 @@ -LINUX_VERSION-5.15 = .105 -LINUX_KERNEL_HASH-5.15.105 = 01b537650332d2852722a626169cf7e5e798d11f9b578171b477868555f5e44f +LINUX_VERSION-5.15 = .110 +LINUX_KERNEL_HASH-5.15.110 = 9829fcc77b9978dce97a26980dec445caf2410024696625dbb2314ead4830b5b diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk index 0e8c3fe5f..b50cc7bdc 100644 --- a/package/kernel/linux/modules/netsupport.mk +++ b/package/kernel/linux/modules/netsupport.mk @@ -1360,7 +1360,7 @@ define KernelPackage/qrtr KCONFIG:=CONFIG_QRTR FILES:= \ $(LINUX_DIR)/net/qrtr/qrtr.ko \ - $(LINUX_DIR)/net/qrtr/ns.ko@lt6.0 + $(LINUX_DIR)/net/qrtr/ns.ko@lt5.15 AUTOLOAD:=$(call AutoProbe,qrtr) endef diff --git a/target/linux/ath79/patches-5.10/910-unaligned_access_hacks.patch b/target/linux/ath79/patches-5.10/910-unaligned_access_hacks.patch index 55f7f3417..8d3ba3d08 100644 --- a/target/linux/ath79/patches-5.10/910-unaligned_access_hacks.patch +++ b/target/linux/ath79/patches-5.10/910-unaligned_access_hacks.patch @@ -833,7 +833,7 @@ SVN-Revision: 35130 *sum = csum_fold(csum_partial(diff, sizeof(diff), --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h -@@ -499,7 +499,7 @@ static inline bool is_etherdev_addr(cons +@@ -513,7 +513,7 @@ static inline bool is_etherdev_addr(cons * @b: Pointer to Ethernet header * * Compare two Ethernet headers, returns 0 if equal. @@ -842,7 +842,7 @@ SVN-Revision: 35130 * aligned OR the platform can handle unaligned access. This is the * case for all packets coming into netif_receive_skb or similar * entry points. -@@ -522,11 +522,12 @@ static inline unsigned long compare_ethe +@@ -536,11 +536,12 @@ static inline unsigned long compare_ethe fold |= *(unsigned long *)(a + 6) ^ *(unsigned long *)(b + 6); return fold; #else diff --git a/target/linux/ath79/patches-5.15/910-unaligned_access_hacks.patch b/target/linux/ath79/patches-5.15/910-unaligned_access_hacks.patch index 5b10dd628..88693d5f1 100644 --- a/target/linux/ath79/patches-5.15/910-unaligned_access_hacks.patch +++ b/target/linux/ath79/patches-5.15/910-unaligned_access_hacks.patch @@ -829,7 +829,7 @@ SVN-Revision: 35130 *sum = csum_fold(csum_partial(diff, sizeof(diff), --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h -@@ -511,7 +511,7 @@ static inline bool is_etherdev_addr(cons +@@ -525,7 +525,7 @@ static inline bool is_etherdev_addr(cons * @b: Pointer to Ethernet header * * Compare two Ethernet headers, returns 0 if equal. @@ -838,7 +838,7 @@ SVN-Revision: 35130 * aligned OR the platform can handle unaligned access. This is the * case for all packets coming into netif_receive_skb or similar * entry points. -@@ -534,11 +534,12 @@ static inline unsigned long compare_ethe +@@ -548,11 +548,12 @@ static inline unsigned long compare_ethe fold |= *(unsigned long *)(a + 6) ^ *(unsigned long *)(b + 6); return fold; #else diff --git a/target/linux/generic/backport-5.10/632-v6.3-net-add-helper-eth_addr_add.patch b/target/linux/generic/backport-5.10/632-v6.3-net-add-helper-eth_addr_add.patch new file mode 100644 index 000000000..ac556e53a --- /dev/null +++ b/target/linux/generic/backport-5.10/632-v6.3-net-add-helper-eth_addr_add.patch @@ -0,0 +1,41 @@ +From 7390609b0121a1b982c5ecdfcd72dc328e5784ee Mon Sep 17 00:00:00 2001 +From: Michael Walle +Date: Mon, 6 Feb 2023 13:43:42 +0000 +Subject: [PATCH] net: add helper eth_addr_add() + +Add a helper to add an offset to a ethernet address. This comes in handy +if you have a base ethernet address for multiple interfaces. + +Signed-off-by: Michael Walle +Reviewed-by: Andrew Lunn +Acked-by: Jakub Kicinski +Signed-off-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20230206134356.839737-9-srinivas.kandagatla@linaro.org +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/etherdevice.h | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +--- a/include/linux/etherdevice.h ++++ b/include/linux/etherdevice.h +@@ -466,6 +466,20 @@ static inline void eth_addr_inc(u8 *addr + } + + /** ++ * eth_addr_add() - Add (or subtract) an offset to/from the given MAC address. ++ * ++ * @offset: Offset to add. ++ * @addr: Pointer to a six-byte array containing Ethernet address to increment. ++ */ ++static inline void eth_addr_add(u8 *addr, long offset) ++{ ++ u64 u = ether_addr_to_u64(addr); ++ ++ u += offset; ++ u64_to_ether_addr(u, addr); ++} ++ ++/** + * is_etherdev_addr - Tell if given Ethernet address belongs to the device. + * @dev: Pointer to a device structure + * @addr: Pointer to a six-byte array containing the Ethernet address diff --git a/target/linux/generic/backport-5.15/611-v6.3-net-add-helper-eth_addr_add.patch b/target/linux/generic/backport-5.15/611-v6.3-net-add-helper-eth_addr_add.patch new file mode 100644 index 000000000..c5d5d2c3a --- /dev/null +++ b/target/linux/generic/backport-5.15/611-v6.3-net-add-helper-eth_addr_add.patch @@ -0,0 +1,41 @@ +From 7390609b0121a1b982c5ecdfcd72dc328e5784ee Mon Sep 17 00:00:00 2001 +From: Michael Walle +Date: Mon, 6 Feb 2023 13:43:42 +0000 +Subject: [PATCH] net: add helper eth_addr_add() + +Add a helper to add an offset to a ethernet address. This comes in handy +if you have a base ethernet address for multiple interfaces. + +Signed-off-by: Michael Walle +Reviewed-by: Andrew Lunn +Acked-by: Jakub Kicinski +Signed-off-by: Srinivas Kandagatla +Link: https://lore.kernel.org/r/20230206134356.839737-9-srinivas.kandagatla@linaro.org +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/etherdevice.h | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +--- a/include/linux/etherdevice.h ++++ b/include/linux/etherdevice.h +@@ -478,6 +478,20 @@ static inline void eth_addr_inc(u8 *addr + } + + /** ++ * eth_addr_add() - Add (or subtract) an offset to/from the given MAC address. ++ * ++ * @offset: Offset to add. ++ * @addr: Pointer to a six-byte array containing Ethernet address to increment. ++ */ ++static inline void eth_addr_add(u8 *addr, long offset) ++{ ++ u64 u = ether_addr_to_u64(addr); ++ ++ u += offset; ++ u64_to_ether_addr(u, addr); ++} ++ ++/** + * is_etherdev_addr - Tell if given Ethernet address belongs to the device. + * @dev: Pointer to a device structure + * @addr: Pointer to a six-byte array containing the Ethernet address diff --git a/target/linux/generic/backport-5.15/612-v6.3-skbuff-Fix-a-race-between-coalescing-and-releasing-S.patch b/target/linux/generic/backport-5.15/612-v6.3-skbuff-Fix-a-race-between-coalescing-and-releasing-S.patch deleted file mode 100644 index 7f1b1eebd..000000000 --- a/target/linux/generic/backport-5.15/612-v6.3-skbuff-Fix-a-race-between-coalescing-and-releasing-S.patch +++ /dev/null @@ -1,85 +0,0 @@ -From: Liang Chen -Date: Thu, 13 Apr 2023 17:03:53 +0800 -Subject: [PATCH] skbuff: Fix a race between coalescing and releasing SKBs - -Commit 1effe8ca4e34 ("skbuff: fix coalescing for page_pool fragment -recycling") allowed coalescing to proceed with non page pool page and page -pool page when @from is cloned, i.e. - -to->pp_recycle --> false -from->pp_recycle --> true -skb_cloned(from) --> true - -However, it actually requires skb_cloned(@from) to hold true until -coalescing finishes in this situation. If the other cloned SKB is -released while the merging is in process, from_shinfo->nr_frags will be -set to 0 toward the end of the function, causing the increment of frag -page _refcount to be unexpectedly skipped resulting in inconsistent -reference counts. Later when SKB(@to) is released, it frees the page -directly even though the page pool page is still in use, leading to -use-after-free or double-free errors. So it should be prohibited. - -The double-free error message below prompted us to investigate: -BUG: Bad page state in process swapper/1 pfn:0e0d1 -page:00000000c6548b28 refcount:-1 mapcount:0 mapping:0000000000000000 -index:0x2 pfn:0xe0d1 -flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff) -raw: 000fffffc0000000 0000000000000000 ffffffff00000101 0000000000000000 -raw: 0000000000000002 0000000000000000 ffffffffffffffff 0000000000000000 -page dumped because: nonzero _refcount - -CPU: 1 PID: 0 Comm: swapper/1 Tainted: G E 6.2.0+ -Call Trace: - -dump_stack_lvl+0x32/0x50 -bad_page+0x69/0xf0 -free_pcp_prepare+0x260/0x2f0 -free_unref_page+0x20/0x1c0 -skb_release_data+0x10b/0x1a0 -napi_consume_skb+0x56/0x150 -net_rx_action+0xf0/0x350 -? __napi_schedule+0x79/0x90 -__do_softirq+0xc8/0x2b1 -__irq_exit_rcu+0xb9/0xf0 -common_interrupt+0x82/0xa0 - - -asm_common_interrupt+0x22/0x40 -RIP: 0010:default_idle+0xb/0x20 - -Fixes: 53e0961da1c7 ("page_pool: add frag page recycling support in page pool") -Signed-off-by: Liang Chen -Reviewed-by: Eric Dumazet -Link: https://lore.kernel.org/r/20230413090353.14448-1-liangchen.linux@gmail.com -Signed-off-by: Jakub Kicinski ---- - ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -5397,18 +5397,18 @@ bool skb_try_coalesce(struct sk_buff *to - if (skb_cloned(to)) - return false; - -- /* In general, avoid mixing slab allocated and page_pool allocated -- * pages within the same SKB. However when @to is not pp_recycle and -- * @from is cloned, we can transition frag pages from page_pool to -- * reference counted. -- * -- * On the other hand, don't allow coalescing two pp_recycle SKBs if -- * @from is cloned, in case the SKB is using page_pool fragment -+ /* In general, avoid mixing page_pool and non-page_pool allocated -+ * pages within the same SKB. Additionally avoid dealing with clones -+ * with page_pool pages, in case the SKB is using page_pool fragment - * references (PP_FLAG_PAGE_FRAG). Since we only take full page - * references for cloned SKBs at the moment that would result in - * inconsistent reference counts. -+ * In theory we could take full references if @from is cloned and -+ * !@to->pp_recycle but its tricky (due to potential race with -+ * the clone disappearing) and rare, so not worth dealing with. - */ -- if (to->pp_recycle != (from->pp_recycle && !skb_cloned(from))) -+ if (to->pp_recycle != from->pp_recycle || -+ (from->pp_recycle && skb_cloned(from))) - return false; - - if (len <= skb_tailroom(to)) { diff --git a/target/linux/generic/pending-5.15/735-net-ethernet-mtk_eth_soc-fix-flow_offload-related-re.patch b/target/linux/generic/pending-5.15/735-net-ethernet-mtk_eth_soc-fix-flow_offload-related-re.patch deleted file mode 100644 index 95dc63332..000000000 --- a/target/linux/generic/pending-5.15/735-net-ethernet-mtk_eth_soc-fix-flow_offload-related-re.patch +++ /dev/null @@ -1,33 +0,0 @@ -From: Felix Fietkau -Date: Mon, 20 Mar 2023 15:49:15 +0100 -Subject: [PATCH] net: ethernet: mtk_eth_soc: fix flow_offload related refcount - bug - -Since we call flow_block_cb_decref on FLOW_BLOCK_UNBIND, we need to call -flow_block_cb_incref unconditionally, even for a newly allocated cb. -Fixes a use-after-free bug. Also fix the accidentally inverted refcount -check on unbind. - -Fixes: 502e84e2382d ("net: ethernet: mtk_eth_soc: add flow offloading support") -Signed-off-by: Felix Fietkau ---- - ---- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c -+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c -@@ -584,6 +584,7 @@ mtk_eth_setup_tc_block(struct net_device - if (IS_ERR(block_cb)) - return PTR_ERR(block_cb); - -+ flow_block_cb_incref(block_cb); - flow_block_cb_add(block_cb, f); - list_add_tail(&block_cb->driver_list, &block_cb_list); - return 0; -@@ -592,7 +593,7 @@ mtk_eth_setup_tc_block(struct net_device - if (!block_cb) - return -ENOENT; - -- if (flow_block_cb_decref(block_cb)) { -+ if (!flow_block_cb_decref(block_cb)) { - flow_block_cb_remove(block_cb, f); - list_del(&block_cb->driver_list); - }