From nobody Sun Sep 10 12:59:16 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Rk90P0c2pz4s6RK; Sun, 10 Sep 2023 12:59:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Rk90N6kWjz3FHh; Sun, 10 Sep 2023 12:59:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694350757; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=giqbapB2RqNFddha9MhFYfZNPQJ4zjCpYFO1+Mjdlgk=; b=WCTibTBRDcW7Y3FPzqcLAU0KQ4leV89m2bV9d3cbmweuYT5YbnlN2W8O6ONP2JR9czsntL 3QwFKUpe98Bnw7Gp0MAUP5u0IKg1ibtJGLSYT6ClyfHmWpHdXYuLszKOK3eLAIPwXT0jpE gN6MnUI+niL2yMgS4G95W212wbVMM/tKXi0NXEXKYG/0RL2SfWvfeuANslIYEe9akTbn51 Io6bVmbn/2D9N3qBQacJwYrmNFWrXbI4rGfyDPpUX3tAW5XSyOIy7kVW3DQg5UlrFYCpwN R/ejA++shp9iQuQ9c0o3veo3Mu2B2gXlN/XSJKCznEWwDHWHGSumzhLQjqJWvQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1694350757; a=rsa-sha256; cv=none; b=DEAV91y1Gq+6313HyLblwWgn17fKKnLVCyHViQb7WKNvE+J3aNgu9Q5c01MhBr9qEF1ZHH Ue77/1SMCRzac2dqtC1zlh53GB8HfxoPVhHzPRbwI8BP07V5LHGDSKx3WxUcXHKoziF+cU PqdtA4YbAjEb4H+ELbA06DL3Clza3GFwUSVZMR6Sy8ST4uwFSXGlyX0CsR1Mftvb3dmRyz 0kEgF10Wqv1eZ5N4xb8BbrLScFSau99UF+yhqsSSk62Uwd8MoZ3UAfaGaWaGbXLrf4xFlK mvZ2bjoQq6Y32Y47Z411hWntvgRs/laUe4t9S1PW+rlkjRvpAprs2PVytIkWNQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694350757; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=giqbapB2RqNFddha9MhFYfZNPQJ4zjCpYFO1+Mjdlgk=; b=ZqI4Qlpxws87hp91iKTBOaQk2H+TVMF9hNC1b2b1/8tZ1Qyhle6Vk/3Vm7VsyLtj1y1uYK Hfjcn6sLtYCvNDUAtoDYNz2FKio/OQ/GTbofCTysWXzaNAYe2JWJJho/vhOOGnwZJ+A+CJ zYSoeeXba8WqSlV3l9S5nTgN27M5k9BDCNZJgwl/eLSbfJiBp3utKrTap3s9oXvx/ahcT3 yOUD86D3kNM43NtwfTQPz381Wf0C0iaUxC/vSD19rSkjG2LYRpghxG40x7OXrJk31Q2/iQ EC+b/rjjjE1J7UNWUR+/NqWz9eplvDnoEhH61nDN9V1ii9G8QJbC1Lhs1zaqsw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Rk90N5SgCz16bZ; Sun, 10 Sep 2023 12:59:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38ACxGLD090167; Sun, 10 Sep 2023 12:59:16 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38ACxGYQ090164; Sun, 10 Sep 2023 12:59:16 GMT (envelope-from git) Date: Sun, 10 Sep 2023 12:59:16 GMT Message-Id: <202309101259.38ACxGYQ090164@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Robert Clausecker Subject: git: b2618b651b28 - main - lib/libc/amd64/string/memchr.S: fix behaviour with overly long buffers List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: fuz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b2618b651b28fd29e62a4e285f5be09ea30a85d4 Auto-Submitted: auto-generated The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=b2618b651b28fd29e62a4e285f5be09ea30a85d4 commit b2618b651b28fd29e62a4e285f5be09ea30a85d4 Author: Robert Clausecker AuthorDate: 2023-09-10 04:11:07 +0000 Commit: Robert Clausecker CommitDate: 2023-09-10 12:52:59 +0000 lib/libc/amd64/string/memchr.S: fix behaviour with overly long buffers When memchr(buf, c, len) is called with a phony len (say, SIZE_MAX), buf + len overflows and we have buf + len < buf. This confuses the implementation and makes it return incorrect results. Neverthless we must support this case as memchr() is guaranteed to work even with phony buffer lengths, as long as a match is found before the buffer actually ends. Sponsored by: The FreeBSD Foundation Reported by: yuri, des Tested by: des Approved by: mjg (blanket, via IRC) MFC after: 1 week MFC to: stable/14 PR: 273652 --- lib/libc/amd64/string/memchr.S | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/libc/amd64/string/memchr.S b/lib/libc/amd64/string/memchr.S index e10bd6c22f90..cfab9b1302de 100644 --- a/lib/libc/amd64/string/memchr.S +++ b/lib/libc/amd64/string/memchr.S @@ -44,7 +44,9 @@ ARCHENTRY(__memchr, scalar) je .Lnomatch lea (, %rdi, 8), %ecx - add %rdi, %rdx # pointer to end of buffer + mov $-1, %rax + add %rdi, %rdx # pointer to end of buffer or to end of + cmovc %rax, %rdx # address space (whichever comes first) and $~7, %rdi # align to 8 bytes mov (%rdi), %rax # load first word movzbl %sil, %esi # clear stray high bits @@ -118,14 +120,15 @@ ARCHENTRY(__memchr, baseline) movd %esi, %xmm2 mov %edi, %ecx - add %rdi, %rdx # pointer to end of buffer + mov $-1, %r9 + add %rdi, %rdx # pointer to end of buffer or to end of + cmovc %r9, %rdx # address space (whichever comes first) and $~0x1f, %rdi # align to 32 bytes movdqa (%rdi), %xmm0 # load first 32 bytes movdqa 16(%rdi), %xmm1 punpcklbw %xmm2, %xmm2 # c -> cc - mov $-1, %r9d shl %cl, %r9d # mask with zeroes before the string punpcklwd %xmm2, %xmm2 # cc -> cccc