mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
libxl: Rationalise calculation of user to run qemu as
If the config specifies a user we use that. Otherwise: When we are not restricting qemu, there is very little point running it as a different user than root. Indeed, previously, creating the "magic" users would cause qemu to become slightly dysfunctional (for example, you can't insert a cd that the qemu user can't read). So, in that case, default to running it as root. Conversely, if restriction is requested, we must insist on running qemu as a non-root user. Sadly the admin is still required to create 2^16-epsilon users! Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com> Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
1 parent
6dd27e6ce5
commit
bfc8f25556
2 files changed
+10
-5
No files matched your search
@@ -2250,8 +2250,6 @@ or
|
||||
B<xen-qemuuser-shared>
|
||||
(in which case different guests will not
|
||||
be protected against each other).
|
||||
And if you do not create the user,
|
||||
the restriction request will be silently ineffective!
|
||||
|
||||
=item
|
||||
|
||||
|
||||
+10
-3
@@ -1635,6 +1635,12 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
|
||||
goto end_search;
|
||||
}
|
||||
|
||||
if (!libxl_defbool_val(b_info->u.hvm.dm_restrict)) {
|
||||
LOGD(DEBUG, guest_domid,
|
||||
"dm_restrict disabled, starting QEMU as root");
|
||||
goto end_search;
|
||||
}
|
||||
|
||||
user = GCSPRINTF("%s%d", LIBXL_QEMU_USER_BASE, guest_domid);
|
||||
ret = libxl__dm_runas_helper(gc, user);
|
||||
if (ret < 0)
|
||||
@@ -1652,9 +1658,10 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
|
||||
goto end_search;
|
||||
}
|
||||
|
||||
user = NULL;
|
||||
LOGD(DEBUG, guest_domid, "Could not find user %s, starting QEMU as root",
|
||||
LIBXL_QEMU_USER_SHARED);
|
||||
LOGD(ERROR, guest_domid,
|
||||
"Could not find user %s%d or %s, cannot restrict",
|
||||
LIBXL_QEMU_USER_BASE, guest_domid, LIBXL_QEMU_USER_SHARED);
|
||||
return ERROR_INVAL;
|
||||
|
||||
end_search:
|
||||
if (user != NULL && strcmp(user, "root")) {
|
||||
|
||||