From a62c67b513ff2ea8ee62354a9a1eb25c7aa12193 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 28 Dec 2022 14:13:33 +0100 Subject: [PATCH] 5.10-stable patches added patches: gcov-add-support-for-checksum-field.patch ovl-fix-use-inode-directly-in-rcu-walk-mode.patch --- .../gcov-add-support-for-checksum-field.patch | 49 +++++++++++++++++++ ...-use-inode-directly-in-rcu-walk-mode.patch | 45 +++++++++++++++++ queue-5.10/series | 2 + 3 files changed, 96 insertions(+) create mode 100644 queue-5.10/gcov-add-support-for-checksum-field.patch create mode 100644 queue-5.10/ovl-fix-use-inode-directly-in-rcu-walk-mode.patch diff --git a/queue-5.10/gcov-add-support-for-checksum-field.patch b/queue-5.10/gcov-add-support-for-checksum-field.patch new file mode 100644 index 00000000000..2d5265f13be --- /dev/null +++ b/queue-5.10/gcov-add-support-for-checksum-field.patch @@ -0,0 +1,49 @@ +From e96b95c2b7a63a454b6498e2df67aac14d046d13 Mon Sep 17 00:00:00 2001 +From: Rickard x Andersson +Date: Tue, 20 Dec 2022 11:23:18 +0100 +Subject: gcov: add support for checksum field + +From: Rickard x Andersson + +commit e96b95c2b7a63a454b6498e2df67aac14d046d13 upstream. + +In GCC version 12.1 a checksum field was added. + +This patch fixes a kernel crash occurring during boot when using +gcov-kernel with GCC version 12.2. The crash occurred on a system running +on i.MX6SX. + +Link: https://lkml.kernel.org/r/20221220102318.3418501-1-rickaran@axis.com +Fixes: 977ef30a7d88 ("gcov: support GCC 12.1 and newer compilers") +Signed-off-by: Rickard x Andersson +Reviewed-by: Peter Oberparleiter +Tested-by: Peter Oberparleiter +Reviewed-by: Martin Liska +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +--- + kernel/gcov/gcc_4_7.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/kernel/gcov/gcc_4_7.c ++++ b/kernel/gcov/gcc_4_7.c +@@ -85,6 +85,7 @@ struct gcov_fn_info { + * @version: gcov version magic indicating the gcc version used for compilation + * @next: list head for a singly-linked list + * @stamp: uniquifying time stamp ++ * @checksum: unique object checksum + * @filename: name of the associated gcov data file + * @merge: merge functions (null for unused counter type) + * @n_functions: number of instrumented functions +@@ -97,6 +98,10 @@ struct gcov_info { + unsigned int version; + struct gcov_info *next; + unsigned int stamp; ++ /* Since GCC 12.1 a checksum field is added. */ ++#if (__GNUC__ >= 12) ++ unsigned int checksum; ++#endif + const char *filename; + void (*merge[GCOV_COUNTERS])(gcov_type *, unsigned int); + unsigned int n_functions; diff --git a/queue-5.10/ovl-fix-use-inode-directly-in-rcu-walk-mode.patch b/queue-5.10/ovl-fix-use-inode-directly-in-rcu-walk-mode.patch new file mode 100644 index 00000000000..e49ff259e6f --- /dev/null +++ b/queue-5.10/ovl-fix-use-inode-directly-in-rcu-walk-mode.patch @@ -0,0 +1,45 @@ +From 672e4268b2863d7e4978dfed29552b31c2f9bd4e Mon Sep 17 00:00:00 2001 +From: Chen Zhongjin +Date: Mon, 28 Nov 2022 11:33:05 +0100 +Subject: ovl: fix use inode directly in rcu-walk mode + +From: Chen Zhongjin + +commit 672e4268b2863d7e4978dfed29552b31c2f9bd4e upstream. + +ovl_dentry_revalidate_common() can be called in rcu-walk mode. As document +said, "in rcu-walk mode, d_parent and d_inode should not be used without +care". + +Check inode here to protect access under rcu-walk mode. + +Fixes: bccece1ead36 ("ovl: allow remote upper") +Reported-and-tested-by: syzbot+a4055c78774bbf3498bb@syzkaller.appspotmail.com +Signed-off-by: Chen Zhongjin +Cc: # v5.7 +Signed-off-by: Miklos Szeredi +Signed-off-by: Greg Kroah-Hartman +--- + fs/overlayfs/super.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +--- a/fs/overlayfs/super.c ++++ b/fs/overlayfs/super.c +@@ -138,11 +138,16 @@ static int ovl_dentry_revalidate_common( + unsigned int flags, bool weak) + { + struct ovl_entry *oe = dentry->d_fsdata; ++ struct inode *inode = d_inode_rcu(dentry); + struct dentry *upper; + unsigned int i; + int ret = 1; + +- upper = ovl_dentry_upper(dentry); ++ /* Careful in RCU mode */ ++ if (!inode) ++ return -ECHILD; ++ ++ upper = ovl_i_dentry_upper(inode); + if (upper) + ret = ovl_revalidate_real(upper, flags, weak); + diff --git a/queue-5.10/series b/queue-5.10/series index deb752ac795..62cf9c5108f 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -568,3 +568,5 @@ reiserfs-add-missing-calls-to-reiserfs_security_free.patch iio-adc-ad_sigma_delta-do-not-use-internal-iio_dev-lock.patch iio-adc128s052-add-proper-.data-members-in-adc128_of_match-table.patch regulator-core-fix-deadlock-on-regulator-enable.patch +gcov-add-support-for-checksum-field.patch +ovl-fix-use-inode-directly-in-rcu-walk-mode.patch -- 2.47.3