A few weeks ago I noticed that firefox tabs were getting killed for running afoul of pledge(2). It seems that the problem was some calls to shmget(2) from the X swrast_dri.so lib that seem to have come from the new mesa code that was recently imported. Since the shm syscalls aren't covered by any pledge the system was killing the firefox tabs when they called into X and X went down this code path.
The shm calls are guarded by a #ifdef, so the patch below just modifies the conditions so OpenBSD does not include the shm function and falls back to ordinary malloc. With this patch my firefox works again. The alternative is to add shm to pledge(2) somewhere. I expect that adding a syscall to pledge for a single program is unwanted, but in this case it would be for any program using X with this DRI module. A quick check in xenocara finds a small number of other references to the shm functions (lib/libXvMC/src/XvMC.c, lib/xcb-util-image/), but I don't know if we use these. ok? Index: lib/mesa/src/gallium/winsys/sw/dri/dri_sw_winsys.c =================================================================== RCS file: /cvs/xenocara/lib/mesa/src/gallium/winsys/sw/dri/dri_sw_winsys.c,v retrieving revision 1.7 diff -u -p -u -r1.7 dri_sw_winsys.c --- lib/mesa/src/gallium/winsys/sw/dri/dri_sw_winsys.c 19 Feb 2019 04:24:01 -0000 1.7 +++ lib/mesa/src/gallium/winsys/sw/dri/dri_sw_winsys.c 24 Feb 2019 15:16:35 -0000 @@ -26,8 +26,9 @@ * **************************************************************************/ -#if !defined(ANDROID) || ANDROID_API_LEVEL >= 26 +#if (!defined(ANDROID) || ANDROID_API_LEVEL >= 26) && !defined(__OpenBSD__) /* Android's libc began supporting shm in Oreo */ +/* OpenBSD does not allow shm in programs using pledge(2) */ #define HAVE_SHM #include <sys/ipc.h> #include <sys/shm.h>
