Thanks for the info. Does that mean there are some functions that aren't covered by any of the available promises? If so I guess this ioctl() might be an example.
I'm not actually trying to pledge everything - that was just me trying to find out what promises I need so I added all of them. I was hoping to be able to start with a larger set and then slim down to a smaller set after setup. Looks like that might not be possible then I guess. Thanks, Roy -----Original Message----- From: Theo de Raadt <dera...@openbsd.org> Sent: 27 January 2023 17:05 To: roy hills <royhi...@hotmail.com> Cc: misc@openbsd.org Subject: Re: ioctl BIOCVERSION command causes SIGABRT after pledge(2) with all promises from the manpage 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 >