pledge("everything", NULL) is not the same as not calling pledge.
roy hills <royhi...@hotmail.com> wrote: > I'm using pledge(2) to harden an application on OpenBSD, but cannot find > a promise that will allow it to run. Even after adding all the promises > listed in the pledge manpage (apart from "error") it still fails with > SIGABRT. > > I'm calling this: > > pledge("stdio rpath wpath cpath dpath tmppath inet mcast fattr chown " > "flock unix dns getpw sendfd recvfd tape tty proc exec " > "prot_exec settime ps vminfo id pf route wroute audio video " > "bpf unveil", NULL); > > and getting this: > > openbsd72$ kdump | tail > 71505 arp-scan RET kbind 0 > 71505 arp-scan CALL open(0xf00c9939b8a,0x2<O_RDWR>) > 71505 arp-scan NAMI "/dev/bpf" > 71505 arp-scan RET open 3 > 71505 arp-scan CALL kbind(0x7f7ffffc9638,24,0x9e68113ba2b6b588) > 71505 arp-scan RET kbind 0 > 71505 arp-scan CALL ioctl(3,BIOCVERSION,0x7f7ffffc9740) > 71505 arp-scan PLDG ioctl, "tty", errno 1 Operation not permitted > 71505 arp-scan PSIG SIGABRT SIG_DFL > 71505 arp-scan NAMI "arp-scan.core" > It is failing in the libpcap library, with the calling sequence: > pcap_findalldevs() -> pcap_open_live() -> pcap_activate() -> ioctl() > > For context I'm applying the pledge patch from the OpenBSD arp-scan > port to the upstream code on github. The initial patch, which pledges a > small set of promises after setup is complete is working fine. But when I > try to add a more extensive pledge() as the first statement in main(), I > cannot find a set of promises that will allow it to run the setup code. > > Here's my outline of the planned changes from the pull request: > > "@sthen: this is the PR for your OpenBSD pledge(2) patch. I'm planning to > extend it a bit by calling pledge initially as the very first thing in > main() with the most that arp-scan will ever need, including rpath, wpath > and perhaps others in addition to stdio dns bpf. Then, when we've parsed > the args and opened files & sockets, call pledge again with a reduced set. > Maybe could also tune the reduced set based on args - I suspect we don't > need dns without --resolve. > > I was also considering changing the execpromises from NULL to "" (empty > string). From my reading of the manpage, promises (and presumably also > execpromises) of NULL mean don't change current settings (presumably > everything) whereas an empty string means nothing (well apart from > _exit(2)). It probably won't change much in practice, as the process > would never be able to call execve(), but arp-scan doesn't ever fork() > or execve() so I don't think we need any execpromises at all." > > Full details in this github pull request: > https://github.com/royhills/arp-scan/pull/132 > > Any ideas what I'm doing wrong? > > Thanks, > > Roy >