From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (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 E1E242D77F7 for ; Tue, 23 Dec 2025 12:29:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766492955; cv=none; b=YSrdu3lezqPAfM6b+FSYmdkz3uDH1iQILZCRZEWU3hEy6ogBhHdBIQ6qtpQ/9vIWhMeww8S552ttJNmYP1lK0g1txm9L92XPr1S5ZD9la9Y1q7qnJzJnsEDr7HkaI+qKkUaDavi69TwrcemVoM1ra6cE8R+elqEMDd3OHxJ5NqM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766492955; c=relaxed/simple; bh=cfEFhEd9HGDMtIVOOCTh5vYCtGBOevOzpDk+sKdX3Mc=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=EF2nhhcBqUP1GtrtlWmj8xesLRB+o1k65l/Ei9inujuU1qlAZlg5utg/JMzUbfMT4IOZYGpNgY1Az5r6s2O83LA5U/w5r1cnv7qLmGQT6C0CbRNCzZOaWuCNr2uBSPo23aJlrOROA5WySGLu53UADe6H8buOZSadx0X/GfOFLQI= 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=hevOGqO2; arc=none smtp.client-ip=209.85.208.49 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="hevOGqO2" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-64b5ed53d0aso6992467a12.3 for ; Tue, 23 Dec 2025 04:29:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766492952; x=1767097752; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=w5xTlcGpdeyQEFa92rXXck2wdXNlODn2lhJvH8AYtz8=; b=hevOGqO2yrzKzkXXVGzk7pVujvXpNomF5/M14+xBuonh+2N/nc/kIagS3uXZeP/a3b c+N14BIOWxQPe5hrm6SGA3d3+X1qmrVbCnXRJUEzqbDmSSkedYqLUq+h990xoKRyNKfA qxP7WUMFCLkl6SAL2x+GQB36r5yiNFj/gpJEMn+gFUxeCtxkUuGnWk1ApPhF+SZXFgBP g2MUV7i6RSUo6ZqP5JOgy0ceerCN6jeR5gayZ5cz5EJa4aobAtdozxtG52PbNnG5eYvF RGmFhHRFLX9QY3UrhXaPm6xSrsAdH/ECt0UHQrOL4cpE9819e0mpHnwo+4wYPGZ9pXLk pTlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766492952; x=1767097752; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=w5xTlcGpdeyQEFa92rXXck2wdXNlODn2lhJvH8AYtz8=; b=Unu1sET/DcZkLrC0l6oSBQooBb/+juaGq6EKu4pa7QvXc2CGiEiStWWCWku1vOg8dP jFlHJRrl7tkqc5zzs+NjfaeBYm/B6FqWAQZN/IsA9omW5o1Ku3QCI+axyFAFQH62Ddir FZBEHrFU2qcAQqOMzHA+KzGlBV/5+FZ1+csS/kf6pYnwj1SnO4E/pQj8Sc2uihUD+rc2 cPD6cDIfJvkCiM0bTlxz5ZQVCUDrSiIyYKfBlH0siV7VPq/PTAxDznnflY76/FXmvcR5 qR12N653er3IfeiZlMWVQQHDw/owlQd8AHXUZr4z13bTL18J2PiOS3wtQ/oFwYSYbdvT 9Q/A== X-Forwarded-Encrypted: i=1; AJvYcCX+5b33BS5+T+MoOlLDOR/AMOmnGTJAbe2U3+ujv6viFH/kvhk992hBuCE5b0fa9Nuc6fouijQKXuvU8pw=@vger.kernel.org X-Gm-Message-State: AOJu0YyHNziMyUkSg2EozPGcCZEEBQkJex49KuOpA4sgaBp8hpO5DJuG +9j0A5JTR7q91E6SpvAape2CUmAWokLlKVdA8BWNPpxXj3P7/L8yFlrR X-Gm-Gg: AY/fxX4Vr+2giAPHz6Pwq2BCM9LuLgJyv0w6hCbVt7EyMi4r1ywQKmd3Cy1bHUZhwbn MIilVMYm+zbeYBJdyNAaYkZCs469l3qkpIojvmhjRDeE3RcTrjB8Z3/JPfYOyihs9LpaSO11Ra6 hes1mhL/M6nViBw4LP1atiyFUqaXSpFwWjfBK2YxNFeOpK1wk3za/kb4wFvP4KhYdmieQ2omIDg RUQntvtUTlJ+AdGL0piLhK6WNQ5BnByYfHoHHdLxkZ8bO1S6pv9hEjWCvrTW5BcY2DrG0ORa92g pnWoM4qb59nIzpOUBBfOEvG2sSEjxVsDn/lhKpxRclxYuoWGMe7IcQEOIr6yth5BFFpEcNxk/e0 JWQL3cm2oB3bnCwnYP3jXm4m43rz5xxxVYweLq9i/fOHTg5kH3rzc0dRY8UJmm5z7f+g5gqUxjT NMbO4IAvNgyoa7URFEM85Uivm2Zzpi97Hx/wL7eK7ekoyAoDye+fx1nJsDL1OJsLc5EQR4g8NU2 UpMePmoig431NovW0vdbl/jAX2F8Q2ay2oxM0vNGFogIA== X-Google-Smtp-Source: AGHT+IFQKu463Ws0DeQGqtqtFbIzklz16SbCW/WpuT8pw8rwR8527OOqWdhaQqGG2VyTUZbhKeJ8Ag== X-Received: by 2002:a17:907:6d0f:b0:b72:d001:7653 with SMTP id a640c23a62f3a-b8036f0f183mr1343019266b.19.1766492951664; Tue, 23 Dec 2025 04:29:11 -0800 (PST) Received: from ?IPV6:2003:df:bf2d:e300:d174:1f34:13cc:be92? (p200300dfbf2de300d1741f3413ccbe92.dip0.t-ipconnect.de. [2003:df:bf2d:e300:d174:1f34:13cc:be92]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-64b90f5400bsm13550782a12.4.2025.12.23.04.29.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Dec 2025 04:29:11 -0800 (PST) Message-ID: <46e188a4-4b74-4206-ba18-f107f45bb98d@gmail.com> Date: Tue, 23 Dec 2025 13:29:10 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] rust: page: Simplify overflow check using checked_add() To: Gary Guo , Kari Argillander Cc: Alice Ryhl , Dirk Behme , Alexandre Courbot , Lorenzo Stoakes , "Liam R. Howlett" , Miguel Ojeda , Boqun Feng , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , linux-mm@kvack.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org References: <20251223-rust-page-check-v2-1-fba3dbdde1d8@gmail.com> <20251223115726.621bfa38.gary@garyguo.net> Content-Language: en-US From: Dirk Behme In-Reply-To: <20251223115726.621bfa38.gary@garyguo.net> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 23.12.25 12:57, Gary Guo wrote: > On Tue, 23 Dec 2025 12:06:17 +0200 > Kari Argillander wrote: > >> 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). >> >> No functional change intended. >> >> Reviewed-by: Dirk Behme >> Reviewed-by: Alexandre Courbot >> Signed-off-by: Kari Argillander >> --- >> Changes in v2: >> - Added MSVR todo (Dirk Behme) >> - Link to v1: https://lore.kernel.org/r/20251219-rust-page-check-v1-1-df2e52fa3bd5@gmail.com >> --- >> rust/kernel/page.rs | 19 +++++++++---------- >> 1 file changed, 9 insertions(+), 10 deletions(-) >> >> diff --git a/rust/kernel/page.rs b/rust/kernel/page.rs >> index 432fc0297d4a..cd2af7e4c357 100644 >> --- a/rust/kernel/page.rs >> +++ b/rust/kernel/page.rs >> @@ -239,17 +239,16 @@ fn with_pointer_into_page( >> len: usize, >> f: impl FnOnce(*mut u8) -> Result, >> ) -> Result { >> - let bounds_ok = off <= PAGE_SIZE && len <= PAGE_SIZE && (off + len) <= PAGE_SIZE; >> - >> - if bounds_ok { >> - self.with_page_mapped(move |page_addr| { >> - // SAFETY: The `off` integer is at most `PAGE_SIZE`, so this pointer offset will >> - // result in a pointer that is in bounds or one off the end of the page. >> - f(unsafe { page_addr.add(off) }) >> - }) >> - } else { >> - Err(EINVAL) >> + // TODO: Replace `map_or` with `is_none_or` once the MSRV is >= 1.82. > > I was about to suggest just enable the feature gate, but turns out it was > only added in 1.81. That's a fast one to stabilize! With Alexandre's `matches!` proposal I was thinking that we could drop the TODO comment and we won't need to touch this file again once MSRV is >= 1.82. Opinions? Cheers Dirk > Reviewed-by: Gary Guo > > Best, > Gary > >> + 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 pointer offset will >> + // result in a pointer that is in bounds or one off the end of the page. >> + f(unsafe { page_addr.add(off) }) >> + }) >> } >> >> /// Maps the page and reads from it into the given buffer. >> >> --- >> base-commit: cc3aa43b44bdb43dfbac0fcb51c56594a11338a8 >> change-id: 20251219-rust-page-check-819ccc39c53a >> >> Best regards, > >