On 12/04/2024 13:26, Kevin Brodsky wrote:
This cast is invalid, arg being an unsigned long in this case. I'm surprised the compiler doesn't warn about this.
For both functions, I'd suggest using something like:
void __user *uarg = compat_ptr(arg);
in the prologue. This avoids the need for a cast when calling the actual handler with uarg (void * is implicitly convertible to any pointer type), which is not just shorter but also avoids this strange cast to a pointer to a native struct, despite the pointer being actually to a compat struct in this case.
I thought there was something fishy here! Do you know why the compiler would ignore this, could it have anything to do with how I've got the build configured (specifically the #ifdef CONFIG_COMPAT)?
Many thanks for the feedback as always,
Akram