diff --git a/docs/man/xl.1.pod.in b/docs/man/xl.1.pod.in index d4b5e8e362..0ec59a8b5c 100644 --- a/docs/man/xl.1.pod.in +++ b/docs/man/xl.1.pod.in @@ -1922,6 +1922,24 @@ shows the decimal value. For non-linear mode, it shows hexadecimal value. =back +=head1 ENVIRONMENT + +=over 4 + +=item B + +Set this environment variable to "1" to suggest to the guest that the disk +backend shouldn't be trusted. If the variable is absent or set to "0", the +backend will be trusted. + +=item B + +Set this environment variable to "1" to suggest to the guest that the network +backend shouldn't be trusted. If the variable is absent or set to "0", the +backend will be trusted. + +=back + =head1 IGNORED FOR COMPATIBILITY WITH XM xl is mostly command-line compatible with the old xm utility used with diff --git a/tools/libxl/libxl_disk.c b/tools/libxl/libxl_disk.c index 64a6691424..fe4cb52811 100644 --- a/tools/libxl/libxl_disk.c +++ b/tools/libxl/libxl_disk.c @@ -246,6 +246,7 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, libxl_domain_config d_config; libxl_device_disk disk_saved; libxl__domain_userdata_lock *lock = NULL; + const char *envvar; libxl_domain_config_init(&d_config); libxl_device_disk_init(&disk_saved); @@ -395,6 +396,10 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, flexarray_append(front, GCSPRINTF("%d", device->devid)); flexarray_append(front, "device-type"); flexarray_append(front, disk->is_cdrom ? "cdrom" : "disk"); + flexarray_append(front, "trusted"); + envvar = getenv("LIBXL_DISK_BACKEND_UNTRUSTED"); + /* Set "trusted=1" if envvar missing or is "0". */ + flexarray_append(front, !envvar || !strcmp("0", envvar) ? "1" : "0"); /* * Old PV kernel disk frontends before 2.6.26 rely on tool stack to diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c index 07880b39e1..b92281ab6a 100644 --- a/tools/libxl/libxl_nic.c +++ b/tools/libxl/libxl_nic.c @@ -129,6 +129,8 @@ static int libxl__set_xenstore_nic(libxl__gc *gc, uint32_t domid, flexarray_t *back, flexarray_t *front, flexarray_t *ro_front) { + const char *envvar; + flexarray_grow(back, 2); if (nic->script) @@ -237,6 +239,11 @@ static int libxl__set_xenstore_nic(libxl__gc *gc, uint32_t domid, flexarray_append(front, GCSPRINTF( LIBXL_MAC_FMT, LIBXL_MAC_BYTES(nic->mac))); + flexarray_append(front, "trusted"); + envvar = getenv("LIBXL_NIC_BACKEND_UNTRUSTED"); + /* Set "trusted=1" if envvar missing or is "0". */ + flexarray_append(front, !envvar || !strcmp("0", envvar) ? "1" : "0"); + return 0; }