aboutsummaryrefslogtreecommitdiffstats
path: root/testing/slock/safer-oom-killer-disablement.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/slock/safer-oom-killer-disablement.patch')
-rw-r--r--testing/slock/safer-oom-killer-disablement.patch30
1 files changed, 30 insertions, 0 deletions
diff --git a/testing/slock/safer-oom-killer-disablement.patch b/testing/slock/safer-oom-killer-disablement.patch
new file mode 100644
index 0000000000..276e7d5ef4
--- /dev/null
+++ b/testing/slock/safer-oom-killer-disablement.patch
@@ -0,0 +1,30 @@
+--- slock-1.2.orig/slock.c
++++ slock-1.2/slock.c
+@@ -48,15 +48,26 @@
+
+ #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