From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0EBB145A05 for ; Fri, 10 Apr 2026 12:32:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775824367; cv=none; b=DH6KM9paVq7wL3ukbyUizpXUusNukxjbUoXFdnH7wV+uTD+vFHUGApZBxOzq3yU+rONmFdma3IHpHq0uU8isvAFsYyJ9I+HV7I5YsB5Kcpe+nHGe5t2lEzWJWOaRQidXCeb0mAMRPVp8BqXixAL4t9cBnncOVYRHynSAbZ/1lXM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775824367; c=relaxed/simple; bh=fKotE9sqih3rMY/B1phxp5PB0TSipY/SWWi1xqUuM0U=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=EUWoD2STQDRCZsEFo5WIdeUXgzrTZisQYR44xgeNxj2WIfI+y+dNh+tYi/gI4BZd3w4ClcHccKiOaCwEcnmo4rIZNybfAqHxWdsTByawUl4TL5V8iyGR2Q0Ody4SlKkyV9CXehiXro4dHRQHHjEIYgytAdAWLjkOrtkfOpQ4yj8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=Od5u35kH; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="Od5u35kH" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-43cfd1f9fd1so1278814f8f.3 for ; Fri, 10 Apr 2026 05:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1775824364; x=1776429164; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=vfYHIgwT/+XibyAqqKvJ/BcCMPjxG42mmRmKZ+baYyU=; b=Od5u35kHv1noflHARq9ZyCY3g2qpMcftmXtUR7ulzIuAfeRAHbIdx7XquYFhzjUI0x D97Ji471d4sQu67Lj9fmauYhRXcYytPbA5f8im0LAEL2souIrvxGaG7nuYkJf8xSEgFY 2B6ixj6BUQZqzVYXFToOe/DhVEOOezxMW96BETc97UglcBCVN+vNEoIkSzXO24xcBaWH hlQKun/4oYv4paB2WNHRViCKgWirQOVgT93R9G2deB8Ej8yH21qWfMa3MUZqYp0jS7bO SEdXZ2/GjhduffwAOG0KQ6xNrfSZUAoi3QA/1ZyXu+9BhJ9RLMlGj7HLE/fbUjLL7CKs dF9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775824364; x=1776429164; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vfYHIgwT/+XibyAqqKvJ/BcCMPjxG42mmRmKZ+baYyU=; b=WFkJoQq9glsxoRk55RC6vVvDWVvCB6IIMEwHuITTYwv63gsXPLN4t/Vya4cGCG1LIE Dml88ooC7VviAOTJbO0t0Wh9UlZcgMDy32FkNi29n2+0UodS0NASEhLH3zUiS/9hJqMi sg+9zNFUsOrLwCiIU9kn75PFpolZ/BKnM2/okcYY0kMh3pT5YvZjKK/aVE8WpjBud9C1 AnTh0xE3CgrYYKD6m5Abiw0CK5RZ1I4lRflJCqKyI/CIybcUKBN9qZpm3cy/JgI4Q/S5 qspKP9KlFQeQKScIoVP1qdmuvQVC3RhxBKT8xD2aJayGKmMCOY0P1zWtXylWUv2u8Gw/ Halw== X-Forwarded-Encrypted: i=1; AJvYcCXHY24+l9/dovuZ0RDTBRDPM2VC3mbd6WqHsiKYuIMjjMr2Bf2chrIyDDoeh8ixyeD+ECJfYkixBBhVsr0=@vger.kernel.org X-Gm-Message-State: AOJu0YyZszs5oPwW6G9/sgm/CcUUNJP4L7VUXezBIzeDAhtXKxJYQx7q 21XDAgo4uAPVkm/eQ1HOgouiRsaBEmdXFfvzEsJ+cLxphq1k7qyZf5Ejczkp3gztp80= X-Gm-Gg: AeBDievbruKy9t4pt4IHEv47Syd8Uy1Wvku+GzoEA7RoqFuWRvlEEl3PQSANlzc3cpx 78pOOwWgq2flaxlMYTrTKpxEKAoyHsaSEiqeBWwqrz/5gp6v9/kC0hCKbLXvoi0A/mnjYigA2LM hE7m0j9NcpZfmP5unhLIO9/41JWlOyut9mgpFl1QytwopQ2FPtfjzJCjjwslR+qnO/iF3Dk8IbY dIuE0+tugvn0QLHxvcc6XID1Bw5A1dOYTYSV538ocIJsyS2oDMXOss+KeZar7QaqhMRJyf14/1z 23WNZ7SkUSoGfHzZioPAidnjPI0nE1+/IwBTqqrInuLrOc6DP5bIp9LZYi/rPcZEbMruxnbM7a6 l77C/wSJCqeynx0hFV1Yb1F4DaVxDslDO5xaSWA6QkNBNMRnYzXq/2GMddKUaf5r1zpHLLHl05x M0+25w7vqyo5YtWHKflMOcgAfOZbDKlYqnsg== X-Received: by 2002:a05:6000:2010:b0:43c:fb48:6856 with SMTP id ffacd0b85a97d-43d6428a35fmr4505424f8f.13.1775824363866; Fri, 10 Apr 2026 05:32:43 -0700 (PDT) Received: from localhost (109-81-92-28.rct.o2.cz. [109.81.92.28]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43d63deb904sm7831977f8f.9.2026.04.10.05.32.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 05:32:43 -0700 (PDT) Date: Fri, 10 Apr 2026 14:32:42 +0200 From: Michal Hocko To: Cao Ruichuang Cc: Andrew Morton , linux-mm@kvack.org, David Hildenbrand , Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , linux-kernel@vger.kernel.org Subject: Re: [PATCH] mm/vmstat: reject invalid stat_interval values Message-ID: References: <20260410112554.23165-1-create0818@163.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260410112554.23165-1-create0818@163.com> On Fri 10-04-26 19:25:54, Cao Ruichuang wrote: > vm.stat_interval is exposed in seconds, but proc_dointvec_jiffies() > currently accepts zero and negative values. In the current tree, > writing 0 succeeds and leaves /proc/sys/vm/stat_interval at 0. > > vmstat_update() uses the stored jiffy interval directly when it > requeues its delayed work, so a zero interval can drive excessive > kworker CPU usage. Negative values are not meaningful either. > > Switch vm.stat_interval to a small custom sysctl handler that keeps > the existing seconds-based userspace ABI while rejecting values below > 1 and capping the upper bound at INT_MAX / HZ. This is admin only interface and we usually trust them to know what they are doing. The same applies here. There are many interface behaving this way. Is there any specific reason why we should treat this one differently or are you suggesting to change this approach and sanitize all of them? Changing just this one in isolation is IMHO not worth it. > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=220226 > Signed-off-by: Cao Ruichuang > --- > mm/vmstat.c | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 86b14b0f77b..f48d3bdad64 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -1964,6 +1964,7 @@ static const struct seq_operations vmstat_op = { > #ifdef CONFIG_SMP > static DEFINE_PER_CPU(struct delayed_work, vmstat_work); > static int sysctl_stat_interval __read_mostly = HZ; > +static const int sysctl_stat_interval_max = INT_MAX / HZ; > static int vmstat_late_init_done; > > #ifdef CONFIG_PROC_FS > @@ -1972,6 +1973,26 @@ static void refresh_vm_stats(struct work_struct *work) > refresh_cpu_vm_stats(true); > } > > +static int vmstat_stat_interval_handler(const struct ctl_table *table, int write, > + void *buffer, size_t *lenp, loff_t *ppos) > +{ > + int interval = sysctl_stat_interval / HZ; > + const struct ctl_table tmp = { > + .data = &interval, > + .maxlen = sizeof(interval), > + .mode = table->mode, > + .extra1 = SYSCTL_ONE, > + .extra2 = (void *)&sysctl_stat_interval_max, > + }; > + int ret; > + > + ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos); > + if (!ret && write) > + sysctl_stat_interval = interval * HZ; > + > + return ret; > +} > + > static int vmstat_refresh(const struct ctl_table *table, int write, > void *buffer, size_t *lenp, loff_t *ppos) > { > @@ -2236,7 +2257,7 @@ static const struct ctl_table vmstat_table[] = { > .data = &sysctl_stat_interval, > .maxlen = sizeof(sysctl_stat_interval), > .mode = 0644, > - .proc_handler = proc_dointvec_jiffies, > + .proc_handler = vmstat_stat_interval_handler, > }, > { > .procname = "stat_refresh", > -- > 2.39.5 (Apple Git-154) -- Michal Hocko SUSE Labs