[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 2/5] xen: make evtchn_alloc_unbound public
On 3/22/22 20:22, Stefano Stabellini wrote: > On Tue, 15 Mar 2022, Daniel P. Smith wrote: >> On 1/28/22 16:33, Stefano Stabellini wrote: >>> From: Luca Miccio <lucmiccio@xxxxxxxxx> >>> >>> The xenstore event channel will be allocated for dom0less domains. It is >>> necessary to have access to the evtchn_alloc_unbound function to do >>> that, so make evtchn_alloc_unbound public. >>> >>> Add a skip_xsm parameter to allow disabling the XSM check in >>> evtchn_alloc_unbound (xsm_evtchn_unbound wouldn't work for a call >>> originated from Xen before running any domains.) >>> >>> Signed-off-by: Luca Miccio <lucmiccio@xxxxxxxxx> >>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx> >>> CC: Julien Grall <julien@xxxxxxx> >>> CC: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx> >>> CC: Bertrand Marquis <bertrand.marquis@xxxxxxx> >>> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> >>> CC: George Dunlap <george.dunlap@xxxxxxxxxx> >>> CC: Jan Beulich <jbeulich@xxxxxxxx> >>> CC: Wei Liu <wl@xxxxxxx> >>> --- >>> Changes v3: >>> - expose evtchn_alloc_unbound, assing a skip_xsm parameter >>> --- >>> xen/common/event_channel.c | 13 ++++++++----- >>> xen/include/xen/event.h | 3 +++ >>> 2 files changed, 11 insertions(+), 5 deletions(-) >>> >>> diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c >>> index da88ad141a..be57d00a15 100644 >>> --- a/xen/common/event_channel.c >>> +++ b/xen/common/event_channel.c >>> @@ -284,7 +284,7 @@ void evtchn_free(struct domain *d, struct evtchn *chn) >>> xsm_evtchn_close_post(chn); >>> } >>> >>> -static int evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc) >>> +int evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc, bool skip_xsm) >>> { >>> struct evtchn *chn; >>> struct domain *d; >>> @@ -301,9 +301,12 @@ static int evtchn_alloc_unbound(evtchn_alloc_unbound_t >>> *alloc) >>> ERROR_EXIT_DOM(port, d); >>> chn = evtchn_from_port(d, port); >>> >>> - rc = xsm_evtchn_unbound(XSM_TARGET, d, chn, alloc->remote_dom); >>> - if ( rc ) >>> - goto out; >>> + if ( !skip_xsm ) >>> + { >>> + rc = xsm_evtchn_unbound(XSM_TARGET, d, chn, alloc->remote_dom); >>> + if ( rc ) >>> + goto out; >>> + } >> >> Please do not subvert the security framework because it causes an >> inconvenience. As Jan recommended, work within the XSM check to allow >> your access so that we may ensure it is done safely. If you need any >> help making modifications to XSM, please do not hesitate to reach out as >> I will gladly help. > > Thank you! > > First let me reply to Jan: this series is only introducing 1 more call > to evtchn_alloc_unbound, which is to allocate the special xenstore event > channel, the one configured via > d->arch.hvm.params[HVM_PARAM_STORE_EVTCHN]. > > It is not meant to be a generic function, and it is not meant to be > called more than once. It could (should?) be __init. > > The existing XSM check in evtchn_alloc_unbound cannot work and should > not work: it is based on the current domain having enough privileges to > create the event channel. In this case, we have no current domain at > all. The current domain is Xen itself. I have already replicated this in hyperlaunch for PV construction where I have constructed the event channel for both xenstore and the console. For hyperlaunch the construction is under a single, fairly-tight function where I have promoted the Idle Domain to is_privileged before the creation/construction loop starts and then demote the Idle Domain on the other side of the loop. Honestly this is not my preferred approach but for the initial implementation I do have a moderate amount of confidence regarding the risk that results. My current thinking is that the more appropriate approach would be to introduce a new system domain, Construct Domain??, to provide a separate context under which all the hyperlaunch creation and construction logic would be done and then destroyed as part of init finalization. > For these reasons, given [1], also not to subvert the security > framework as Daniel pointed out, I think I should go back to my own > implementation [2][3] based on get_free_port. That is my preference > because: > > - the Xen codebase doesn't gain much by reusing evtchn_alloc_unbound > - adding skip_xsm introduces a component of risk (unless we make it > __init maybe?) > - using get_free_port is trivial and doesn't pose the same issues > > > Let's find all an agreement on how to move forward on this. > > > [1] https://marc.info/?l=xen-devel&m=164194128922838 > [2] https://marc.info/?l=xen-devel&m=164203543615114 > [3] https://marc.info/?l=xen-devel&m=164203544615129
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |