Neither kernel nor user space never prevent you from shouting yourself.
rm -rf / is sure worse then your case, but still kernel doesn't prevent it.
And even if it did - I don't think you was better off with execve failed with EINVAL than you are now.
mmap with MMAP_FIXED flag set also will happily overwrite already mapped memory.
By the way, why you need your own dynamic linker ?
What did you miss in the standard one ?