[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 |