[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v7 2/5] x86/asm: add volatile, clobbers and zero-length check in inline memcmp


  • To: "H. Peter Anvin" <hpa@xxxxxxxxx>
  • From: Brian Gerst <brgerst@xxxxxxxxx>
  • Date: Thu, 23 Jul 2026 15:37:48 -0400
  • Arc-authentication-results: i=1; mx.google.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=oWKbsBbm9eg9R7aduyFLAHcnNHPcWLLQDbRXMW+g5LI=; fh=zsexs5QKyhlFxqTRjP77L6TwkfDMn9yRs0P53mmNGEs=; b=JZ01/APj29x9Zwv6t13kscKArZrlVC2kC0i0PlFpcLLWHJ64D+jnnjt2MHnIdG/nA8 GiIvs9Xhtv8C6//R4al9nga2Yk1OJ30zzZ9RWQRQRK1hTciR/Zp8XUqFl+G7yBVyJ9dB G9s1yKddo3UabviSXtwNtxOcV43xOXE4K7cISVl4IhU3C/5OEXrfHT90mCm42pnInBsu MJ5YM3hU+LWUieMoo879pft69BwuLFp7TuHSw0/IN126W63hukMEFIFrrb4QMBr9o5X7 bbYNx/urF9FGW9N6+r4f4qGvQxPQhbb8/mmPltKLYVXBKAP9fcfEChBrVzw6E7n2QPlc kLbQ==; darn=lists.xenproject.org
  • Arc-seal: i=1; a=rsa-sha256; t=1784835480; cv=none; d=google.com; s=arc-20260327; b=JK2o17UXWsvtA94km22snwH6gJSIy+vnriPiv9ZdUUz+uC/NPaic83tyRiOKsb+Ewr i8oKWgf4pyyb8O/Kea2cTNKOrdEnL6LqxCJCSnchZaufzGNmDIpZ6esxqasmSfz7UsM2 z3cnTNmqXvtTHw3IGslymH+zdXIKQRSTe+4nw+Pq8cWSxB9t06flL0lB7lheSVdnXtkI Bd/htiUC43A5iKlbTlv3zUKIbXJwb/MbginUak1+sm7hCdOfCPeJQxFMa/pNibFkD7r7 2McnzTBrz6aMV9SiyzCpts8afXG7ztVjT2argJYLmJWOdqMomV954yA5ghZ8y3rfyhIX D0bQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version"
  • Cc: Borislav Petkov <bp@xxxxxxxxx>, Mauricio Faria de Oliveira <mfo@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>, x86@xxxxxxxxxx, Juergen Gross <jgross@xxxxxxxx>, Alexey Dobriyan <adobriyan@xxxxxxxxx>, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>, kernel-dev@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Thu, 23 Jul 2026 19:38:21 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed, Jul 22, 2026 at 2:53 PM H. Peter Anvin <hpa@xxxxxxxxx> wrote:
>
> On July 22, 2026 10:03:34 AM PDT, Borislav Petkov <bp@xxxxxxxxx> wrote:
> >hpa in To:.
> >
> >On Tue, Jul 21, 2026 at 12:56:43PM -0300, Mauricio Faria de Oliveira wrote:
> >> Add the volatile qualifier and clobbers parameter to prevent bugs with
> >> instruction reordering and optimization.
> >>
> >> Also check the zero-length case, as the 'repe' prefix does not run the
> >> 'cmpsb' instruction if the 'count' register is zero, which doesn't set
> >
> >Please use capital letters for insns: REPE, CMPSB and you don't need to put
> >words in '' - it reads fine without them.
> >
> >> the condition-code/zero flag, so the result is based on a stale flag.
> >>
> >> Those are pre-existing issues found by Sashiko.
> >>
> >> Link: 
> >> https://sashiko.dev/#/patchset/20260701-pvh-kasan-inline-v6-0-ba99045dfa9f%40igalia.com
> >> Signed-off-by: Mauricio Faria de Oliveira <mfo@xxxxxxxxxx>
> >> ---
> >>  arch/x86/include/asm/shared/string.h | 8 ++++++--
> >>  1 file changed, 6 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/arch/x86/include/asm/shared/string.h 
> >> b/arch/x86/include/asm/shared/string.h
> >> index 
> >> 02b92927553f7b8e1c87e6122bbaa70439e57ea7..166274e44f3cb49e3dccab3cdac281d67aef5d44
> >>  100644
> >> --- a/arch/x86/include/asm/shared/string.h
> >> +++ b/arch/x86/include/asm/shared/string.h
> >> @@ -11,8 +11,12 @@ static __always_inline int __inline_memcmp(const void 
> >> *s1, const void *s2, size_
> >>  {
> >>      bool diff;
> >>
> >> -    asm("repe cmpsb"
> >> -        : "=@ccnz" (diff), "+D" (s1), "+S" (s2), "+c" (len));
> >> +    if (len == 0)
> >> +            return 0;
> >> +
> >> +    asm volatile("repe cmpsb"
> >> +                 : "=@ccnz" (diff), "+D" (s1), "+S" (s2), "+c" (len)
> >> +                 : : "cc", "memory");
> >>
> >>      return diff;
> >>  }
> >
> >So this is a fix which should probably go to stable, I think. Going back into
> >git history, it points to
> >
> >  62bd0337d0c4 ("Top header file for new x86 setup code")
> >
> >from 2007. And we have carried it this way through the years and who knows
> >what hit this or not. So please make this the first patch in your set - you
> >can even send it separately so that I can get route it through stable.
> >
> >Then you can base the rest ontop.
> >
> >Thx.
> >
>
> Also, this is silly. Instead of adding a whole separate test, just do "test 
> %3,%3" before the repe to set ZF and let the REPE skip.

REPE does not check ZF before the first iteration.

>From the Intel SDM:
"When the REPE/REPZ and REPNE/REPNZ prefixes are used, the ZF flag
does not require initialization because both
the CMPS and SCAS instructions affect the ZF flag according to the
results of the comparisons they make."



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.