On Wed, Sep 09, 2020 at 08:20:07AM +0000, David Laight wrote: > From: Josh Poimboeuf <jpoim...@redhat.com> > > Sent: 08 September 2020 18:43 > > Hi x86 maintainers, > ... > > > --- a/arch/x86/lib/putuser.S > > > +++ b/arch/x86/lib/putuser.S > > > @@ -38,6 +38,8 @@ SYM_FUNC_START(__put_user_1) > > > ENTER > > > cmp TASK_addr_limit(%_ASM_BX),%_ASM_CX > > > jae .Lbad_put_user > > > + sbb %_ASM_BX, %_ASM_BX /* uaccess_mask_ptr() */ > > > + and %_ASM_BX, %_ASM_CX > > > ASM_STAC > > > 1: movb %al,(%_ASM_CX) > > > xor %eax,%eax > > For 64bit the sbb+and pattern can be replaced by an instruction > that clears the high bit (eg btr $63, %rcx). > This isn't dependant on the earlier instructions so can execute > in parallel with them.
Wouldn't that break with KERNEL_DS? > I still think that doing the same comparisons in access_ok() > and for the pointer masking is silly - and they should get merged. I agree, but as I said multiple times already, that will be a much bigger change (tree-wide and multi-arch) which comes later. -- Josh