chore: Check CAP_SYS_ADMIN in ot_util_process_privileged
authorMisaki Kasumi <misakikasumi@outlook.com>
Fri, 20 Dec 2024 12:35:08 +0000 (20:35 +0800)
committerMisaki Kasumi <misakikasumi@outlook.com>
Fri, 20 Dec 2024 12:35:08 +0000 (20:35 +0800)
src/libotutil/ot-unix-utils.c

index 7a3192fe54eb3db77305ca12c6c1a89998d44975..bf2310de03723767cde630933a715e2afe88966f 100644 (file)
@@ -32,6 +32,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
+#include <sys/prctl.h>
+#include <linux/prctl.h>
+#include <linux/capability.h>
 #include <unistd.h>
 
 /* Ensure that a pathname component @name does not contain the special Unix
@@ -107,5 +110,12 @@ ot_util_path_split_validate (const char *path, GPtrArray **out_components, GErro
 gboolean
 ot_util_process_privileged (void)
 {
-  return geteuid() == 0;
+  if (geteuid() != 0)
+    return FALSE;
+
+  // https://github.com/containers/bootc/blob/c88fcfd6e145863408bde7d4706937dd323f64e2/lib/src/cli.rs#L621
+  if (prctl (PR_CAPBSET_READ, CAP_SYS_ADMIN) != 1)
+    return FALSE;
+
+  return TRUE;
 }