From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2055.outbound.protection.outlook.com [40.107.8.55]) by sourceware.org (Postfix) with ESMTPS id A023E3858291 for ; Tue, 21 Feb 2023 09:28:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A023E3858291 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NMKyue3rVLB+4UjmMTdEAnKFp4zHirYMvtE3wO+xy6A=; b=XfUyAoliNNN/bZb5yczrUqnMZFtxh/nGDHGL281nMGfxeejA4RNxE48dgXXzJ7QiGIkKwgpOM6PqK7h69RPq/oH6gpzGmvCvflctDJqEmBbkWgX5WmI+Ofqz+hsSaZvkT3grTYKK/hq3UyOf6RVcwU5rj/zbhv2JkDx7VFoXnJI= Received: from AS8PR04CA0184.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::9) by GV1PR08MB7348.eurprd08.prod.outlook.com (2603:10a6:150:23::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.17; Tue, 21 Feb 2023 09:28:36 +0000 Received: from AM7EUR03FT010.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:2f3:cafe::96) by AS8PR04CA0184.outlook.office365.com (2603:10a6:20b:2f3::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.21 via Frontend Transport; Tue, 21 Feb 2023 09:28:35 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT010.mail.protection.outlook.com (100.127.141.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6134.17 via Frontend Transport; Tue, 21 Feb 2023 09:28:35 +0000 Received: ("Tessian outbound 6e565e48ed4a:v132"); Tue, 21 Feb 2023 09:28:35 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 26384de7c826c7a8 X-CR-MTA-TID: 64aa7808 Received: from 89efc2f8306b.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F7CFE1CC-BD99-4FFF-B045-05337E46E80A.1; Tue, 21 Feb 2023 09:28:29 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 89efc2f8306b.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 21 Feb 2023 09:28:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gS6KlUGw4eJ3RSBH1l5yfDNdjM4DLZZAcbhuCySv3fRqbp+P1U0TUUmsonbt9dlPT1QeBmCCuUkM5rzF3tSjM7lQEebAaYbBkM2iBjrEvvRqxpVI33fIo5wcevSIpG639pw++3jV0IvxjkxWfCdb0A3HehRoperK02kl3cgdq4qORDhsV0xbldGmTtXcIi8iqfctXINTS21FQwvr1YgaxhDaaLs1fi/jTM+J7Xg8Z5nrKsX+tY4c5y6Y22+llFr5J1qqLdw5YGnLjGko7S+yFT4mO9jWGsyW/KbIYaosXIEBq1nRChe5enWtHmEiAWJJJjVSnvVtYvPf6fcWQaRC5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NMKyue3rVLB+4UjmMTdEAnKFp4zHirYMvtE3wO+xy6A=; b=bw7qwFsFeziZMBlTAcbOjJ0vz138TaAKDGXomctHhNLtwSSWa/e0UKZaBA7qXSXhf51XD5VXNlebD5hf2Z8dP3ZtoIdaNqiq9kReg/HWdj0Q2VAzAyd0Gs5emGkIxC+SICuoOqIB+PW9BgdmwXoSIevz+gRnRBLuHCwNby7T5JPRM3I3ozK5DwCvcd2Z2QkQptk9vjejs0JqDMNpRZI3h902P4+/IGf0robeNuRsD1a03k7qyMUCILmYY0uoa8o9n8zG2WcKt30NL1l4s60T6EpuZP3oRgvVezj0yhLrW3Tdziw9IifFndDUD+ObLyj+b4jHR1agNic99BczZVFxOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NMKyue3rVLB+4UjmMTdEAnKFp4zHirYMvtE3wO+xy6A=; b=XfUyAoliNNN/bZb5yczrUqnMZFtxh/nGDHGL281nMGfxeejA4RNxE48dgXXzJ7QiGIkKwgpOM6PqK7h69RPq/oH6gpzGmvCvflctDJqEmBbkWgX5WmI+Ofqz+hsSaZvkT3grTYKK/hq3UyOf6RVcwU5rj/zbhv2JkDx7VFoXnJI= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DB9PR08MB7179.eurprd08.prod.outlook.com (2603:10a6:10:2cc::19) by AS8PR08MB6261.eurprd08.prod.outlook.com (2603:10a6:20b:295::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.21; Tue, 21 Feb 2023 09:28:21 +0000 Received: from DB9PR08MB7179.eurprd08.prod.outlook.com ([fe80::29ca:64bc:9a10:b072]) by DB9PR08MB7179.eurprd08.prod.outlook.com ([fe80::29ca:64bc:9a10:b072%7]) with mapi id 15.20.6111.021; Tue, 21 Feb 2023 09:28:20 +0000 Date: Tue, 21 Feb 2023 09:28:00 +0000 From: Szabolcs Nagy To: Adhemerval Zanella Cc: libc-alpha@sourceware.org, Richard Henderson , Jeff Law , Xi Ruoyao , Noah Goldstein Subject: Re: [PATCH v12 08/31] string: Improve generic strncmp Message-ID: References: <20230202181149.2181553-1-adhemerval.zanella@linaro.org> <20230202181149.2181553-9-adhemerval.zanella@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20230202181149.2181553-9-adhemerval.zanella@linaro.org> X-ClientProxiedBy: SN7PR04CA0060.namprd04.prod.outlook.com (2603:10b6:806:120::35) To DB9PR08MB7179.eurprd08.prod.outlook.com (2603:10a6:10:2cc::19) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB9PR08MB7179:EE_|AS8PR08MB6261:EE_|AM7EUR03FT010:EE_|GV1PR08MB7348:EE_ X-MS-Office365-Filtering-Correlation-Id: 08aeabd6-7252-4f4d-c02a-08db13ee01f9 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: 4HH9kyi+xSMqP7Z2SuAF3Y3hq+NTz263ElfqLUTA+BUrLc5MKvv6TVtLGvrlnfTm4jnHCLnCIFNCmF+2yb94+TA1LAfYATf4NyXLuFB5u8KgpEOIsLnrXtT4i7rxhitscvRL4sLPGgROJM1L3nBdOfC+cV9iLCXhXZNmcZD5W/H04sdRKUVpLbrirNt+LWx+CvUfXccytI4W0AhC+jAnFxd2iIvYer6MfI4xNc8nbu49ok7vjT6z1G4e4REK9GuWatk7NCE/J32pNl4d7n01Elxrw5eRba2kTYPErAonSMX3HGrvuefNZ8sBYQ6n7QwjWanWZgGj7bZQUrtnPopGUfGZWyAYmPu/fsBsdiz0iRANX2Ewwzrgmu0ZKf/bhMhxY5D2vW8pBPFzKcZ56B3UpzznkMNhKJLynBmwRqEK1NAdoOxmNFmCReGh5IlUQxpJ+Q+0LrSu2oaPV7ZSbAWIoxbBb6QuEkBCyvGUJKYbzXEleVRfJPR0EFP0LEvBgkx0+ogprI1cdzW7L7UrKrGTWGxb3o2N56EmVgIBNzw9axKrozdtsVH00ZJEoqcaRVGatU146LSfJGaKHeCU8I8MCeLC80xUTWwp+qQ539tyNAvt6LcEQ4jFpTZX568FwBYfN4dL3Ay87N9gQ4gRklUOnmxn7MlF8jz+Wtyg0RO/tVM1mn4l4ltuvE8cvLSoACZThnifYfxZqaIbYI8tDfOGtvo+Dbo76aq2vpsLRj4n8+I+OpXFucCZ5YKuvoD2Q5wI X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB7179.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(136003)(366004)(39860400002)(346002)(396003)(376002)(451199018)(36756003)(86362001)(44832011)(5660300002)(41300700001)(2906002)(8936002)(38100700002)(478600001)(8676002)(66476007)(6916009)(66556008)(54906003)(66946007)(6486002)(6512007)(26005)(186003)(2616005)(6506007)(4326008)(316002)(6666004)(41533002)(17423001)(156123004);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6261 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT010.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 274b9de7-13bd-4e7b-dea0-08db13edf888 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MyKq+/FLyKXwfOHq/VQCK19In+l31yDcqASQUZC4/3uVG0u6q5snOGZVmbynS3J3j93ZFUWYEi8bwiYX6N6Y/BbU6aJKlbKY4JD03IJUlLl4zvKtVswBavUBroQxxevVzkOyqRI2AjfM7lp9t0QCxetgzji02G+xvbkt3iYwol3+EWG0mIzdUNCrqUSbmdtFIAEd48JYxEs55r87cI/zl1PVvr14OVwJ3YoeN96W4B9ovEle+cwcRzuzdiqGvhSpuKczf1SzJaYB6kAARxMJOs7qwaDCUhIh6Xocz7f7v0JGkUThsp4sC+qwVzXdXj/VqcOqilFTQ1OTQmYhFse4CXs3JFBafHi3WJu32ds0j744nMx6PwX93n/UhYlDOeBMaRwzfVDU3IupEG6cg1wFGFJKU1wNoxHxpIoQt+e03LIKuL9mioL9/TI1e6Ewgdg3w3zYA9L04Q8JwEvqL4ncviHQhzkAhq8XQWtofU5NrsuG/yuForY3lyPbB/vfhlhcCJ1Thbzo/1Bm+O6Q9A1bQUV8DmmRdXieA0G7246RX+vBRmLYSKdyGcpe6qtsB5yuSnvBOTm78X/Ol3NSaDpg1lU7VmZ05MY67UZboTUxhMERbCmQhcYtFi7aMJhentXXBbXEsN9iarN5GjRVBy8EP+vY+kU6CzSDytdDWNvgrI/1CWkYrbwy4NxFElYddlCnC+jo4m8511sV9lF2WD51gVvfH1X9B+1XYbtrf5PLiZ9Qfhwbzvev+xPGS5Ulq1SpO+IwJ+k8PxQUfx5/E5JF/A== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(346002)(376002)(396003)(136003)(451199018)(40470700004)(36840700001)(46966006)(47076005)(8936002)(44832011)(41300700001)(5660300002)(8676002)(316002)(54906003)(70586007)(4326008)(82310400005)(2906002)(36756003)(86362001)(40460700003)(6862004)(40480700001)(70206006)(6512007)(6506007)(356005)(6666004)(26005)(186003)(107886003)(2616005)(6486002)(336012)(81166007)(478600001)(36860700001)(82740400003)(41533002)(17423001)(156123004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Feb 2023 09:28:35.8721 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 08aeabd6-7252-4f4d-c02a-08db13ee01f9 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT010.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB7348 X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: The 02/02/2023 15:11, Adhemerval Zanella via Libc-alpha wrote: > It follows the strategy: > > - Align the first input to word boundary using byte operations. > > - If second input is also word aligned, read a word per time, check > for null (using has_zero), and check final words using byte > operation. > > - If second input is not word aligned, loop by aligning the source, > and merge the result of two reads. Similar to aligned case, check > for null with has_zero, and check final words using byte operation. > > Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64-linux-gnu, > and powerpc-linux-gnu by removing the arch-specific assembly > implementation and disabling multi-arch (it covers both LE and BE > for 64 and 32 bits). on arm i see FAIL: crypt/badsalttest Program received signal SIGSEGV, Segmentation fault. strncmp_unaligned_loop (n=3, ofs=, w1=2371876, x2=0xf7feb000, x1=0xf7f6563c) at strncmp.c:85 85 w2b = *x2++; this strncmp does out of bounds read: Breakpoint 2, __GI_strncmp (p1=0xf7f65638 "$1$", p2=p2@entry=0xf7feafff "*", n=n@entry=3) at strncmp.c:115 0xf7feb000 is mapped PROT_NONE. > +strncmp_unaligned_loop (const op_t *x1, const op_t *x2, op_t w1, uintptr_t ofs, > + size_t n) > +{ > + op_t w2a = *x2++; > + uintptr_t sh_1 = ofs * CHAR_BIT; > + uintptr_t sh_2 = sizeof(op_t) * CHAR_BIT - sh_1; > + > + op_t w2 = MERGE (w2a, sh_1, (op_t)-1, sh_2); > + if (!has_zero (w2) && n > (sizeof (op_t) - ofs)) > { > - c1 = (unsigned char) *s1++; > - c2 = (unsigned char) *s2++; > - if (c1 == '\0' || c1 != c2) > - return c1 - c2; > - n--; > + op_t w2b; > + > + /* Unaligned loop. The invariant is that W2B, which is "ahead" of W1, > + does not contain end-of-string. Therefore it is safe (and necessary) > + to read another word from each while we do not have a difference. */ > + while (1) > + { > + w2b = *x2++; ^^^^^^^^^^^^^^^^^^^^^^ reading ahead is wrong if w1 and w2 already mismatches. > + w2 = MERGE (w2a, sh_1, w2b, sh_2); > + if (n <= sizeof (op_t) || w1 != w2) > + return final_cmp (w1, w2, n); > + n -= sizeof(op_t); > + if (has_zero (w2b) || n <= (sizeof (op_t) - ofs)) > + break; > + w1 = *x1++; > + w2a = w2b; > + } > + > + /* Zero found in the second partial of P2. If we had EOS in the aligned > + word, we have equality. */ > + if (has_zero (w1)) > + return 0; > + > + /* Load the final word of P1 and align the final partial of P2. */ > + w1 = *x1++; > + w2 = MERGE (w2b, sh_1, 0, sh_2); > } > > - return c1 - c2; > + return final_cmp (w1, w2, n);