From patchwork Wed Feb 26 06:36:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13991599 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 93801C021B8 for ; Wed, 26 Feb 2025 06:37:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 32607280012; Wed, 26 Feb 2025 01:37:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2D48E280007; Wed, 26 Feb 2025 01:37:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 176A7280012; Wed, 26 Feb 2025 01:37:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id E9535280007 for ; Wed, 26 Feb 2025 01:37:07 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AB0D5A2B80 for ; Wed, 26 Feb 2025 06:37:07 +0000 (UTC) X-FDA: 83161138494.10.109B2A8 Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf11.hostedemail.com (Postfix) with ESMTP id 2935940003 for ; Wed, 26 Feb 2025 06:37:06 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=JNjpdu0n; spf=pass (imf11.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740551826; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=d/1UXdPzQmSuOeROSiHvlbTA0nW1Xg0OTL+857KR9EE=; b=lB0R5pMRgcua55WpbYh4C449X7VKwGu+yy8uFSNPtoDLNyjgBsxM40GCdOGv7BR7orAU04 BWLIIy9BfButVOpFsLPID/bDcCd7vbQZzRxz4nfgNtpn9bKmUJulI8ciRkLRdjbIPtDejD J4XmJBTtp56j69DFEnvwhBo2F6F2wGs= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=JNjpdu0n; spf=pass (imf11.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740551826; a=rsa-sha256; cv=none; b=Np0ibHYdedSPf6KIFNBodbBSAlSuszVo8SMNoJ0Tu/AYrJmd8RKe56ygcsoh4PISlDnaHB XeCSR9obMCQc7GfXbcczxRx/6QiPa05u9ycQ6vrKmDqTLKPgVOldAaLubwYTWjapdwKWCW PylNkjvEe2vkFtFaezZYTNQC1YiP8D0= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id D6CE761223; Wed, 26 Feb 2025 06:36:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE5C5C4CEE2; Wed, 26 Feb 2025 06:36:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740551816; bh=5n9xRLBBKD40DxaNJxpmX5CbdO8tnA9vHZtFNqo0gek=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JNjpdu0naIeVD/lEw6HDtDk+7/Wad7TrQhcHR/+50Bj4hoe+y6aNGrXqIPF90UhX3 CAnGFDEcAhmNDIxn88JGEMRBGoudUaSX1NKQm0FkOSuDs4JRdCbeWv9hBjD8RTZW2T zX69CheuLIzZ05UaOf95ACvkggJVfNhwABo1lFEvgGuIkuSaQAIMrQXxFm5i/Al1uH tjGjfTNdOXeAmXEv7ouuwwFqyyTs2zuGY+USl8gVaBdkqXtugtuXtprfoyai76z29b HKE4HYcVWyDaCKJnEBczKxPQpf3QrO9z32HKGAEsFMHouBXLW2Lr3ZnlOfa7uRonEm ZbDqtOQl08BpA== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 01/13] mm/damon/sysfs: validate user inputs from damon_sysfs_commit_input() Date: Tue, 25 Feb 2025 22:36:39 -0800 Message-Id: <20250226063651.513178-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250226063651.513178-1-sj@kernel.org> References: <20250226063651.513178-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 2935940003 X-Stat-Signature: urkund1ay7ipfd4r167zu19ma9tmn9ky X-HE-Tag: 1740551826-86850 X-HE-Meta: U2FsdGVkX19rdBCrxDkIxk9anXdeYKsaebSHn33lmvIp5vCxRLTf5muIrrj3gBTx/RceUjtA7wPlfnYaccniNUcHTmdFvhdVmMY7cgh6f7hsnHGNn7yZj6VlUxGy1ysxUDqgbsKod7eFuRnyMrnrYNvJ38ekPoygQRsOCq4flanPBJ3tKfffcUWqC+AlnJ3U+g2km9MPCboKFonZ7F0ZuiK9NEDhNgw+H93kNDYGgfNR5ZyGzT5RFA13FGJpW/g2beiMK64joX+LQ6SP3W4vs00AFFDRK3x/De/Q/33Nu7kY22OTnJlVqfNdnZ6a1XPy8PLFwAI6CfO0i5Seni0PdJGeVNuINwnqjcbsCUxPkgBhgcFfyAdDHO9oujI4pVrCHTeYugicya4DjqIgYYiJMGqQCstWoGf0EOVcV7/Sf3KqcQw+6HdvLph4KG/o2VHEwQj+3AqAnIjhzBQnw5oNchzyKg6Zu15icUAEdrxtoq7Y8TCqcCGX1o+9yNhtrXAIv98mh0JKAN4YzN/nGQ59B44FsI1uBLTEKIliCsNvJubXLlyXbT007usj1vrsbV7g5VUbF9viHS6SVJ56aY8xk6ILFt3Bd14HXx3SxAjX1JX/JsDTba7G+KwaEPCg+jiR1jRex3br2UzPCbsAM3CGXk5W8rTy3rk/Pwn8PB2G8x2mGjPeIeOvRuEwp9NCdIPikkIh9S5M0XcVIrEkzTo4uEbiq0nX4r0c7OR9gpT9BS6SBgFlWze/xxBkaxblOlQzCQAwbPtd3nKB8RHNOTt0jYhfaWEtFSIZYEgJI/CbipqmZ7O8MGdcUJwpZ7NSKX45B5x0WiY6JcPpLczuePXQ0DdRJco5IoVZqkMgfQg5SSHMPs65hlKiGAEZCh2JWKmWm7iyk9zQ3iT0UGBObRwoeM9KDS8wP5WZnrn9hyVG2nWmgtgyti8bdwZs9wpxXrVwXESQfMMj/A0XqrhB165 S2wKFZ7s T3NDctxNVvpMgjsWthHuMhJVv+qmdJRiDOI7TbBEEhrCtL/SusUpLtIXCG+AyLBfn2rAKetVEqdGi2Dsg+pOtklxwlDISQKCZyhgRjYlO9a/LoWpgpmvlW2c3sxKFnTbWh9lC7CFdJJn5SkO+8O22p++8zIJrsgv+hDFYx1DonUjxF8nr4cm7BNlPOoSxSDaMmNb7gXylF3Ox3YAQ8PuaR6NbuCDsk83MctxHksgZRKb4Rn/qg52ICdsgtWhY8T6bnGYFyZKmuHBWmJkzkTqz44sxkw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Online DAMON parameters commit via DAMON sysfs interface can make kdamond stop. This behavior was made because it can make the implementation simpler. The implementation simply tries committing the parameter without validation. If it finds something wrong, it returns error without reverting partially committed parameters back. It is safe though, since it breaks kdamond main loop in the case of the error return. Users can make the wrong parameters by mistake, though. Validating the input parameters first and returning the error when some parameters wrong, while letting kdamond continues running with the old parameters would be the better behavior. This behavior can also make damon_call() carrying the online commit instead of the damon_callback hook in future easier, because damon_call() cannot directly break kdamond main loop. Implement the better behavior. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index ccd435d234b9..87e4c6e3614e 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1449,11 +1449,11 @@ static struct damon_ctx *damon_sysfs_build_ctx( * damon_sysfs_commit_input() - Commit user inputs to a running kdamond. * @kdamond: The kobject wrapper for the associated kdamond. * - * If the sysfs input is wrong, the kdamond will be terminated. + * Returns error if the sysfs input is wrong. */ static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond) { - struct damon_ctx *param_ctx; + struct damon_ctx *param_ctx, *test_ctx; int err; if (!damon_sysfs_kdamond_running(kdamond)) @@ -1465,7 +1465,15 @@ static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond) param_ctx = damon_sysfs_build_ctx(kdamond->contexts->contexts_arr[0]); if (IS_ERR(param_ctx)) return PTR_ERR(param_ctx); + test_ctx = damon_new_ctx(); + err = damon_commit_ctx(test_ctx, param_ctx); + if (err) { + damon_sysfs_destroy_targets(test_ctx); + damon_destroy_ctx(test_ctx); + goto out; + } err = damon_commit_ctx(kdamond->damon_ctx, param_ctx); +out: damon_sysfs_destroy_targets(param_ctx); damon_destroy_ctx(param_ctx); return err;