From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by sourceware.org (Postfix) with ESMTPS id 069473858D35 for ; Fri, 2 Dec 2022 01:39:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 069473858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x635.google.com with SMTP id td2so8367526ejc.5 for ; Thu, 01 Dec 2022 17:39:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=v6fJHQY3UiKnkPBCSzi0j1KR1Y8Q6UH+HQTggRdw6fw=; b=ndzlRaZ9t5914SfZlfqrzWgrhxfjqzmPXuVtBLD+ccKMXnZKdVPKAqOsjtjuJzt7HW /rhGHI+PHQJ/GatJt4IE8W0VbeeVE19fGmE9PZ3HxkaOMoplNK2sf50IORD7IBpO3cBW O21p6+yNL0Y6xl6lteq5evbH8i0N70QKx2Wlo8l4Xl4esrzonkH+g/4WDsMjoBuY4cf0 vFEQ9EM7LfaDlwaaMq6z6VvEwlZHMMA2DgVwpPD24Cnbw/hSYf3DOpRk8efk+w+Z2eFS ZOKiswhCN9CUrBJc1VsN+egKz88+wwOJYaG4h7KDa30xMXqqwf/KASJKkg/TKPI2hLzk 6g5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=v6fJHQY3UiKnkPBCSzi0j1KR1Y8Q6UH+HQTggRdw6fw=; b=FxpW+S0SbsMz61qJTC5H/Pnx8XBbMS0uqidZZaW+0v+nPQ0ouql3W4alePpE2IOzaQ bJ46I2awGp8wOIlZDQmrYb8tXkmc5/EAfWZRDmIF7V/+3AHIVWSFo18KILLcwZ+XSXgs vm9Tw+9xkrjElMyidTKDiW6PVOc+0XeRqGttnAJSfJ6AdHKPEboGNY0ACYLe09PoTTCN LVPJFMHTq+2owXecT2FrVZSmEcbVWab+7mi0A2FwOELsdKYt46RFy5LaUdroxncGO8g8 r/Dkz2cQHbEUY7fL/rV/A+ee2UXLlH0Ayem3IXFCyR0qq5RdKjvnutHp2P2rcNeLS1d6 2CtQ== X-Gm-Message-State: ANoB5pmXXHtnD2cYPPvNoHlhQvxQxOnHem1/YEFIkFy60v7AVc/4Nuli eOnEdBdrnAm7Dbh3pmNR4APTzLmfN+xr4lFCTfc+3WQeGRA= X-Google-Smtp-Source: AA0mqf5MmeVULAPYyf9epGXNueJXhbPkI/uWWhXpriJo62ZwMCzLgCkDKp7+EWxJ1Xu8vcVvZtdVNk4M0Bgea+DE5V4= X-Received: by 2002:a17:907:d48a:b0:7c0:9f24:af95 with SMTP id vj10-20020a170907d48a00b007c09f24af95mr8789713ejc.526.1669945145519; Thu, 01 Dec 2022 17:39:05 -0800 (PST) MIME-Version: 1.0 References: <20221202003602.358708-1-hjl.tools@gmail.com> In-Reply-To: <20221202003602.358708-1-hjl.tools@gmail.com> From: Noah Goldstein Date: Thu, 1 Dec 2022 17:38:54 -0800 Message-ID: Subject: Re: [PATCH] x86-64 strncpy: Properly handle the length parameter [BZ# 29839] To: "H.J. Lu" Cc: libc-alpha@sourceware.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-8.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Dec 1, 2022 at 4:36 PM H.J. Lu wrote: > > On x32, the size_t parameter may be passed in the lower 32 bits of a > 64-bit register with the non-zero upper 32 bits. The string/memory > functions written in assembly can only use the lower 32 bits of a > 64-bit register as length or must clear the upper 32 bits before using > the full 64-bit register for length. > > This pach fixes strncpy for x32. Tested on x86-64 and x32. On x86-64, > libc.so is the same with and without the fix. > --- > sysdeps/x86_64/multiarch/strncpy-avx2.S | 4 ++++ > sysdeps/x86_64/multiarch/strncpy-evex.S | 4 ++++ > 2 files changed, 8 insertions(+) > > diff --git a/sysdeps/x86_64/multiarch/strncpy-avx2.S b/sysdeps/x86_64/multiarch/strncpy-avx2.S > index e9afd8fbed..3e6350ce4a 100644 > --- a/sysdeps/x86_64/multiarch/strncpy-avx2.S > +++ b/sysdeps/x86_64/multiarch/strncpy-avx2.S > @@ -52,6 +52,10 @@ > > .section SECTION(.text), "ax", @progbits > ENTRY(STRNCPY) > +# ifdef __ILP32__ > + /* Clear the upper 32 bits. */ > + movl %edx, %edx > +# endif > /* Filter zero length strings and very long strings. Zero > length strings just return, very long strings are handled by > just running rep stos{b|l} to zero set (which will almost > diff --git a/sysdeps/x86_64/multiarch/strncpy-evex.S b/sysdeps/x86_64/multiarch/strncpy-evex.S > index 49eaf4cbd9..dec8cccc2b 100644 > --- a/sysdeps/x86_64/multiarch/strncpy-evex.S > +++ b/sysdeps/x86_64/multiarch/strncpy-evex.S > @@ -80,6 +80,10 @@ > > .section SECTION(.text), "ax", @progbits > ENTRY(STRNCPY) > +# ifdef __ILP32__ > + /* Clear the upper 32 bits. */ > + movl %edx, %edx > +# endif > /* Filter zero length strings and very long strings. Zero > length strings just return, very long strings are handled by > just running rep stos{b|l} to zero set (which will almost > -- > 2.38.1 > LGTM. Reviewed-by: Noah Goldstein