diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c index 2be5831a57..6c0c85f032 100644 --- a/tools/helpers/init-xenstore-domain.c +++ b/tools/helpers/init-xenstore-domain.c @@ -108,7 +108,7 @@ static int build(xc_interface *xch) if ( flask ) { - rv = xc_flask_context_to_sid(xch, flask, strlen(flask), &config.ssidref); + rv = xc_flask_context_to_sid(xch, flask, &config.ssidref); if ( rv ) { fprintf(stderr, "xc_flask_context_to_sid failed\n"); diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index f4316089e7..9f00d4a19d 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -2377,7 +2377,7 @@ long xc_sharing_used_frames(xc_interface *xch); /*** End sharing interface ***/ int xc_flask_load(xc_interface *xc_handle, char *buf, uint32_t size); -int xc_flask_context_to_sid(xc_interface *xc_handle, char *buf, uint32_t size, uint32_t *sid); +int xc_flask_context_to_sid(xc_interface *xc_handle, char *buf, uint32_t *sid); int xc_flask_sid_to_context(xc_interface *xc_handle, int sid, char *buf, uint32_t size); int xc_flask_getenforce(xc_interface *xc_handle); int xc_flask_setenforce(xc_interface *xc_handle, int mode); diff --git a/tools/libs/ctrl/xc_flask.c b/tools/libs/ctrl/xc_flask.c index f5389dbd96..f275093735 100644 --- a/tools/libs/ctrl/xc_flask.c +++ b/tools/libs/ctrl/xc_flask.c @@ -83,10 +83,11 @@ int xc_flask_load(xc_interface *xch, char *buf, uint32_t size) return err; } -int xc_flask_context_to_sid(xc_interface *xch, char *buf, uint32_t size, uint32_t *sid) +int xc_flask_context_to_sid(xc_interface *xch, char *buf, uint32_t *sid) { int err; struct xen_flask_op op = {}; + size_t size = strlen(buf) + 1; DECLARE_HYPERCALL_BOUNCE(buf, size, XC_HYPERCALL_BUFFER_BOUNCE_IN); if ( xc_hypercall_bounce_pre(xch, buf) ) @@ -249,7 +250,7 @@ static int xc_flask_add(xc_interface *xch, uint32_t ocon, uint64_t low, uint64_t int err; struct xen_flask_op op = {}; - err = xc_flask_context_to_sid(xch, scontext, strlen(scontext), &sid); + err = xc_flask_context_to_sid(xch, scontext, &sid); if ( err ) return err; @@ -325,10 +326,10 @@ int xc_flask_access(xc_interface *xch, const char *scon, const char *tcon, struct xen_flask_op op = {}; int err; - err = xc_flask_context_to_sid(xch, (char*)scon, strlen(scon), &op.u.access.ssid); + err = xc_flask_context_to_sid(xch, (char*)scon, &op.u.access.ssid); if ( err ) return err; - err = xc_flask_context_to_sid(xch, (char*)tcon, strlen(tcon), &op.u.access.tsid); + err = xc_flask_context_to_sid(xch, (char*)tcon, &op.u.access.tsid); if ( err ) return err; diff --git a/tools/libs/light/libxl_flask.c b/tools/libs/light/libxl_flask.c index 38347a31a3..8d9c92bfdc 100644 --- a/tools/libs/light/libxl_flask.c +++ b/tools/libs/light/libxl_flask.c @@ -21,7 +21,10 @@ int libxl_flask_context_to_sid(libxl_ctx *ctx, char *buf, size_t len, { int rc; - rc = xc_flask_context_to_sid(ctx->xch, buf, len, ssidref); + if (len != strlen(buf)) + return ERROR_INVAL; + + rc = xc_flask_context_to_sid(ctx->xch, buf, ssidref); return rc; } diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c index a94f01d40b..7a4bf54597 100644 --- a/tools/python/xen/lowlevel/xc/xc.c +++ b/tools/python/xen/lowlevel/xc/xc.c @@ -1754,7 +1754,7 @@ static PyObject *pyflask_context_to_sid(PyObject *self, PyObject *args, return PyErr_SetFromErrno(xc_error_obj); } - ret = xc_flask_context_to_sid(xc_handle, ctx, strlen(ctx), &sid); + ret = xc_flask_context_to_sid(xc_handle, ctx, &sid); xc_interface_close(xc_handle);