Re: [PATCH 2/2] asm-generic: add an optional pfn_valid check to pfn_valid
Thomas Huth <[email protected]>
| Newsgroups | gmane.linux.ports.sparc,gmane.linux.ports.alpha,gmane.linux.kernel,gmane.linux.kernel.arc,gmane.linux.ports.arm.kernel,gmane.linux.ports.hexagon,gmane.linux.ports.mips,gmane.linux.ports.parisc,gmane.linux.ports.ppc64.devel,gmane.linux.ports.riscv,gmane.linux.ports.sh.devel,gmane.linux.uml.devel,gmane.linux.kernel.cross-arch |
|---|---|
| Message-ID | <[email protected]> |
On 14/10/2024 16.44, Christoph Hellwig wrote: > page_to_pfn is usually implemented by pointer arithmetics on the memory > map, which means that bogus input can lead to even more bogus output. > > Powerpc had a pfn_valid check on the regult to it's page_to_phys s/regult/result/ > implementation when CONFIG_DEBUG_VIRTUAL is defined, which seems > generally useful, so add that to the generic version. > > Signed-off-by: Christoph Hellwig <[email protected]> > --- > include/asm-generic/memory_model.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h > index a73a140cbecdd7..6d1fb6162ac1a6 100644 > --- a/include/asm-generic/memory_model.h > +++ b/include/asm-generic/memory_model.h > @@ -64,7 +64,17 @@ static inline int pfn_valid(unsigned long pfn) > #define page_to_pfn __page_to_pfn > #define pfn_to_page __pfn_to_page > > +#ifdef CONFIG_DEBUG_VIRTUAL > +#define page_to_phys(page) \ > +({ \ > + unsigned long __pfn = page_to_pfn(page); \ > + \ > + WARN_ON_ONCE(!pfn_valid(__pfn)); \ > + PFN_PHYS(__pfn); \ > +}) > +#else > #define page_to_phys(page) PFN_PHYS(page_to_pfn(page)) > +#endif /* CONFIG_DEBUG_VIRTUAL */ > #define phys_to_page(phys) pfn_to_page(PHYS_PFN(phys)) > > #endif /* __ASSEMBLY__ */ With the typo fixed: Reviewed-by: Thomas Huth <[email protected]>