On Fri, Mar 29, 2019 at 08:25:25PM +0100, Jann Horn wrote: > Oooh, it's a sparse bug. It's *not* a bug. > Apparently it's significant that the user pointer is stored as a > __u64, and __u64 is defined as unsigned long long. Yes, it is. Casts to uintptr_t (== unsigned long on all targets) are OK; any other arithmetical type gives a warning, and quite deliberately so. Don't do it. If you want to say "I'm converting it to integer, all traces of its origin are gone", use an idiomatic cast.