summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-08-09 20:40:26 +0200
committerSven Eden <yamakuzure@gmx.net>2017-08-09 20:40:26 +0200
commita0065de1a0eef3a79af751c27b8f90fcfb110a89 (patch)
treed59a6e372009fb7123181819ca4533c5cce453d5 /src
parent4c604d1e73b04395afc62257fd236128da17a248 (diff)
seccomp: default to something resembling the current personality when locking it
Let's lock the personality to the currently set one, if nothing is specifically specified. But do so with a grain of salt, and never default to any exotic personality here, but only PER_LINUX or PER_LINUX32.
Diffstat (limited to 'src')
-rw-r--r--src/basic/process-util.c19
-rw-r--r--src/basic/process-util.h2
2 files changed, 21 insertions, 0 deletions
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index 3f9b1a256..4dcb93f2d 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -913,6 +913,25 @@ const char* personality_to_string(unsigned long p) {
return architecture_to_string(architecture);
}
+int opinionated_personality(unsigned long *ret) {
+ int current;
+
+ /* Returns the current personality, or PERSONALITY_INVALID if we can't determine it. This function is a bit
+ * opinionated though, and ignores all the finer-grained bits and exotic personalities, only distinguishing the
+ * two most relevant personalities: PER_LINUX and PER_LINUX32. */
+
+ current = personality(PERSONALITY_INVALID);
+ if (current < 0)
+ return -errno;
+
+ if (((unsigned long) current & 0xffff) == PER_LINUX32)
+ *ret = PER_LINUX32;
+ else
+ *ret = PER_LINUX;
+
+ return 0;
+}
+
void valgrind_summary_hack(void) {
#ifdef HAVE_VALGRIND_VALGRIND_H
if (getpid_cached() == 1 && RUNNING_ON_VALGRIND) {
diff --git a/src/basic/process-util.h b/src/basic/process-util.h
index a7bdbffa9..339dc9f59 100644
--- a/src/basic/process-util.h
+++ b/src/basic/process-util.h
@@ -100,6 +100,8 @@ bool oom_score_adjust_is_valid(int oa);
unsigned long personality_from_string(const char *p);
const char *personality_to_string(unsigned long);
+int opinionated_personality(unsigned long *ret);
+
int ioprio_class_to_string_alloc(int i, char **s);
int ioprio_class_from_string(const char *s);