VirtualProtect/mprotect aren't privileged calls on any modern OS.
It's how you do JIT on macOS, where W^X is enforced, for example.