Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
xen.10697
xsa175-0010-libxl-Do-not-trust-frontend-for-nic...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xsa175-0010-libxl-Do-not-trust-frontend-for-nic-in-getinfo.patch of Package xen.10697
References: bsc#979620 CVE-2016-4962 XSA-175 From 4bb4bb97faacc6135fb0640be9da10c9f2dc5592 Mon Sep 17 00:00:00 2001 From: Ian Jackson <ian.jackson@eu.citrix.com> Date: Tue, 3 May 2016 16:31:07 +0100 Subject: [PATCH 10/12] libxl: Do not trust frontend for nic in getinfo libxl_device_nic_getinfo needs to examine devices without trusting frontend-controlled data. So: * Use /libxl to find the backend path. * Parse the backend path to find the backend domid, rather than reading it from the frontend. This is part of XSA-175. Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com> --- tools/libxl/libxl.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) Index: xen-4.4.4-testing/tools/libxl/libxl.c =================================================================== --- xen-4.4.4-testing.orig/tools/libxl/libxl.c +++ xen-4.4.4-testing/tools/libxl/libxl.c @@ -3166,22 +3166,27 @@ int libxl_device_nic_getinfo(libxl_ctx * libxl_device_nic *nic, libxl_nicinfo *nicinfo) { GC_INIT(ctx); - char *dompath, *nicpath; + char *dompath, *nicpath, *libxl_path; char *val; + int rc; dompath = libxl__xs_get_dompath(gc, domid); nicinfo->devid = nic->devid; - nicpath = libxl__sprintf(gc, "%s/device/vif/%d", dompath, nicinfo->devid); + nicpath = GCSPRINTF("%s/device/vif/%d", dompath, nicinfo->devid); + libxl_path = GCSPRINTF("%s/device/vif/%d", + libxl__xs_libxl_path(gc, domid), nicinfo->devid); nicinfo->backend = xs_read(ctx->xsh, XBT_NULL, - libxl__sprintf(gc, "%s/backend", nicpath), NULL); + GCSPRINTF("%s/backend", libxl_path), NULL); if (!nicinfo->backend) { GC_FREE; return ERROR_FAIL; } - val = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/backend-id", nicpath)); - nicinfo->backend_id = val ? strtoul(val, NULL, 10) : -1; - val = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/state", nicpath)); + rc = libxl__backendpath_parse_domid(gc, nicinfo->backend, + &nicinfo->backend_id); + if (rc) goto out; + + val = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/state", nicpath)); nicinfo->state = val ? strtoul(val, NULL, 10) : -1; val = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/event-channel", nicpath)); nicinfo->evtch = val ? strtoul(val, NULL, 10) : -1; @@ -3194,8 +3199,10 @@ int libxl_device_nic_getinfo(libxl_ctx * val = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/frontend-id", nicinfo->backend)); nicinfo->frontend_id = val ? strtoul(val, NULL, 10) : -1; + rc = 0; + out: GC_FREE; - return 0; + return rc; } const char *libxl__device_nic_devname(libxl__gc *gc,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor