/* * xentoolcore.h * * Copyright (c) 2017 Citrix * * Common features used/provided by all Xen tools libraries * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; If not, see . */ #ifndef XENTOOLCORE_H #define XENTOOLCORE_H #include #include /* * int xentoolcore_restrict_all(domid_t domid); * * Arranges that Xen library handles (fds etc.) which are currently held * by Xen libraries, can no longer be used other than to affect domid. * * Does not prevent effects that amount only to * - denial of service, possibly host-wide, by resource exhaustion etc. * * If this cannot be achieved, returns -1 and sets errno. * If called again with the same domid, it may succeed, or it may * fail (even though such a call is potentially meaningful). * (If called again with a different domid, it will necessarily fail.) * * Note for multi-threaded programs: If xentoolcore_restrict_all is * called concurrently with a function which /or closes Xen library * handles (e.g. libxl_ctx_free, xs_close), the restriction is only * guaranteed to be effective after all of the closing functions have * returned, even if that is later than the return from * xentoolcore_restrict_all. (Of course if xentoolcore_restrict_all * it is called concurrently with opening functions, the new handles * might or might not be restricted.) * * ==================================================================== * IMPORTANT - IMPLEMENTATION STATUS * * This function has been implemented insofar as it appears necessary * for the purposes of running a deprivileged qemu, and is believed to * be sufficient (subject to the caveats discussed in the appropriate * libxl documentation for this feature). * * However, this function is NOT implemented for all Xen libraries. * For each use case of this function, the designer must evaluate and * audit whether the implementation is sufficient in their specific * context. * * Of course, patches to extend the implementation are very welcome. * ==================================================================== * * Thread safe. * * We expect that no callers do the following: * - in one thread call xen_somelibrary_open|close * - in another thread call fork * - in the child of the fork, before exec, call * xen_some[other]library_open|close or xentoolcore_restrict_all * */ int xentoolcore_restrict_all(domid_t domid); #endif /* XENTOOLCORE_H */ /* * Local variables: * mode: C * c-file-style: "BSD" * c-basic-offset: 4 * tab-width: 4 * indent-tabs-mode: nil * End: */