The diff below adds pledge("stdio") calls for the pfkey dump subset
of ipsecctl commands.

In particular ipsecctl -s which prints all SAs or flows in the kernel
and more importantly ipsecctl -m which contiously parses and prints every
pfkey message forwarded by the kernel don't seem to need any additional
privileges after setting up pfkey sockets and sysctls.

ok?

Index: ipsecctl.c
===================================================================
RCS file: /cvs/src/sbin/ipsecctl/ipsecctl.c,v
retrieving revision 1.85
diff -u -p -r1.85 ipsecctl.c
--- ipsecctl.c  7 Mar 2023 17:43:59 -0000       1.85
+++ ipsecctl.c  8 Oct 2023 22:16:59 -0000
@@ -625,6 +625,9 @@ ipsecctl_get_rules(struct ipsecctl *ipse
                if (msg->sadb_msg_len == 0)
                        break;
 
+               if (pledge("stdio", NULL) == -1)
+                       err(1, "pledge");
+
                rule = calloc(1, sizeof(struct ipsec_rule));
                if (rule == NULL)
                        err(1, "ipsecctl_get_rules: calloc");
@@ -739,6 +742,10 @@ ipsecctl_show_sas(int opts)
                err(1, "ipsecctl_show_sas: malloc");
        if (sysctl(mib, 5, buf, &need, NULL, 0) == -1)
                err(1, "ipsecctl_show_sas: sysctl");
+
+       if (pledge("stdio", NULL) == -1)
+               err(1, "pledge");
+
        sacount = 0;
        lim = buf + need;
        for (next = buf; next < lim;
Index: pfkey.c
===================================================================
RCS file: /cvs/src/sbin/ipsecctl/pfkey.c,v
retrieving revision 1.63
diff -u -p -r1.63 pfkey.c
--- pfkey.c     22 Oct 2021 12:30:54 -0000      1.63
+++ pfkey.c     8 Oct 2023 22:16:59 -0000
@@ -1324,6 +1324,9 @@ pfkey_monitor(int opts)
        if (pfkey_promisc() < 0)
                return -1;
 
+       if (pledge("stdio", NULL) == -1)
+               err(1, "pledge");
+
        pfd[0].fd = fd;
        pfd[0].events = POLLIN;
        for (;;) {

Reply via email to