]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm/damon/sysfs: check error from damon_sysfs_update_target()
authorSeongJae Park <sj@kernel.org>
Mon, 6 Nov 2023 23:34:06 +0000 (23:34 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 17:07:09 +0000 (17:07 +0000)
commit b4936b544b08ed44949055b92bd25f77759ebafc upstream.

Patch series "mm/damon/sysfs: fix unhandled return values".

Some of DAMON sysfs interface code is not handling return values from some
functions.  As a result, confusing user input handling or NULL-dereference
is possible.  Check those properly.

This patch (of 3):

damon_sysfs_update_target() returns error code for failures, but its
caller, damon_sysfs_set_targets() is ignoring that.  The update function
seems making no critical change in case of such failures, but the behavior
will look like DAMON sysfs is silently ignoring or only partially
accepting the user input.  Fix it.

Link: https://lkml.kernel.org/r/20231106233408.51159-1-sj@kernel.org
Link: https://lkml.kernel.org/r/20231106233408.51159-2-sj@kernel.org
Fixes: 19467a950b49 ("mm/damon/sysfs: remove requested targets when online-commit inputs")
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: <stable@vger.kernel.org> [5.19+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/damon/sysfs.c

index a76a8781438a71e979c317e9bfba3f1e606dbcbc..dbf5e4de97a0fe62eb83116f5d7452ddf105f447 100644 (file)
@@ -2241,8 +2241,10 @@ static int damon_sysfs_set_targets(struct damon_ctx *ctx,
 
        damon_for_each_target_safe(t, next, ctx) {
                if (i < sysfs_targets->nr) {
-                       damon_sysfs_update_target(t, ctx,
+                       err = damon_sysfs_update_target(t, ctx,
                                        sysfs_targets->targets_arr[i]);
+                       if (err)
+                               return err;
                } else {
                        if (damon_target_has_pid(ctx))
                                put_pid(t->pid);