From: Greg Kroah-Hartman Date: Mon, 7 Aug 2023 07:58:05 +0000 (+0200) Subject: 6.4-stable patches X-Git-Tag: v4.14.321~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f72cc36e98eeb198e60c0f2400b3018124094d9;p=thirdparty%2Fkernel%2Fstable-queue.git 6.4-stable patches added patches: clk-imx93-propagate-correct-error-in-imx93_clocks_probe.patch file-reinstate-f_pos-locking-optimization-for-regular-files.patch --- diff --git a/queue-6.4/clk-imx93-propagate-correct-error-in-imx93_clocks_probe.patch b/queue-6.4/clk-imx93-propagate-correct-error-in-imx93_clocks_probe.patch new file mode 100644 index 00000000000..12c216233cd --- /dev/null +++ b/queue-6.4/clk-imx93-propagate-correct-error-in-imx93_clocks_probe.patch @@ -0,0 +1,42 @@ +From a29b2fccf5f2689a9637be85ff1f51c834c6fb33 Mon Sep 17 00:00:00 2001 +From: Geert Uytterhoeven +Date: Tue, 11 Jul 2023 17:08:12 +0200 +Subject: clk: imx93: Propagate correct error in imx93_clocks_probe() + +From: Geert Uytterhoeven + +commit a29b2fccf5f2689a9637be85ff1f51c834c6fb33 upstream. + +smatch reports: + + drivers/clk/imx/clk-imx93.c:294 imx93_clocks_probe() error: uninitialized symbol 'base'. + +Indeed, in case of an error, the wrong (yet uninitialized) variable is +converted to an error code and returned. +Fix this by propagating the error code in the correct variable. + +Fixes: e02ba11b45764705 ("clk: imx93: fix memory leak and missing unwind goto in imx93_clocks_probe") +Reported-by: Dan Carpenter +Closes: https://lore.kernel.org/all/9c2acd81-3ad8-485d-819e-9e4201277831@kadam.mountain +Reported-by: kernel test robot +Closes: https://lore.kernel.org/all/202306161533.4YDmL22b-lkp@intel.com/ +Signed-off-by: Geert Uytterhoeven +Link: https://lore.kernel.org/r/20230711150812.3562221-1-geert+renesas@glider.be +Reviewed-by: Peng Fan +Signed-off-by: Stephen Boyd +Signed-off-by: Greg Kroah-Hartman +--- + drivers/clk/imx/clk-imx93.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/clk/imx/clk-imx93.c ++++ b/drivers/clk/imx/clk-imx93.c +@@ -291,7 +291,7 @@ static int imx93_clocks_probe(struct pla + anatop_base = devm_of_iomap(dev, np, 0, NULL); + of_node_put(np); + if (WARN_ON(IS_ERR(anatop_base))) { +- ret = PTR_ERR(base); ++ ret = PTR_ERR(anatop_base); + goto unregister_hws; + } + diff --git a/queue-6.4/file-reinstate-f_pos-locking-optimization-for-regular-files.patch b/queue-6.4/file-reinstate-f_pos-locking-optimization-for-regular-files.patch new file mode 100644 index 00000000000..989cb861bd5 --- /dev/null +++ b/queue-6.4/file-reinstate-f_pos-locking-optimization-for-regular-files.patch @@ -0,0 +1,64 @@ +From 797964253d358cf8d705614dda394dbe30120223 Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +Date: Thu, 3 Aug 2023 11:35:53 -0700 +Subject: file: reinstate f_pos locking optimization for regular files + +From: Linus Torvalds + +commit 797964253d358cf8d705614dda394dbe30120223 upstream. + +In commit 20ea1e7d13c1 ("file: always lock position for +FMODE_ATOMIC_POS") we ended up always taking the file pos lock, because +pidfd_getfd() could get a reference to the file even when it didn't have +an elevated file count due to threading of other sharing cases. + +But Mateusz Guzik reports that the extra locking is actually measurable, +so let's re-introduce the optimization, and only force the locking for +directory traversal. + +Directories need the lock for correctness reasons, while regular files +only need it for "POSIX semantics". Since pidfd_getfd() is about +debuggers etc special things that are _way_ outside of POSIX, we can +relax the rules for that case. + +Reported-by: Mateusz Guzik +Cc: Christian Brauner +Link: https://lore.kernel.org/linux-fsdevel/20230803095311.ijpvhx3fyrbkasul@f/ +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman +--- + fs/file.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +--- a/fs/file.c ++++ b/fs/file.c +@@ -1036,12 +1036,28 @@ unsigned long __fdget_raw(unsigned int f + return __fget_light(fd, 0); + } + ++/* ++ * Try to avoid f_pos locking. We only need it if the ++ * file is marked for FMODE_ATOMIC_POS, and it can be ++ * accessed multiple ways. ++ * ++ * Always do it for directories, because pidfd_getfd() ++ * can make a file accessible even if it otherwise would ++ * not be, and for directories this is a correctness ++ * issue, not a "POSIX requirement". ++ */ ++static inline bool file_needs_f_pos_lock(struct file *file) ++{ ++ return (file->f_mode & FMODE_ATOMIC_POS) && ++ (file_count(file) > 1 || S_ISDIR(file_inode(file)->i_mode)); ++} ++ + unsigned long __fdget_pos(unsigned int fd) + { + unsigned long v = __fdget(fd); + struct file *file = (struct file *)(v & ~3); + +- if (file && (file->f_mode & FMODE_ATOMIC_POS)) { ++ if (file && file_needs_f_pos_lock(file)) { + v |= FDPUT_POS_UNLOCK; + mutex_lock(&file->f_pos_lock); + } diff --git a/queue-6.4/series b/queue-6.4/series index 7e7fc06dfbc..11ef3ddf3d6 100644 --- a/queue-6.4/series +++ b/queue-6.4/series @@ -130,3 +130,5 @@ drm-i915-fix-premature-release-of-request-s-reusable-memory.patch drm-i915-gt-cleanup-aux-invalidation-registers.patch revert-page-cache-fix-page_cache_next-prev_miss-off-by-one.patch sunvnet-fix-sparc64-build-error-after-gso-code-split.patch +clk-imx93-propagate-correct-error-in-imx93_clocks_probe.patch +file-reinstate-f_pos-locking-optimization-for-regular-files.patch