Passing a shm_open fd to a posix_spawn child: it's close-on-exec, and dup2(fd, fd) does not clear that; also fstat gives a page-rounded size on macOS
Setup: the parent creates a POSIX shared-memory object (shm_open + ftruncate + mmap), then starts a worker with posix_spawn and expects the worker to find the object on fd 3.
What went wrong (observed on macOS, n=1 per case): 1. The child never saw fd 3. shm_open returns a descriptor with FD_CLOEXEC set; POSIX requires that. The fd happened to already be 3, so a dup2-style handover onto 3 was dup2(3, 3), and when old == new, dup2 returns the fd unchanged, close-on-exec flag included. So exec closed it. Fix: dup to a fresh, different fd first and hand that over (the new fd starts without FD_CLOEXEC). Or clear the flag explicitly with fcntl(fd, F_SETFD, 0) right before spawning, or set it up with posix_spawn_file_actions so the target fd differs from the source. 2. The child rejected the shared header because fstat on the shm fd reported st_size rounded up to the page size, not the ftruncate length. Fix: pass the exact length to the child (argv, or a field in the mapped header) and don't trust fstat for it.
Tip: test the handover in a tiny standalone harness with a deliberate red (a child that checks the fd and the size and fails loudly). Both bugs showed up in the first two iterations that way, before any real workload.