[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Xen: ARM: Zero reserved fields of xatp before making hypervisor call
On 20/12/16 06:02, Jiandi An wrote: > On 12/19/16 12:49, Stefano Stabellini wrote: >> On Mon, 19 Dec 2016, Juergen Gross wrote: >>> On 19/12/16 03:56, Jiandi An wrote: >>>> Ensure all reserved fields of xatp are zero before making hypervisor >>>> call to XEN in xen_map_device_mmio(). xenmem_add_to_physmap_one() in >>>> XEN fails the mapping request if extra.res reserved field in xatp is >>>> not zero for XENMAPSPACE_dev_mmio request. >>>> >>>> Signed-off-by: Jiandi An <anjiandi@xxxxxxxxxxxxxx> >>>> --- >>>> drivers/xen/arm-device.c | 3 +++ >>>> 1 file changed, 3 insertions(+) >>>> >>>> diff --git a/drivers/xen/arm-device.c b/drivers/xen/arm-device.c >>>> index 778acf8..208273b 100644 >>>> --- a/drivers/xen/arm-device.c >>>> +++ b/drivers/xen/arm-device.c >>>> @@ -87,6 +87,9 @@ static int xen_map_device_mmio(const struct resource >>>> *resources, >>>> idxs[j] = XEN_PFN_DOWN(r->start) + j; >>>> } >>>> >>>> + /* Ensure reserved fields are set to zero */ >>>> + memset(&xatp, 0, sizeof(xatp)); >>>> + >>>> xatp.domid = DOMID_SELF; >>>> xatp.size = nr; >>>> xatp.space = XENMAPSPACE_dev_mmio; >>> >>> Instead of setting xatp to 0 in each iteration I'd prefer a static >>> initialization of .domid and .space: >>> >>> struct xen_add_to_physmap_range xatp = { >>> .domid = DOMID_SELF, >>> .space = XENMAPSPACE_dev_mmio >>> }; >> >> +1 >> > > Hi Juergen, > > Thanks for you comments. xatp is passed to XEN via the hypervisor call in > each loop. > XEN touches xatp and returns it back. For example XEN returns error of > underlying mapping call in the err[] array in xatp. (The err[] is not checked > after the hypervisor call returns and it's a bug to be addressed in a > separate patch) XEN could theoretically corrupt xatp when it's returned. > And the loop would go on to the next iteration passing in whatever that's in > xatp returned by the previous hypervisor call. Harder to debug in my opinion > if xatp get corrupted by XEN somehow when a bug is introduced in XEN. At > first I put the memset of xatp at the beginning outside of the loop. But I > thought it's better to initialize xatp that's passed in each time a > hypervisor call is made so we know exactly we set going into the hypervisor > call. > It is very clearly specified which parameters are IN and which are OUT. No trusting the hypervisor to follow this interface specification is weird. Where do you want to stop? Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |