When a syscall is denied, pledge cannot reverse map the required promise. It is not possible. Think about it for a bit.
It is best effort. It helps 95% of the developers. When you get close to ioctl, there is no plausible way to say what promise is required. cho...@jtan.com wrote: > I decided late in an application's life to start using pledge, so > I put a call in at the top and started running it and adding the > requirements reported by dmesg on each iteration. > > Eventually it reported that the tty promise was breached so I added > that and it reported again that the tty promise was breached. > > From GDB the relevant part of the stack trace is: > > (gdb) bt > #0 ioctl () at /tmp/-:2 > #1 0x606521cbcd89301f in ?? () > #2 0x000003089d94d4a2 in drmGetVersion (fd=8) at > /usr/xenocara/lib/libdrm/mk/libdrm/../../xf86drm.c:708 > #3 0x00000308b1d3b7e1 in loader_get_driver_for_fd (fd=8) at > /usr/xenocara/lib/mesa/mk/libloader/../../src/loader/loader.c:108 > #4 0x00000308b1d02ed6 in dri3_create_screen (screen=0, priv=Unhandled > dwarf expression opcode 0xa3) at > /usr/xenocara/lib/mesa/mk/libGL/../../src/glx/dri3_glx.c:829 > #5 0x00000308b1cf5956 in __glXInitialize (dpy=0x3083034c000) at > /usr/xenocara/lib/mesa/mk/libGL/../../src/glx/glxext.c:800 > #6 0x00000308b1d080a5 in glXQueryVersion (dpy=Unhandled dwarf expression > opcode 0xa3) at /usr/xenocara/lib/mesa/mk/libGL/../../src/glx/glxcmds.c:483 > > loader_get_driver_for_fd is calling: > > drmVersionPtr version = drmGetVersion(fd); > > xf86drm.c at line 708 is in drmIoctl which I presume is the result > of some preprocessor magic, calling: > > ret = ioctl(fd, request, arg); > > dmesg reports (many times with different PID, same syscall): > > turtle[32350]: pledge "tty", syscall 54 > > Clearly pledge is correct: whatever 'request' has this ioctl doing > doesn't use the tty promise (fd is probably the X connection). The > problem here is the error report in dmesg that the breach is in > something which is already included in the list of promises ("stdio > inet unix rpath recvfd tty", NULL). > > I shall continue investigating to get my application to work and > follow up if I find anything useful but I hope this is enough > information for somebody familiar with the implementation of pledge > to quickly figure out where its, or my, misunderstanding is. > > Cheers, > > Matthew >