|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] libxc: avoid clobbering errno in xc_domain_pod_target()
On 09.12.2021 11:41, Juergen Gross wrote:
> On 09.12.21 11:36, Juergen Gross wrote:
>> On 09.12.21 11:26, Jan Beulich wrote:
>>> do_memory_op() supplies return value and has errno set the usual way.
>>> Don't overwrite errno with 1 (aka EPERM on at least Linux).
>>>
>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>> ---
>>> An alternative would be to let go of the DPRINTK() and leave errno and
>>> err alone altogether. While the hypervisor side of the hypercall gives
>>> the impression of being able to return positive values as of
>>> 637a283f17eb ("PoD: Allow pod_set_cache_target hypercall to be
>>> preempted"), due to the use of "rc >= 0" there, afaict that's not
>>> actually the case. IOW "err" can really only be 0 or -1 here.
>>>
>>> --- a/tools/libs/ctrl/xc_domain.c
>>> +++ b/tools/libs/ctrl/xc_domain.c
>>> @@ -1231,10 +1231,11 @@ static int xc_domain_pod_target(xc_inter
>>> if ( err < 0 )
>>> {
>>> + err = errno;
>>> DPRINTF("Failed %s_pod_target dom %d\n",
>>> (op==XENMEM_set_pod_target)?"set":"get",
>>> domid);
>>> - errno = -err;
>>> + errno = err;
>>
>> DPRINTF() won't change errno, so I think you should just drop the line
>> overwriting errno.
>
> In fact you added the 3rd layer of errno saving here. :-)
>
> DPRINTF() and friends will save errno, and the underlying
> xc_report*() functions will do so, too.
I guess I should have checked ... Question is then whether setting
"err" to 0 on the "else" path could/should then also be dropped (its
setting to -1 clearly can be, and I already have it that way for v2).
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |