summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--run-as/package.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/run-as/package.c b/run-as/package.c
index 8f1164620..143d647bf 100644
--- a/run-as/package.c
+++ b/run-as/package.c
@@ -89,6 +89,16 @@ map_file(const char* filename, size_t* filesize)
if (ret < 0)
goto EXIT;
+ /* Ensure that the file is owned by the system user */
+ if ((st.st_uid != AID_SYSTEM) || (st.st_gid != AID_SYSTEM)) {
+ goto EXIT;
+ }
+
+ /* Ensure that the file has sane permissions */
+ if ((st.st_mode & S_IWOTH) != 0) {
+ goto EXIT;
+ }
+
/* Ensure that the size is not ridiculously large */
length = (size_t)st.st_size;
if ((off_t)length != st.st_size) {