[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4] gnttab: don't expose host physical address without need
On 16.12.2019 15:19, Julien Grall wrote: > On 05/12/2019 15:34, Jan Beulich wrote: >> Translated domains shouldn't see host physical addresses. While the >> address is also not supposed to be handed back even to non-translated >> domains when GNTMAP_device_map is not set (as explicitly stated by a >> comment in the public header), PV kernels (Linux at least) assume the >> field to get populated nevertheless. (Similarly mapkind() should check >> only GNTMAP_device_map.) >> >> Along these lines split the paging mode related check near the top of >> map_grant_ref() to handle the "external" and "translated" cases >> separately (GNTMAP_device_map use getting tied to being non-translated >> rather than non-external). >> >> Still along these lines in the unmapping case there's no point checking >> ->dev_bus_addr when GNTMAP_device_map isn't set (and hence the field >> isn't going to be consumed). >> >> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> >> --- >> v4: Re-base over dropped patches. >> v3: New. >> >> --- a/xen/common/grant_table.c >> +++ b/xen/common/grant_table.c >> @@ -967,10 +967,16 @@ map_grant_ref( >> } >> >> if ( unlikely(paging_mode_external(ld) && >> - (op->flags & (GNTMAP_device_map|GNTMAP_application_map| >> - GNTMAP_contains_pte))) ) >> + (op->flags & >> (GNTMAP_application_map|GNTMAP_contains_pte))) ) >> { >> - gdprintk(XENLOG_INFO, "No device mapping in HVM domain\n"); >> + gdprintk(XENLOG_INFO, "No app/pte mapping in HVM domain\n"); >> + op->status = GNTST_general_error; >> + return; >> + } >> + >> + if ( paging_mode_translate(ld) && unlikely(op->flags & >> GNTMAP_device_map) ) > > There is at least one instance in Linux where GNTMAP_device_map may be > given regardless the type of the guest. See dmabuf_exp_from_refs() in > drivers/xen/gntdev-dmabuf.c. > > How are you going to deal with them? I didn't spot that case, nor ... >> @@ -1213,7 +1219,8 @@ map_grant_ref( >> if ( need_iommu ) >> double_gt_unlock(lgt, rgt); >> >> - op->dev_bus_addr = mfn_to_maddr(mfn); >> + op->dev_bus_addr = paging_mode_translate(ld) ? op->host_addr >> + : mfn_to_maddr(mfn); > > The "host_addr" is pretty confusing. I first thought it would be a "Host > Physical Address" but it seems to be a "Guest Physical address" > > If so, this is going to break Linux Dom0 on Arm where it is expected to > return the machine physical address to have a DMA fully working. ... this. > I don't abide with the current behavior on Arm, but I don't think we > should break them when there are no replacement for it. I agree; I didn't mean to break anything here. The state of things then means that I need to withdraw this patch, ... > So it would be better if we look at a different approach (i.e a new flag > or strict mode) in order to avoid breakage. ... without any replacement (at least for the time being). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |