Messages in this thread | | | From | Linus Torvalds <> | Date | Tue, 3 Jul 2018 10:59:45 -0700 | Subject | Re: [RFC PATCH for 4.18] rseq: use __u64 for rseq_cs fields, validate user inputs |
| |
On Tue, Jul 3, 2018 at 10:49 AM Peter Zijlstra <peterz@infradead.org> wrote: > > > I can simply document that loads/stores from/to all struct rseq fields > > should be thread-local then ? > > I'm not sure that covers things sufficiently. You really want the > userspace load/stores to be single instructions.
Actually, I think we should try very hard to limit even that to _just_ the rseq pointer itself.
Everything else can be filled in ahead of time with non-atomic stores, and then the last thing that happens - and the only thing that wants that final "one last atomic write" is the rseq pointer write.
No?
So I'd suggest that the only part we aim to have any "atomic" behavior at all is for the individual fields in "struct rseq" itself. So the cpu id and the base pointer and the flags. And even they are thread-local, so the atomicity is not about the kernel, but about user space needing to read and update them in word-sized chunks.
End result: absolutely nothing is atomic for the kernel.
Linus
| |