Can someone give a a definitive reason why my custom system call needs to use put_user/get_user? I'm specifically worried about x86

I've read all kinds of things from the address may be in the wrong segment (but the segments are now flat).

When I read the code it appears both the C and assembly for x86 just check the address range.

So the question is assuming I know that the user has passed a valid address, is why use the function?

I have run tests which work perfectly well without using this. So is there some corner case I'm not aware of?