Returning from the signal handler occurs in user space. It's the C library's handling of signal save and return that matters here, not what the kernel does.
I herby claim that sigreturn() restores the user space state in kernel context: https://lwn.net/Articles/676803/