That was my first thought - would they leave the set_fs solution in place if C had a native solution for resource blocks / RAII+drop.
set_fs(KERN)
*function_pointer()
set_fs(USER)
There did it before, so they knew about that option, and if they didn't do it, they must have had a reason.[1] https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attribute...
The issue with forgetting function calls like this are the edge cases, and the kernel has a lot more of those.