Messages in this thread |  | | From | Pasha Tatashin <> | | Date | Wed, 1 Apr 2026 21:30:20 -0400 | | Subject | Re: [PATCH v3 5/7] mm/memfd_luo: fix physical address conversion in put_folios cleanup |
| |
On Thu, Mar 26, 2026 at 4:48 AM Chenghao Duan <duanchenghao@kylinos.cn> wrote: > > In memfd_luo_retrieve_folios()'s put_folios cleanup path: > > 1. kho_restore_folio() expects a phys_addr_t (physical address) but > receives a raw PFN (pfolio->pfn). This causes kho_restore_page() to > check the wrong physical address (pfn << PAGE_SHIFT instead of the > actual physical address). > > 2. This loop lacks the !pfolio->pfn check that exists in the main > retrieval loop and memfd_luo_discard_folios(), which could > incorrectly process sparse file holes where pfn=0. > > Fix by converting PFN to physical address with PFN_PHYS() and adding > the !pfolio->pfn check, matching the pattern used elsewhere in this file. > > This issue was identified by the AI review. > https://sashiko.dev/#/patchset/20260323110747.193569-1-duanchenghao@kylinos.cn > > Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn> > --- > mm/memfd_luo.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/mm/memfd_luo.c b/mm/memfd_luo.c > index 76edf9a3f5b5..b4cea3670689 100644 > --- a/mm/memfd_luo.c > +++ b/mm/memfd_luo.c > @@ -469,8 +469,13 @@ static int memfd_luo_retrieve_folios(struct file *file, > */ > for (long j = i + 1; j < nr_folios; j++) { > const struct memfd_luo_folio_ser *pfolio = &folios_ser[j]; > + phys_addr_t phys; > + > + if (!pfolio->pfn) > + continue; > > - folio = kho_restore_folio(pfolio->pfn); > + phys = PFN_PHYS(pfolio->pfn); > + folio = kho_restore_folio(phys);
Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Thanks, Pasha
> if (folio) > folio_put(folio); > } > -- > 2.25.1 >
|  |