[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] tools/xenctx: Correct use of xc_domain_{, un}pause()
commit 6de560fadabb8a19887aa4320857088dba9a2b95 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Fri Jul 4 17:06:20 2014 +0100 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Thu Jul 10 11:20:07 2014 +0100 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> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/xentrace/xenctx.c | 22 ++++++++-------------- 1 files 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); -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |