From: Greg Kroah-Hartman Date: Mon, 29 Mar 2021 06:14:45 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v5.11.11~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=97df15ec5f971769324950dbe589c68473816965;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: can-dev-move-device-back-to-init-netns-on-owning-netns-delete.patch ch_ktls-fix-enum-conversion-warning.patch fs-cachefiles-remove-wait_bit_key-layout-dependency.patch --- diff --git a/queue-5.10/can-dev-move-device-back-to-init-netns-on-owning-netns-delete.patch b/queue-5.10/can-dev-move-device-back-to-init-netns-on-owning-netns-delete.patch new file mode 100644 index 00000000000..a25389b8a00 --- /dev/null +++ b/queue-5.10/can-dev-move-device-back-to-init-netns-on-owning-netns-delete.patch @@ -0,0 +1,96 @@ +From 3a5ca857079ea022e0b1b17fc154f7ad7dbc150f Mon Sep 17 00:00:00 2001 +From: Martin Willi +Date: Tue, 2 Mar 2021 13:24:23 +0100 +Subject: can: dev: Move device back to init netns on owning netns delete + +From: Martin Willi + +commit 3a5ca857079ea022e0b1b17fc154f7ad7dbc150f upstream. + +When a non-initial netns is destroyed, the usual policy is to delete +all virtual network interfaces contained, but move physical interfaces +back to the initial netns. This keeps the physical interface visible +on the system. + +CAN devices are somewhat special, as they define rtnl_link_ops even +if they are physical devices. If a CAN interface is moved into a +non-initial netns, destroying that netns lets the interface vanish +instead of moving it back to the initial netns. default_device_exit() +skips CAN interfaces due to having rtnl_link_ops set. Reproducer: + + ip netns add foo + ip link set can0 netns foo + ip netns delete foo + +WARNING: CPU: 1 PID: 84 at net/core/dev.c:11030 ops_exit_list+0x38/0x60 +CPU: 1 PID: 84 Comm: kworker/u4:2 Not tainted 5.10.19 #1 +Workqueue: netns cleanup_net +[] (unwind_backtrace) from [] (show_stack+0x10/0x14) +[] (show_stack) from [] (dump_stack+0x94/0xa8) +[] (dump_stack) from [] (__warn+0xb8/0x114) +[] (__warn) from [] (warn_slowpath_fmt+0x7c/0xac) +[] (warn_slowpath_fmt) from [] (ops_exit_list+0x38/0x60) +[] (ops_exit_list) from [] (cleanup_net+0x230/0x380) +[] (cleanup_net) from [] (process_one_work+0x1d8/0x438) +[] (process_one_work) from [] (worker_thread+0x64/0x5a8) +[] (worker_thread) from [] (kthread+0x148/0x14c) +[] (kthread) from [] (ret_from_fork+0x14/0x2c) + +To properly restore physical CAN devices to the initial netns on owning +netns exit, introduce a flag on rtnl_link_ops that can be set by drivers. +For CAN devices setting this flag, default_device_exit() considers them +non-virtual, applying the usual namespace move. + +The issue was introduced in the commit mentioned below, as at that time +CAN devices did not have a dellink() operation. + +Fixes: e008b5fc8dc7 ("net: Simplfy default_device_exit and improve batching.") +Link: https://lore.kernel.org/r/20210302122423.872326-1-martin@strongswan.org +Signed-off-by: Martin Willi +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/can/dev.c | 1 + + include/net/rtnetlink.h | 2 ++ + net/core/dev.c | 2 +- + 3 files changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/net/can/dev.c ++++ b/drivers/net/can/dev.c +@@ -1255,6 +1255,7 @@ static void can_dellink(struct net_devic + + static struct rtnl_link_ops can_link_ops __read_mostly = { + .kind = "can", ++ .netns_refund = true, + .maxtype = IFLA_CAN_MAX, + .policy = can_policy, + .setup = can_setup, +--- a/include/net/rtnetlink.h ++++ b/include/net/rtnetlink.h +@@ -33,6 +33,7 @@ static inline int rtnl_msg_family(const + * + * @list: Used internally + * @kind: Identifier ++ * @netns_refund: Physical device, move to init_net on netns exit + * @maxtype: Highest device specific netlink attribute number + * @policy: Netlink policy for device specific attribute validation + * @validate: Optional validation function for netlink/changelink parameters +@@ -64,6 +65,7 @@ struct rtnl_link_ops { + size_t priv_size; + void (*setup)(struct net_device *dev); + ++ bool netns_refund; + unsigned int maxtype; + const struct nla_policy *policy; + int (*validate)(struct nlattr *tb[], +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -11106,7 +11106,7 @@ static void __net_exit default_device_ex + continue; + + /* Leave virtual devices for the generic cleanup */ +- if (dev->rtnl_link_ops) ++ if (dev->rtnl_link_ops && !dev->rtnl_link_ops->netns_refund) + continue; + + /* Push remaining network devices to init_net */ diff --git a/queue-5.10/ch_ktls-fix-enum-conversion-warning.patch b/queue-5.10/ch_ktls-fix-enum-conversion-warning.patch new file mode 100644 index 00000000000..36ef2d39346 --- /dev/null +++ b/queue-5.10/ch_ktls-fix-enum-conversion-warning.patch @@ -0,0 +1,37 @@ +From 6f235a69e59484e382dc31952025b0308efedc17 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 23 Mar 2021 22:52:50 +0100 +Subject: ch_ktls: fix enum-conversion warning + +From: Arnd Bergmann + +commit 6f235a69e59484e382dc31952025b0308efedc17 upstream. + +gcc points out an incorrect enum assignment: + +drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c: In function 'chcr_ktls_cpl_set_tcb_rpl': +drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c:684:22: warning: implicit conversion from 'enum ' to 'enum ch_ktls_open_state' [-Wenum-conversion] + +This appears harmless, and should apparently use 'CH_KTLS_OPEN_SUCCESS' +instead of 'false', with the same value '0'. + +Fixes: efca3878a5fb ("ch_ktls: Issue if connection offload fails") +Reviewed-by: Andrew Lunn +Signed-off-by: Arnd Bergmann +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c ++++ b/drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c +@@ -727,7 +727,7 @@ static int chcr_ktls_cpl_set_tcb_rpl(str + kvfree(tx_info); + return 0; + } +- tx_info->open_state = false; ++ tx_info->open_state = CH_KTLS_OPEN_SUCCESS; + spin_unlock(&tx_info->lock); + + complete(&tx_info->completion); diff --git a/queue-5.10/fs-cachefiles-remove-wait_bit_key-layout-dependency.patch b/queue-5.10/fs-cachefiles-remove-wait_bit_key-layout-dependency.patch new file mode 100644 index 00000000000..dd5e108895f --- /dev/null +++ b/queue-5.10/fs-cachefiles-remove-wait_bit_key-layout-dependency.patch @@ -0,0 +1,64 @@ +From 39f985c8f667c80a3d1eb19d31138032fa36b09e Mon Sep 17 00:00:00 2001 +From: "Matthew Wilcox (Oracle)" +Date: Sat, 20 Mar 2021 05:40:38 +0000 +Subject: fs/cachefiles: Remove wait_bit_key layout dependency + +From: Matthew Wilcox (Oracle) + +commit 39f985c8f667c80a3d1eb19d31138032fa36b09e upstream. + +Cachefiles was relying on wait_page_key and wait_bit_key being the +same layout, which is fragile. Now that wait_page_key is exposed in +the pagemap.h header, we can remove that fragility + +A comment on the need to maintain structure layout equivalence was added by +Linus[1] and that is no longer applicable. + +Fixes: 62906027091f ("mm: add PageWaiters indicating tasks are waiting for a page bit") +Signed-off-by: Matthew Wilcox (Oracle) +Reviewed-by: Christoph Hellwig +Signed-off-by: David Howells +Tested-by: kafs-testing@auristor.com +cc: linux-cachefs@redhat.com +cc: linux-mm@kvack.org +Link: https://lore.kernel.org/r/20210320054104.1300774-2-willy@infradead.org/ +Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3510ca20ece0150af6b10c77a74ff1b5c198e3e2 [1] +Signed-off-by: Greg Kroah-Hartman +--- + fs/cachefiles/rdwr.c | 7 +++---- + include/linux/pagemap.h | 1 - + 2 files changed, 3 insertions(+), 5 deletions(-) + +--- a/fs/cachefiles/rdwr.c ++++ b/fs/cachefiles/rdwr.c +@@ -24,17 +24,16 @@ static int cachefiles_read_waiter(wait_q + container_of(wait, struct cachefiles_one_read, monitor); + struct cachefiles_object *object; + struct fscache_retrieval *op = monitor->op; +- struct wait_bit_key *key = _key; ++ struct wait_page_key *key = _key; + struct page *page = wait->private; + + ASSERT(key); + + _enter("{%lu},%u,%d,{%p,%u}", + monitor->netfs_page->index, mode, sync, +- key->flags, key->bit_nr); ++ key->page, key->bit_nr); + +- if (key->flags != &page->flags || +- key->bit_nr != PG_locked) ++ if (key->page != page || key->bit_nr != PG_locked) + return 0; + + _debug("--- monitor %p %lx ---", page, page->flags); +--- a/include/linux/pagemap.h ++++ b/include/linux/pagemap.h +@@ -559,7 +559,6 @@ static inline pgoff_t linear_page_index( + return pgoff; + } + +-/* This has the same layout as wait_bit_key - see fs/cachefiles/rdwr.c */ + struct wait_page_key { + struct page *page; + int bit_nr; diff --git a/queue-5.10/series b/queue-5.10/series index 9edbfde736c..356c07ef95c 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -207,3 +207,6 @@ cifs-adjust-key-sizes-and-key-generation-routines-for-aes256-encryption.patch locking-mutex-fix-non-debug-version-of-mutex_lock_io_nested.patch x86-mem_encrypt-correct-physical-address-calculation-in-__set_clr_pte_enc.patch mm-memcg-fix-5.10-backport-of-splitting-page-memcg.patch +fs-cachefiles-remove-wait_bit_key-layout-dependency.patch +ch_ktls-fix-enum-conversion-warning.patch +can-dev-move-device-back-to-init-netns-on-owning-netns-delete.patch