[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 2/2] x86/dom0: only disable SMAP for the PV dom0 build
On 31.07.2024 15:25, Roger Pau Monné wrote: > On Wed, Jul 31, 2024 at 08:44:46AM +0200, Jan Beulich wrote: >> On 30.07.2024 17:28, Roger Pau Monne wrote: >>> The PVH dom0 builder doesn't switch page tables and has no need to run with >>> SMAP disabled. >>> >>> Use stac() and clac(), as that's safe to use even if events would hit in the >>> middle of the region with SMAP disabled. Nesting stac() and clac() calls is >>> not safe, so the stac() call is done strictly after elf_load_binary() >>> because >>> that uses raw_{copy_to,clear}_guest() accessors which toggle SMAP. >> >> And that was the main concern causing the CR4.SMAP override to be used >> instead, >> iirc. While I'm sure you've properly audited all code paths, how can we be >> sure >> there's not going to be another stac() or clac() added somewhere? Or setting >> of >> EFLAGS as a whole, clearing EFLAGS.AC without that being explicit? I think >> we'd >> be better off sticking to the fiddling with CR4. > > On approach I didn't test would be to add ASSERTs in stac/clac > functions to ensure that the state is as intended. IOW: for stac we > would assert that the AC flag is not set, while for clac we would do > the opposite and assert that it's set before clearing it. > > That should detect nesting. Yet it would also refuse non-paired uses which are in principle okay. Plus is requires respective code paths to be taken for such assertions to trigger. >>> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> >> >> Considering the bug Andrew pointed out on the code you remove from setup.c, >> don't we want a Fixes: tag as well? > > No, I think the current code is correct, it was my change that was > incorrect. Hmm, no I think there was an issue also before, from the cpu_has_smap use in the restore-CR4 conditional: We'd enable SMAP there even if on the command line there was "smap=hvm". While we clear FEATURE_SMAP when "smap=off", we keep the feature available when "smap=hvm". Thus we'd pointlessly write CR4 in the first if() and then enable SMAP in the second one, even though it wasn't enabled earlier on. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |