|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] tools/xenctx: Correct use of xc_domain_{, un}pause()
The previous code never worked correctly. There was a TOCTOU race between
checking dominfo and pausing the domain.
Since c/s 3eb1c708, Xen properly reference counts pause hypercalls, so
unconditionally pause and unpause the domain.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CC: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
---
tools/xentrace/xenctx.c | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
index 82bd789..4ed120a 100644
--- a/tools/xentrace/xenctx.c
+++ b/tools/xentrace/xenctx.c
@@ -91,7 +91,6 @@ static struct xenctx {
int do_stack;
#endif
int kernel_start_set;
- int self_paused;
xc_dominfo_t dominfo;
} xenctx;
@@ -1273,13 +1272,10 @@ int main(int argc, char **argv)
exit(-1);
}
- if (!xenctx.dominfo.paused) {
- ret = xc_domain_pause(xenctx.xc_handle, xenctx.domid);
- if (ret < 0) {
- perror("xc_domain_pause");
- exit(-1);
- }
- xenctx.self_paused = 1;
+ ret = xc_domain_pause(xenctx.xc_handle, xenctx.domid);
+ if (ret < 0) {
+ perror("xc_domain_pause");
+ exit(-1);
}
#ifndef NO_TRANSLATION
@@ -1303,12 +1299,10 @@ int main(int argc, char **argv)
if ( do_default )
dump_ctx(vcpu);
- if (xenctx.self_paused) {
- ret = xc_domain_unpause(xenctx.xc_handle, xenctx.domid);
- if (ret < 0) {
- perror("xc_domain_unpause");
- exit(-1);
- }
+ ret = xc_domain_unpause(xenctx.xc_handle, xenctx.domid);
+ if (ret < 0) {
+ perror("xc_domain_unpause");
+ exit(-1);
}
ret = xc_interface_close(xenctx.xc_handle);
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |