[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/grants: fix hypercall continuation for GNTTABOP_cache_flush
On 22.04.2020 18:31, Stefano Stabellini wrote: > On Wed, 22 Apr 2020, Jan Beulich wrote: >> On 22.04.2020 15:07, Juergen Gross wrote: >>> --- a/xen/common/grant_table.c >>> +++ b/xen/common/grant_table.c >>> @@ -3626,12 +3626,12 @@ do_grant_table_op( >>> if ( unlikely(!guest_handle_okay(cflush, count)) ) >>> goto out; >>> rc = gnttab_cache_flush(cflush, &opaque_in, count); >>> - if ( rc > 0 ) >>> + if ( rc >= 0 ) >>> { >>> guest_handle_add_offset(cflush, rc); >>> uop = guest_handle_cast(cflush, void); >>> + opaque_out = opaque_in; >>> } >>> - opaque_out = opaque_in; >>> break; >>> } >>> >>> @@ -3641,7 +3641,7 @@ do_grant_table_op( >>> } >>> >>> out: >>> - if ( rc > 0 || opaque_out != 0 ) >>> + if ( rc > 0 || (opaque_out != 0 && rc == 0) ) >> >> I disagree with this part - opaque_out shouldn't end up non-zero >> when rc < 0, and it won't anymore with the change in the earlier >> hunk. > > But opaque_out could end up being non-zero when rc == 0. Which is the case the original code meant to deal with. (I still think it is unfortunate behavior of the cache-flush implementation to assign meaning other than "success, done" to rc == 0.) > I think it is a > good improvement that we explicitly prevent rc < 0 from entering this > if condition. This is why this new version of the patch is my favorite: > it is the one that leads to the code most robust. > > Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> Well, looks like I'm outvoted then. Nevertheless thanks ... > That said, as I mentioned before, I would be OK even without the last > part because it would still be enough to fix the bug. .. for also clarifying this. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |