From patchwork Thu Mar 6 17:58:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 14005059 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 44BD0C282DE for ; Thu, 6 Mar 2025 17:59:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8D8B4280001; Thu, 6 Mar 2025 12:59:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 88727280003; Thu, 6 Mar 2025 12:59:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7796B280001; Thu, 6 Mar 2025 12:59:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 4B22E280003 for ; Thu, 6 Mar 2025 12:59:16 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 588841221E1 for ; Thu, 6 Mar 2025 17:59:16 +0000 (UTC) X-FDA: 83191887912.18.7C94453 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf19.hostedemail.com (Postfix) with ESMTP id B58E21A000B for ; Thu, 6 Mar 2025 17:59:14 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=r2YlYirJ; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf19.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741283954; 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=6meF8p//GTdk7y89ltTVBvyIzIETU8aeH7iQN7taErY=; b=kv4ejhbyZLybN6AZuRCANGWh0HaUVcC83ahyjkL3hJDgmda08lcLp2pBSu+78mkduMUxgN InZ4LG9ys+m9obrFY2gVyWgBqXp+U8V0WyLjIvrZhjWSvmvclM9Lo2W//EPYHLuAmFTDBp F7J44bewtd4NDxrBRgDMIcLLhS5hwec= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=r2YlYirJ; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf19.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741283954; a=rsa-sha256; cv=none; b=f+SiPHh4V4b2UHBhJ4G9+OI/ZsKjvrGB3Z6ZBf2rJI0mLutIH/oQbjUAzZDk0tb50jv/DN XkSBFveyXEDcxmZUImx9dTDkqBlM/geXPfXRCUyPOi6IZS5XoLea4Asud5KXNKhPUR5ahv sDoKJWgxJn03Mg+9Iz5/pPpa9WoG724= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 38B615C5968; Thu, 6 Mar 2025 17:56:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 891C2C4AF09; Thu, 6 Mar 2025 17:59:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741283953; bh=s3K1j/KtFWFlfZ4nT5daB6KeJd16T5I6BVsvRI8TnBk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r2YlYirJHFp/wJtVUL7tffYgMhDwY2Ik+mZkg4cYEO2+Cp0OBou2I0OjZMh+T4caT ypz2HqLqrukRM8jMWJkTsEofWtapkCQog8j6CZJcSiDFoik7gQASwHwRfMlN/kSN06 MDivW6nDcqzWWg+Xnn68/8X5BHHcGc9m2FUz1CuKZghmvpUD+rZNwYLdN9yq/CX+sF AstH6vhqHhTlpRiuh593cNXH7v0O3dnKFQqhnnUudFiGGrONwzfjrrM79OGKegO2g2 zmyK+gfhK+3oHGsyKk7aTz9wVbF/zubx1wZW7wku1tS9NSPtyLwvcSi8633R6LJdFc ZE3c5WwcJUyXA== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 01/13] mm/damon/sysfs: validate user inputs from damon_sysfs_commit_input() Date: Thu, 6 Mar 2025 09:58:56 -0800 Message-Id: <20250306175908.66300-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250306175908.66300-1-sj@kernel.org> References: <20250306175908.66300-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: B58E21A000B X-Rspam-User: X-Stat-Signature: 1ow351ssy49e3eu4x199zp5h8cex63nn X-HE-Tag: 1741283954-395182 X-HE-Meta: U2FsdGVkX18O/LhG/o2Q/vIPNdRw++QpMd7fPjyd6/aa9AablKlQ8ucQL1/u59SGB6oBkYpduRVym+gioZyaYJFSQR5NY3byKosFRx2B1QDtCMHegYX3pKocVst/2BhfJPdFo4+mUE3cqRDj/xkDYDnbXJoA7MhV/H1SDObqSb07MoeYzBAvPWv0wBzkRD/AB77+SOMl8aahjbIVvQKB7T2kbAz1XPFNvrCbrVBxaXE8xSdMaX3iH6JJaGl9mXKPDEw2tRotQVoNXFjwfmSHS8ytQ9xuAdY8ZnmbWAHsjbXMb6JMehQ/CGLMuQ360l0m7nQJ+qd8lkY17+LUk/x+juZwVKW4CKJKTG8dAZSzyHSZu5F5xOvFsHTQRWuF87GLqR1UtiYLfROXe3EIGMFB6IncCFFqtZru7xDAK7U19TOSNR1K+4uVlp+HvlolJbR709mX+QkVOb6fym6B5WEjZi5b4ONMqOI3XNxuW4g7SSR8ZqFT8mQHRR+Q9XywDfWlfteVQ49VP5euhTPyqyJ14XX2As+6zQTWVLA0ZWyYrwvizcNBc6WC02bDXDoDnyRTiK1/e/OWu1d54mG7r2gqGuRl6YNx9uRnKm9ZcxourGmldwb/1Nn9s94od65oBN6lXIgPNWzeZ0QGCiUgw636LK4s3cWK+3qSBRzw8znQBGAtv/P6KLMV6UmBHSEoUUjG6RbPsabCXGsMj+Ei670nzyb5VsOjua0GqIJFiPbyTL+W6Wgq5IH/X3wMt13zsktRDj9TeLIjPngs9eDmkL84geAuEVhxeoVyj127IewYK5wJZtMRWb0Kc/xhyGcpBrsxGqD3t1tN7FusnHzX3lZpBCEjudTjtxD7ILv14DQ+QC367lxKPC6m7kAPQSnt3UDqpdnle31wwDBBcnMcpNrQLXP+InDqKD1oY/803+uWNLvUfwR5blFuqsHM5KfdnB1mKIcsLkV3Brjpk2HsPSS yqJHktFk JAsnak41UE9P2q8deBwTDDTwi0Xv/V90gTx81W29BA4ECj4KUZSyQQ3XOJF46ANrl5F7bMi7zl45vmB+6n3fXYwKFoodXCM1hN79Lc9toNwyU4YXM2JzyzQMgm55euqcY/Sxh0KKfCZ6aYMT00oERtLr0Jb9vtZzPe11D/oPvWDXvqhhjQk9r1kw/lvZXOPH4rG9r3wOSbX6wmx4K0rWcmWGJPM7aXnKZSbavk2IaA6qo3weELjkd1YYCX6cNCTh4FX0gJKex7eiz7c0WkDs26/YXHQ== 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 tries committing the parameter without validation. If it finds something wrong in the middle of the parameters update, it returns error without reverting the partially committed parameters back. It is safe though, since it immediately breaks kdamond main loop in the case of the error return. Users can make the wrong parameters by mistake, though. Stopping kdamond in the case is not very useful behavior. Also this makes it difficult to utilize damon_call() instead of damon_callback hook for online parameters update, since damon_call() cannot immediately break kdamond main loop in the middle. Validate the input parameters and return error when it fails before starting parameters updates. In case of mistakenly wrong parameters, kdamond can continue running with the old and valid parameters. 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;