On Wed, Jun 12, 2024 at 03:16:37PM +0200, Jan Beulich wrote: > mfn_valid() granularity is (currently) 256Mb. Therefore the start of a > 1Gb page passing the test doesn't necessarily mean all parts of such a > range would also pass.
How would such a superpage end up in the EPT? I would assume this can only happen when adding a superpage MMIO that has part of it return success from mfn_valid()? > Yet using the result of mfn_to_page() on an MFN > which doesn't pass mfn_valid() checking is liable to result in a crash > (the invocation of mfn_to_page() alone is presumably "just" UB in such a > case). > > Fixes: ca24b2ffdbd9 ("x86/hvm: set 'ipat' in EPT for special pages") > Signed-off-by: Jan Beulich <jbeul...@suse.com> Reviewed-by: Roger Pau Monné <roger....@citrix.com> > --- > Of course we could leverage mfn_valid() granularity here to do an > increment by more than 1 if mfn_valid() returned false. Yet doing so > likely would want a suitable helper to be introduced first, rather than > open-coding such logic here. We would still need to call is_special_page() on each 4K chunk, at which point taking advantage of the mfn_valid() granularity is likely to make the code more complicated to follow IMO. Thanks, Roger.