I have commented on approach described in the article. In all examples that they give they use write() or read() calls to /dev/mem file descriptor.
And write() simply translates offset to virtual address and mem-copies. Thus it will surely segfault.
I do agree that since /dev/mem device has memmap() callback defined, you can use the mmap() operation to create a new mapping with new protections. This would work except that this callback does range checking in modern kernels and restricts the range you are allowed to modify. As other people have commented this has been the situation for a long time already.
I do know what I am talking about (I have written code that patched running kernel modifying page fault handlers and system call table to do neat things) and you are simply an abusive ass.