Thread (33 messages) 33 messages, 6 authors, 2018-10-02

[PATCH v6 11/11] arm64: annotate user pointers casts detected by sparse

From: Luc Van Oostenryck <hidden>
Date: 2018-09-06 23:09:06
Also in: linux-arch, linux-doc, linux-kselftest, linux-mm, lkml

On Thu, Sep 06, 2018 at 02:16:19PM -0700, Linus Torvalds wrote:
On Thu, Sep 6, 2018 at 2:13 PM Linus Torvalds
[off-list ref] wrote:
quoted
So for example:
quoted
 static inline compat_uptr_t ptr_to_compat(void __user *uptr)
 {
-       return (u32)(unsigned long)uptr;
+       return (u32)(__force unsigned long)uptr;
 }
this actually looks correct.
Side note: I do think that while the above is correct, the rest of the
patch shows that we might be better off simply not havign the warning
for address space changes at all for the "cast a pointer to an integer
type" case.

When you cast to a non-pointer type, the address space issue simply
doesn't exist at all, so the warning makes less sense.

It's really just he "pointer to one address space" being cast to
"pointer to another address space" that should really warn, and that
might need that "__force" thing.

Hmm? So maybe a sparse change is better for most of that patch.
Unless I'm misunderstanding something, I don't think there is
anything to change for this specific point. Sparse don't warn
(by default) on "cast from pointer with address space to integer",
as it always been the case, I think. I think it's the good choice.

It's just that recently, I've added a new flag -Wcast-from-as [1],
defaulting to 'no', specifically to *detect* these cast because of
these tagged pointers.

Note: I tend to think more and more that __force is simply too
      strong and weaker form, like __force_as and __force_bitwise
      would be more appropriate.


-- Luc Van Oostenryck

[1] d96da358c ("stricter warning for explicit cast to ulong")
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help