Very basic pledge(2) for the whole program. I didn't dive too much into
the details and maybe this can be refined some more. This is kind of a
product of me trying a tool I made `abstain` [1] for usefulness of
pledge(2) execpromises and it helped quickly find that xeyes(1) can run
with a very limited set of promises. I tested all permutations of
running xeyes(1) that are listed in the man page and none of them break
with this configuration.

ok to add?

[1] https://github.com/rfht/abstain

Index: xeyes.c
===================================================================
RCS file: /cvs/xenocara/app/xeyes/xeyes.c,v
retrieving revision 1.5
diff -u -p -r1.5 xeyes.c
--- xeyes.c     29 Aug 2021 17:50:32 -0000      1.5
+++ xeyes.c     8 Sep 2023 03:23:51 -0000
@@ -38,6 +38,8 @@ from the X Consortium.
 #include "Eyes.h"
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
 #include "eyes.bit"
 #include "eyesmask.bit"
 
@@ -111,6 +113,8 @@ main(int argc, char **argv)
     Arg arg[2];
     Cardinal i;
 
+    if(pledge("stdio rpath unix prot_exec", NULL) == -1)
+           err(1, "pledge");
     XtSetLanguageProc(NULL, (XtLanguageProc) NULL, NULL);
 
     toplevel = XtAppInitialize(&app_context, "XEyes",

Reply via email to