|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 9/9] libxl: Kill QEMU with "reaper" ruid
George Dunlap writes ("[PATCH 9/9] libxl: Kill QEMU with "reaper" ruid"):
> Using kill(-1) to killing an untrusted dm process with the real uid
> equal to the dm_uid isn't guaranteed to succeed: the process in
> question may be able to kill the reaper process after the setresuid()
> and before the kill().
...
> +static int libxl__get_reaper_uid(libxl__gc *gc)
> +{
> + struct passwd *user_base, user_pwbuf;
> + int ret;
> + ret = userlookup_helper_getpwnam(gc, LIBXL_QEMU_USER_RANGE_BASE,
> + &user_pwbuf, &user_base);
ret should be r I think.
Also I think you need to handle errors properly ? Ie set and check
errno.
> const char *libxl__domain_device_model(libxl__gc *gc,
> const libxl_domain_build_info *info)
> {
> @@ -2719,12 +2728,62 @@ void libxl__destroy_device_model(libxl__egc *egc,
...
> - ret = setresuid(dm_uid, dm_uid, 0);
> + fd = open(lockfile, O_RDWR|O_CREAT, 0666);
> + if (fd < 0) {
> + /* All other errno: EBADF, EINVAL, ENOLCK, EWOULDBLOCK */
> + LOGED(ERROR, domid,
> + "unexpected error while trying to open lockfile %s,
> errno=%d",
> + lockfile, errno);
> + goto kill;
More gotos! I doubt this error handling is right.
I'm also not convinced that it is sensible to handle the case where we
have multiple per-domain uids but no reaper uid. This turns host
configuration errors into systems that are less secure than they
should be in a really obscure way.
> + /* Try to lock the file */
> + while (flock(fd, LOCK_EX)) {
CODING_STYLE, no call inside the condition please.
Overall I think this stuff needs a different error handling approach:
* We should distinguish expected and reasonable configurations, where
we fall back to less secure methods, from other unexpected
situations.
* In other unexpected situations (whether bad host configuration or
syscall errors or whatever) we should make a best effort to
destroy as much as we can.
* But crucially in such situations (i) overall destroy ao should
return a failure error code (ii) the domain itself should not be
destroyed in Xen. This means that `xl destroy' fails, and can be
repeated after the problem is corrected.
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |