Inside of virSetUIDGIDWithCaps() there's a naked call to
capng_apply(), i.e. without any retval check. This is potentially
dangerous as capng_apply() may fail. Do the check and report an
error.
This also fixes the build on bleeding edge distros - like Fedora
rawhide - where the function is declared with 'warn unused
result' [1].
1:
https://github.com/stevegrubb/libcap-ng/commit/a0743c335c9a16a2fda9b25120...
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/util/virutil.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/util/virutil.c b/src/util/virutil.c
index b5b65fb415..edc39b981f 100644
--- a/src/util/virutil.c
+++ b/src/util/virutil.c
@@ -1200,8 +1200,12 @@ virSetUIDGIDWithCaps(uid_t uid, gid_t gid, gid_t *groups, int
ngroups,
* do this if we failed to get the capability above, so ignore the
* return value.
*/
- if (!need_setpcap)
- capng_apply(CAPNG_SELECT_BOUNDS);
+ if (!need_setpcap &&
+ (capng_ret = capng_apply(CAPNG_SELECT_BOUNDS)) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot apply process capabilities %1$d"),
capng_ret);
+ return -1;
+ }
/* Drop the caps that allow setuid/gid (unless they were requested) */
if (need_setgid)
--
2.41.0