On Tue, Apr 13, 2021 at 6:57 PM Eric Dumazet <eduma...@google.com> wrote: > > On Tue, Apr 13, 2021 at 6:54 PM Mathieu Desnoyers > <mathieu.desnoy...@efficios.com> wrote: > > > > ----- On Apr 13, 2021, at 12:22 PM, Eric Dumazet eric.duma...@gmail.com > > wrote: > > > > > From: Eric Dumazet <eduma...@google.com> > > > > > > Commit ec9c82e03a74 ("rseq: uapi: Declare rseq_cs field as union, > > > update includes") added regressions for our servers. > > > > > > Using copy_from_user() and clear_user() for 64bit values > > > is suboptimal. > > > > > > We can use faster put_user() and get_user(). > > > > > > 32bit arches can be changed to use the ptr32 field, > > > since the padding field must always be zero. > > > > > > v2: added ideas from Peter and Mathieu about making this > > > generic, since my initial patch was only dealing with > > > 64bit arches. > > > > Ah, now I remember the reason why reading and clearing the entire 64-bit > > is important: it's because we don't want to allow user-space processes to > > use this change in behavior to figure out whether they are running on a > > 32-bit or in a 32-bit compat mode on a 64-bit kernel. > > > > So although I'm fine with making 64-bit kernels faster, we'll want to keep > > updating the entire 64-bit ptr field on 32-bit kernels as well. > > > > Thanks, > > > > So... back to V1 then ?
Or add more stuff as in : #ifdef CONFIG_64BIT + return put_user(0UL, &t->rseq->rseq_cs.ptr64); +#else + return put_user(0UL, &t->rseq->rseq_cs.ptr.ptr32) | put_user(0UL, &t->rseq->rseq_cs.ptr.padding); +#endif