From nobody Sun Feb 8 02:21:18 2026 Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) (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 9B05523C505 for ; Fri, 19 Dec 2025 21:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766179811; cv=none; b=ZZHYFXXuPW8NRUHrDeObdmzfcT6Qd04wPrPlrh5MQ0obVc5V6p1vuF2dfMEOCsXiYlGIN45b5mPNsihvPwnE6B3gtGH4K2tfsxM3jseHQLWq2p2DiZ3OeLHyAqxslZQK+4V3660HN2r3ZKXmzyuh6G/hAkkzbklqO7eDndCRerg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766179811; c=relaxed/simple; bh=hEPhKwT/pgywPCq0dB8gQ/MONU1VQk+JP/YIdz6V9os=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=IJNjwxhrKeqcPVkt6W5zOlUusJJQbnfeVRN0wplL33YLaNEuF//rDRTL53TszQODGeHFKJz3jti6S3Cz4wnLVSJ95EHikxVzzEOgV79EOBRbg5G88z65mWmWzTK1CLiz9k0e3iyU27OfGCLdAnJba6gvNvJkIkl0maQSVk9gdrs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QFPsJOyl; arc=none smtp.client-ip=209.85.167.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QFPsJOyl" Received: by mail-lf1-f44.google.com with SMTP id 2adb3069b0e04-59583505988so3289948e87.1 for ; Fri, 19 Dec 2025 13:30:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766179808; x=1766784608; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=ehPSmNwMGVcwoZTHlDIBfUpRRJiLXS+Rdg4CTzgEj6Q=; b=QFPsJOylYwAFt4vKJXmEzAImxZ9v/d4ppi03EmP2tKQ9/iDDaRmUrzHewj1g7/QBEH jyCNJkel0pTWfMI3uJgjuZim4BSFmHiUFlQiPRIuTeplAsVrfkQMChi6WBqlvv8lWxle aNe/e17SPitbYjwON7kJmTHyWlSU/0O4/EZCh4/ibxQQp8VlTalEK1YWg8vPjuWLLREv 9TuTXWKXkBrlPke5AuD0Gmqd3vCDms47oAQ9LqrBBFTO9yy15fIn6PZjW4ENGUk2l7dg UvQJJ9PYXMykHfJASATWpuWmtbZc3swC/R18J/mOgLeFSeUZu7rAFiF6jfDbvUlSBrXf 3ftg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766179808; x=1766784608; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ehPSmNwMGVcwoZTHlDIBfUpRRJiLXS+Rdg4CTzgEj6Q=; b=MeinmBYANQV2uD84RTwKOPdYzwdmSwbhaBtdmrf87VPyTnzlTat9Zk8iI/0jT2ulFL fs7u70GIakW37Ft56v2stpTCM2+wIelqQ6bvANIeTMjY71rDNjVXHPO5fidY3M9xZ8U5 ir43G1Q8PfBI3p1nlliWiJ/RjhRaGei0WhyRlIxvzrKuge3ttEKxeEwKNorLMO+kFc5/ oHk6oWwMST+1LPJTBfJ8f/dKVnjAplKyuYT6eKKnSuSKnlxpFkvSJqMHvy4TdvkJJ8kF lOfPChAAhvZg3lNppgubw+CNRUpRpDuV+Qplll50kp71wfLX6YF/bvzx5f6LNrLVu2RE cfQQ== X-Forwarded-Encrypted: i=1; AJvYcCWoPCEBd87FaEqdIrvvlXv5o+twzmhuUmWAOnyNDMwMYWsFfyxFixxsmKstUuybFrexoXmHMgp5subOSJU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1xY51XUoe9etza/+w3Dxk193D8FmDTcofiHODigVDo0+15VaY akMkybSuYY0S7AsAxtG7IL4Allm1q9LB80KXtQGIetWg9QMk9sanKgl8 X-Gm-Gg: AY/fxX6WueYUMkvBj5noiRitlG0k11GoAxXVgmIYEvyfpUj9BV6uNPH3vjf5Qiveh25 JFEWIBjHvKsXogoHMoG+xZjL1HRIuk2NIwn7/uMpoHTNogkKOlV9m3EXLFft2CjjAMiq2xgmpaI gZ+wrDd2xg8FBAz3hIueS9Nu5MWr8x8+epBfhjXEDB2xp7GNtDb+pcJKErda7/O2x+UtkMhc5ks cTbRAVJInSgKPHOYzuOhU86rxb0J0/87FMbZzqz8J5zsRPj3g2ImCkdHETzd+Ou1vdaax+Ic34+ O7PooHS9VCjWFpONH0/z1dr1vSkoybVDKJVb/UsKu22yFueUtzn1WdTO1SQy7UMRUfGCWcxftey 0EFY7jmj58NJXocfd272id3tcaZwOTXd/rPev3AWabXXMx7C6YqLpkOH7d/cuS0klMyzdGXBInH A808h1BLnaY+wtUKMPmR/oRdEsJa+nH/w26cOulSb5J2SmAspHwXmUcdwOi+OHXeAcN+HzI0EeO TkG/g== X-Google-Smtp-Source: AGHT+IEIvBwkddfsy2qs3/Dkt4Qs6IXl/7tpd4f9MZSJ671KBBAi5GQMyG2sb25sEfyCw5Mlhn1L+g== X-Received: by 2002:a05:6512:2352:b0:598:f6cf:edca with SMTP id 2adb3069b0e04-59a124e725cmr2485335e87.8.1766179807353; Fri, 19 Dec 2025 13:30:07 -0800 (PST) Received: from LT-5CG5341NQ4.nordic.imtech.com (37-33-132-227.bb.dnainternet.fi. [37.33.132.227]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3812251b2b0sm8264431fa.18.2025.12.19.13.30.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Dec 2025 13:30:06 -0800 (PST) From: Kari Argillander Date: Fri, 19 Dec 2025 23:29:36 +0200 Subject: [PATCH] rust: page: Simplify overflow check using checked_add() 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251219-rust-page-check-v1-1-df2e52fa3bd5@gmail.com> X-B4-Tracking: v=1; b=H4sIAL/DRWkC/x2MQQqAIBAAvyJ7TkhFyL4SHWTbcglMtCKQ/p50H IaZCoUyU4FRVMh0c+EjNlCdAAw+biR5aQy611Zp5WS+yimTbwID4S4H5RDROLTGQ6tSppWf/zj N7/sB4IAtzWEAAAA= X-Change-ID: 20251219-rust-page-check-819ccc39c53a To: Alice Ryhl , Lorenzo Stoakes , "Liam R. Howlett" , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich Cc: linux-mm@kvack.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Kari Argillander X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766179805; l=1981; i=kari.argillander@gmail.com; s=20251219; h=from:subject:message-id; bh=hEPhKwT/pgywPCq0dB8gQ/MONU1VQk+JP/YIdz6V9os=; b=hUci18pgOdk6yTb8UpLS8La4oZ7CgBWZEVi4bwZBPyMtxobfJC7ZYdcuiDOOURX8HfAW7o23m cDtYQgBI+d4ChqGw1QSAG7qw8CyNnRcLeNZ49DSZtkTAH3F3jDbuiZm X-Developer-Key: i=kari.argillander@gmail.com; a=ed25519; pk=RwSxyhTpE3z4sywdDbIkC3q33ZQLNyhYWxT44iTY6r4= Replace the explicit bounds comparisons with a single checked_add()-based range check. This avoids redundant comparisons, makes the overflow case explicit, and results in simpler generated code (checked with godbolt for x86). Option::is_none_or() would be nicer, but it requires Rust 1.82; the kernel currently targets 1.78. No functional change intended. Signed-off-by: Kari Argillander Reviewed-by: Alexandre Courbot Reviewed-by: Dirk Behme --- rust/kernel/page.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/rust/kernel/page.rs b/rust/kernel/page.rs index 432fc0297d4a..a07e6d256860 100644 --- a/rust/kernel/page.rs +++ b/rust/kernel/page.rs @@ -239,17 +239,15 @@ fn with_pointer_into_page( len: usize, f: impl FnOnce(*mut u8) -> Result, ) -> Result { - let bounds_ok =3D off <=3D PAGE_SIZE && len <=3D PAGE_SIZE && (off= + len) <=3D PAGE_SIZE; - - if bounds_ok { - self.with_page_mapped(move |page_addr| { - // SAFETY: The `off` integer is at most `PAGE_SIZE`, so th= is pointer offset will - // result in a pointer that is in bounds or one off the en= d of the page. - f(unsafe { page_addr.add(off) }) - }) - } else { - Err(EINVAL) + if off.checked_add(len).map_or(true, |end| end > PAGE_SIZE) { + return Err(EINVAL); } + + self.with_page_mapped(move |page_addr| { + // SAFETY: The `off` integer is at most `PAGE_SIZE`, so this p= ointer offset will + // result in a pointer that is in bounds or one off the end of= the page. + f(unsafe { page_addr.add(off) }) + }) } =20 /// Maps the page and reads from it into the given buffer. --- base-commit: cc3aa43b44bdb43dfbac0fcb51c56594a11338a8 change-id: 20251219-rust-page-check-819ccc39c53a Best regards, --=20 Kari Argillander