Slightly safer OOM killer disablement in linux
authorDavid Phillips <dbphillipsnz@gmail.com>
Fri, 19 Jun 2015 11:42:15 +0000 (23:42 +1200)
committerMarkus Teich <markus.teich@stusta.mhn.de>
Mon, 6 Jul 2015 09:15:07 +0000 (11:15 +0200)
slock.c

diff --git a/slock.c b/slock.c
index d6053af..b3bee92 100644 (file)
--- a/slock.c
+++ b/slock.c
@@ -60,16 +60,27 @@ die(const char *errstr, ...)
 
 #ifdef __linux__
 #include <fcntl.h>
+#include <linux/oom.h>
 
 static void
 dontkillme(void)
 {
        int fd;
+       int length;
+       char value[64];
 
        fd = open("/proc/self/oom_score_adj", O_WRONLY);
        if (fd < 0 && errno == ENOENT)
                return;
-       if (fd < 0 || write(fd, "-1000\n", 6) != 6 || close(fd) != 0)
+
+       /* convert OOM_SCORE_ADJ_MIN to string for writing */
+       length = snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN);
+
+       /* bail on truncation */
+       if (length >= sizeof(value))
+               die("buffer too small\n");
+
+       if (fd < 0 || write(fd, value, length) != length || close(fd) != 0)
                die("cannot disable the out-of-memory killer for this process\n");
 }
 #endif