[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 9/9] libxl: Kill QEMU with "reaper" ruid
> On Nov 28, 2018, at 6:33 PM, George Dunlap <george.dunlap@xxxxxxxxxx> wrote: > >>> - 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. > > At this point, we have a target_uid but no way of getting a lock for > reaper_uid. We have three options: > > 1. Don’t kill(-1) at all. > 2. Try to kill(-1) with setresuid(target_uid, target_uid, 0) > 3. kill(-1) with setresuid(reaper_uid, target_uid, 0) without holding the > lock. > > #1 means that a rogue qemu will not be destroyed. > > #2 means that there’s a race, whereby sometimes the rogue qemu is destroyed, > and sometimes the reaper process is destroyed by the rogue qemu first. > > #3 means there’s a race, whereby sometimes everything works fine, sometimes > both the rogue qemu and *the reaper process from another domain* is > destroyed, and sometimes this reaper process is killed by the reaper process > from another domain (leaving the rogue qemu alive). > > I think #1 is obviously the best option. Sorry, this should say, ‘I think #2 is the best option’. -G _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |