aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2015-05-28 01:43:47 -0500
committerRob Landley <rob@landley.net>2015-05-28 01:43:47 -0500
commit2d66e6a23822a500ecf6610411941e99127129c8 (patch)
treea1742937f24691332b05ad2100cb2a816d575b8f /lib
parenta65a7f4241f1cc9b4963a285e3a2137cffae62ad (diff)
downloadtoybox-2d66e6a23822a500ecf6610411941e99127129c8.tar.gz
Attempt to fix the mkdir LSM race.
Doing a world writeable mkdir and _then_ adding a label seems like a race window, so set the global "create stuff with these labels" context, then do the creates.
Diffstat (limited to 'lib')
-rw-r--r--lib/lsm.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/lsm.h b/lib/lsm.h
index 660917aa..d7e7de9c 100644
--- a/lib/lsm.h
+++ b/lib/lsm.h
@@ -7,6 +7,7 @@
#include <selinux/selinux.h>
#else
#define is_selinux_enabled() 0
+#define setfscreatecon(...) (-1)
#define getcon(...) (-1)
#define getfilecon(...) (-1)
#define lgetfilecon(...) (-1)
@@ -27,6 +28,7 @@
#define smack_new_label_from_self(...) (-1)
#define smack_new_label_from_path(...) (-1)
#define smack_new_label_from_file(...) (-1)
+#define smack_set_label_for_self(...) (-1)
#define smack_set_label_for_path(...) (-1)
#define smack_set_label_for_file(...) (-1)
#endif
@@ -58,6 +60,14 @@ static inline char *lsm_context(void)
return ok ? result : strdup("?");
}
+// Set default label to apply to newly created stuff (NULL to clear it)
+static inline int lsm_set_create(char *context)
+{
+ if (CFG_TOYBOX_SMACK) return smack_set_label_for_self(context);
+ else return setfscreatecon(context);
+}
+
+// Label a file, following symlinks
static inline int lsm_set_context(char *filename, char *context)
{
if (CFG_TOYBOX_SMACK)
@@ -65,6 +75,7 @@ static inline int lsm_set_context(char *filename, char *context)
else return setfilecon(filename, context);
}
+// Label a file, don't follow symlinks
static inline int lsm_lset_context(char *filename, char *context)
{
if (CFG_TOYBOX_SMACK)
@@ -72,6 +83,7 @@ static inline int lsm_lset_context(char *filename, char *context)
else return lsetfilecon(filename, context);
}
+// Label a file by filehandle
static inline int lsm_fset_context(int file, char *context)
{
if (CFG_TOYBOX_SMACK)
@@ -79,7 +91,6 @@ static inline int lsm_fset_context(int file, char *context)
else return fsetfilecon(file, context);
}
-
// returns -1 in case of error or else the length of the context */
// context can be NULL to get the length only */
static inline int lsm_get_context(char *filename, char **context)