|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/grants: fix hypercall continuation for GNTTABOP_cache_flush
commit 46d8f69d466a05863737fb81d8c9ef39c3be8b45
Author: Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Wed Apr 22 15:07:53 2020 +0200
Commit: Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Wed Apr 29 14:12:50 2020 +0100
xen/grants: fix hypercall continuation for GNTTABOP_cache_flush
The GNTTABOP_cache_flush hypercall has a wrong test for hypercall
continuation, the test today is:
if ( rc > 0 || opaque_out != 0 )
Unfortunately this will be true even in case of an error (rc < 0),
possibly leading to very long lasting hypercalls (times of more
than an hour have been observed in a test case).
Correct the test condition to result in false with rc < 0 and set
opaque_out only if no error occurred, to be on the safe side.
Partially-suggested-by: Jan Beulich <jbeulich@xxxxxxxx>
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
---
xen/common/grant_table.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index 96080b3dec..5ef7ff940d 100644
--- 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) )
{
/* Adjust rc, see gnttab_copy() for why this is needed. */
if ( cmd == GNTTABOP_copy )
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |