Instead of
snprintf(pathbuf, sizeof(pathbuf), "/proc/self/fd/%u", fd);
execve(pathbuf, argv, envp);
you do execveat(fd, "", argv, envp, AT_EMPTY_PATH);
and that's it.