From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6766F14A62B for ; Fri, 19 Jun 2026 20:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781901869; cv=none; b=q5PiYL6kKcsa00aSYQlvQjwvP0Dz+DDpioW90zpCZHLWTPR+5B8Bazu2RE3fza6gwoyq1iHE40GHraTXIW3qQLad+0QqWUWtqUM6VYRI/aP+o54kEyOFytHqRu25m227r8KzYOGWKvOOll4J8DTvJlPaQKaDx2QWBCBOsujI4pk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781901869; c=relaxed/simple; bh=yMaLNoWSea7MYozvQki1IiohHPY1e6ZW7Z0ZmBruXTk=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=Ljyn/1yn5eXLHjSmwcOgb33cwgEUE9Ets0IlBbda5a+zN8L1rViODXJDmSGTPzbLQNEXp6ld75QZS9MF5RfyPflEnQ1reQrC8azrGq0spha6syjevofOnNzdmQuklT5XI4oVoJ/C+bmjMOw6YjV6HfvcvVFAviSgTZLYc06Rsh8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=aPEAIOaD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GrfZFHVl; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="aPEAIOaD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GrfZFHVl" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 65JIvdIg925357 for ; Fri, 19 Jun 2026 20:44:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Z1XEjmfHIHBIydnGFB3ZVQBYU0/qcr0YwGi76rS8gMA=; b=aPEAIOaDupADdyB7 U4hJorJptV4zgsdshtkV/gtxxfRaNwZ+vRFkVLS7Gf35Cu0do0qGo9N7EeNXhGwW n7Lq8IfplsAb36Z/8Vn5WgvvOixXKBtL3/87rW2aKAzeqezWmj6I8TKqDsSPlaRZ 8v3RI7c9Hade+DX5hiWQcnOpLc+AaZ/e5Tllke3J9Vz+glh/e0c5Le4nJxGK9Jri gi8QIKyXxKjzcaDVAuocK+DitFTIbo/NQzOUQ3GYs4zn1a1Gzo4rQ1egNwRhWft7 YXpRYWQS5cZPE4ABF/wlIzyMqCWrvmW9dKjddFwW1GHjiHIe1uv1wwcg5ryxA9FM leYiDg== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ewbgp89ww-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Jun 2026 20:44:27 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2c6a9bbcc53so25480025ad.2 for ; Fri, 19 Jun 2026 13:44:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1781901867; x=1782506667; 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=Z1XEjmfHIHBIydnGFB3ZVQBYU0/qcr0YwGi76rS8gMA=; b=GrfZFHVlqdCiYpwcSvhTh6AUFAtzqR48u877UmgCvquMT5S8sJvQSI8s8FDzRn7vV0 GTMNIq2aq3zO4fcTJGyCqAa6sgHpwCKWo0ytQtC5vKNnpms6LNFfl0kO2r6GRlAAy2AC UFqB1PTlCkU0OtnhXsvOPWOWxx2VbmYIyenaLUqMYJ3gGW7R2c8DXbY0RKdQSeBzqpYh w5ZVqkbwPRfDJ4/ooUBU3l13N2raRNt2hsWLSiMegLKDhaVoSgyjILoQXJ0KngCJSBbL IVx36sIDCkVk3kScMWEnextjZoifDTlrKEFOPidPCnikqr0GIludDS4fql9Ip1Q+nmxG C49w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781901867; x=1782506667; 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=Z1XEjmfHIHBIydnGFB3ZVQBYU0/qcr0YwGi76rS8gMA=; b=kQJxc4OQKAAahNua45dwLEOxKqohyqjJ2AXhKQWBZ8I0rDuRzbavdN+zV+C5R3FXEZ JW/eLo9qZ7jocE6SegEvVuUWOgOI777nscqt59CNFWTIV/EzpPxmEIax5it0ugMK/rlp QA+FP2zNr3s6vt7nZPutPQRuPeo+wCTnkNvEhcDEj3hHMH05wCkpxbR6GbK0s0tqif9F LTZJ836IDLF7UxIHOtyjXdur85qVch5KvpJnmVl12F3uQurOl613Vv8mBuGnjJSU5jOO ok1FQv4q4cc0E/M02sQL+74eALevUn1Y5irrsjszsfh6XmUtoOTWP0NrydZd8nsbiwxH XA8Q== X-Forwarded-Encrypted: i=1; AFNElJ8tsEKhokxTC2SW9YiyW4B6P2yPS1nj3uIC0QhgaT8lT94S6duc7upT5tPv7ketdG8VG7HbT3eh8b4e0ZA=@vger.kernel.org X-Gm-Message-State: AOJu0YwtXFL8A1Bv18B2oz3+jfDDvhuWnwAhWeZvmW6EytFryIMiXL82 056g+G9hrfl9hE8a5JHJWDOvOkHYfny1X9EX+rS8Kuyo/BvTHNyr151YGznqBruKEj32B2N7YLM tsT7oZTP89ztCgqwV6EVMvex382oHuF01Vy6IokM40oMmDmPS3DjIw0A9wbcTxMCOydo= X-Gm-Gg: AfdE7clQnxKO6bgJ8HETN2ndwRmLzg1JSX49iBHII9oZq/cfxu3/6Ao3c7ZjaDq7faX B+DHSIhvy6dV3w9I/WKLm3fY4ImSzMCPWJsB1W3ZEijRb+JHIX0lPelRd15TbFloF9MI0gMI3y7 wnVjHYZfo7GJjtJdIhWm+xYxPMg95Md8cBlvUyzW+9lgLuqbPgCLzBJYt2Z2uZOu1k6zihcTTuK GT8s6DzO1wID8DyB+6uWhG8S/C/F6oBcVSq14nwFEUYIp1PGAHX76rpOoiHZ7Nl4gQBYmHDS2nD CCarSNLzSQjX4z5D9FeTC2vHA4DYkXzyYvYF5l6UxcaGtJn4MWcFsb6/CiEp0Q+oW+zOsx5JHls LJo2tcx3rSIQrKJ6aQQP7QkaXQpN/tu4fgcYgPNeccg== X-Received: by 2002:a17:902:db0e:b0:2c6:8e82:977c with SMTP id d9443c01a7336-2c718cbdd0bmr53694785ad.15.1781901866913; Fri, 19 Jun 2026 13:44:26 -0700 (PDT) X-Received: by 2002:a17:902:db0e:b0:2c6:8e82:977c with SMTP id d9443c01a7336-2c718cbdd0bmr53694605ad.15.1781901866455; Fri, 19 Jun 2026 13:44:26 -0700 (PDT) Received: from [192.168.0.8] ([49.205.250.131]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c7436afd00sm3131675ad.15.2026.06.19.13.44.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 19 Jun 2026 13:44:26 -0700 (PDT) Message-ID: <2c77c4f6-cae1-4bd4-aa7b-82da96334d6f@oss.qualcomm.com> Date: Sat, 20 Jun 2026 02:14:06 +0530 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] mm: page_ext: validate section in for_each_page_ext iterator To: Matthew Wilcox , "David Hildenbrand (Arm)" Cc: Luiz Capitulino , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , kernel@oss.qualcomm.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20260617-page_ext-v1-1-37ad802b1a38@oss.qualcomm.com> <1dbebf73-6c46-44e1-ac6a-f5ffa9849b37@kernel.org> <698e5cdc-8f1d-4984-bb54-a4b7979b4dc8@redhat.com> <3149fcee-eded-49b0-baf4-ab69c27ff063@kernel.org> Content-Language: en-US From: Ketan Kishore In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: nqmUsjjd1HFCIZ0MGBcRasrMGme5asXy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjE5MDE5OSBTYWx0ZWRfX1sIL/lYrMw50 lGzNclNKBO30n5td3JFVxD6zM2CnV+v/txFcFzxaPpqqXHlfiQc8XTYByYIxdhMnwWoyvZnlOq2 ezDL1XAw9yhxJJsE+4Zzc6fw6uZg2ljlojpK2jqoODcVu9mD+bL0riA5x/vmVt3JH6d9NIRAfiv FEdrW38933f6zGzQqC/TZLrMdAwTqgokNvs44FOWyHGk+6B5LvTogMN3e9wgzPbtka6Dk94scoC Loz3CNr/fMu6D0r3SO0zuSeekr3Sw/3nd1yEyo6tWx4xDEnnIN0fm1pEMcDOY5qeSS1mxGTqmNw 0c9VcWqa1DWIRDtHGibBWpI4M4kMJ3sBlN9xyLVyidLtiT03ltKbxmbeAYypgvS/9+CY28GCDyd TX2dxzBkWOSHmWhp1wRezZgcQkwykNYbrAUFHXMT8dbs/0znKvRvJgsg22zYpcGk0KGn+R33MEa uIN7VHrBk3o9b+kA1eg== X-Proofpoint-GUID: nqmUsjjd1HFCIZ0MGBcRasrMGme5asXy X-Proofpoint-Spam-Info: AW1haW4tMjYwNjE5MDE5OSBTYWx0ZWRfX/X25Rbli8gOv oWrd2e5BX1T4nBfsgoK0anw+aKhaw8pA03wVkvBBe7xfYy6e8l5iCmTUwNvPyJDjBibdwvEkhqE WVQzCxNx3KuOKzhobQPAoEJ4nm5jvBY= X-Authority-Analysis: v=2.4 cv=d8vFDxjE c=1 sm=1 tr=0 ts=6a35aa2b cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=BL6/p84Y3ifFzq3ZkNxHwA==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=POoiuOz0Jj2GNAffc_kA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-19_04,2026-06-18_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 priorityscore=1501 malwarescore=0 spamscore=0 phishscore=0 impostorscore=0 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2606190199 On 6/19/2026 7:08 PM, Matthew Wilcox wrote: > On Fri, Jun 19, 2026 at 10:00:59AM +0200, David Hildenbrand (Arm) wrote: >> Likely we should just handle that in the iterator, looking up page-ext for something >> that doesn't exist is weird. > > Yes, but I prefer to pass 'max' to the _next step explicitly, rather > than put it in the iterator struct. Untested patch attached. > > The other way to do it is s/index/remaining/ and count it down rather > than upwards. But that assumes none of the iterator users look at > iter->index, and I don't have the patience to check that. > > I find it weird that somebody botheresd to add kernel-doc for > page_ext_iter_begin/next. They're internal implementation and really > shouldn't have public documentation. > > diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h > index 61e876e255e8..4f7d7a8709de 100644 > --- a/include/linux/page_ext.h > +++ b/include/linux/page_ext.h > @@ -120,14 +120,18 @@ struct page_ext_iter { > * page_ext_iter_begin() - Prepare for iterating through page extensions. > * @iter: page extension iterator. > * @pfn: PFN of the page we're interested in. > + * @count: maximum number of page extensions to return. > * > * Must be called with RCU read lock taken. > * > * Return: NULL if no page_ext exists for this page. > */ > static inline struct page_ext *page_ext_iter_begin(struct page_ext_iter *iter, > - unsigned long pfn) > + unsigned long pfn, unsigned long count) > { > + if (count == 0) > + return NULL; > + > iter->index = 0; > iter->start_pfn = pfn; > iter->page_ext = page_ext_lookup(pfn); > @@ -138,19 +142,22 @@ static inline struct page_ext *page_ext_iter_begin(struct page_ext_iter *iter, > /** > * page_ext_iter_next() - Get next page extension > * @iter: page extension iterator. > + * @count: maximum number of page extensions to return. > * > * Must be called with RCU read lock taken. > * > * Return: NULL if no next page_ext exists. > */ > -static inline struct page_ext *page_ext_iter_next(struct page_ext_iter *iter) > +static inline struct page_ext *page_ext_iter_next(struct page_ext_iter *iter, > + unsigned long count) > { > unsigned long pfn; > > if (WARN_ON_ONCE(!iter->page_ext)) > return NULL; > > - iter->index++; > + if (iter->index++ >= count) > + return NULL; > pfn = iter->start_pfn + iter->index; > > if (page_ext_iter_next_fast_possible(pfn)) > @@ -183,9 +190,9 @@ static inline struct page_ext *page_ext_iter_get(const struct page_ext_iter *ite > * IMPORTANT: must be called with RCU read lock taken. > */ > #define for_each_page_ext(__page, __pgcount, __page_ext, __iter) \ > - for (__page_ext = page_ext_iter_begin(&__iter, page_to_pfn(__page));\ > - __page_ext && __iter.index < __pgcount; \ > - __page_ext = page_ext_iter_next(&__iter)) > + for (__page_ext = page_ext_iter_begin(&__iter, page_to_pfn(__page), __pgcount); \ > + __page_ext; \ > + __page_ext = page_ext_iter_next(&__iter, __pgcount)) > > #else /* !CONFIG_PAGE_EXTENSION */ > struct page_ext; Thanks Matthew for the suggestions and the proposed alternate fix. I have tested both your and David's patch, the reported issue is not observed anymore with both the suggested patches. Since, in the reply from David on your suggested fix he agrees with the changes as they are fixing the issue in a similar way. I'll go ahead and post the v2 with your suggestions. Thanks & Regards, Ketan