From nobody Wed Jul 1 11:49:36 2026 X-Original-To: dev-commits-src-main@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 4gqywx0q1Qz6k8ls for ; Wed, 01 Jul 2026 11:49:37 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gqyww644cz3v1P for ; Wed, 01 Jul 2026 11:49:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782906576; 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=sFZyTjBkiSh59PsOEp6IPjAbZyTLadFxfFxa4Ie+Za0=; b=ddsGZCncGfvserU+T8gbEBfvddgBdHkiAtgdrHw2NT5TOXKJW/6TYXgyjg8aDjBVbkxaQq q1+IXFya37+82DbpnC4yB8c29CfpGy5VWdnYCSL0wE+Vu2+SgNw9Aan0Tw1SO36ABh1FxD 1Nz4O66wNIHpOssTfXJtTCDMlZ1g3Ryzdx/rdK/hBQ80kq7OE7jFjE2grniK+Rm/gW8+pq KCm5iPTmKXOJG0Rhv4vpbTgPdVHwyGBiD0jAvQBgxf4FC5YaUj/IHFvtNoeX8GpUBN9H6Y 6hJKsJWZXLxVx44PIVo0DOyyW71MfFpKA89HVS5g56Fr1CF0GRx3dewGgsMHZQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782906576; a=rsa-sha256; cv=none; b=pbNrfUim3ilDfyRvxfKOp72T5Q5VpKtV6XBMgV0pu2F0V7jiu/4XntYjQrs32iICiWILG0 Oi+g44VjjFQeoALMWpSWYb2qhrp19e9qQcPNNFyzSmfVpogFJd7o3lQT5+Gt8LQfBFAhcP /bkTjX18HxGW/haqQAacpY6rGKqusNvl+Jgbi1T/5ocy0O9ixJlep6+2SwiiKGHj0Xcmtt OySrjO8sjkQchuKNV3FIoE8+Vyhxc3EMGxdDJLI7msNbqNngEF0hpp2Z+Zbj/KKoEAaoeZ NJiRDvCg0MyWY8JmdFOQryoEU23qm+ZRpYR8ZzSbCUS3Ch1ZeCaU4Vl/CaEp/A== 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=1782906576; 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=sFZyTjBkiSh59PsOEp6IPjAbZyTLadFxfFxa4Ie+Za0=; b=Rd9H1ueVGzr4dMRo1QHNLvRpLLVCqgiea7CY8lhV+8c+tkDsAa0nP5rL8BPM2kt5lcjl5i I9XyAQHaaNBro37W0jDwWGcgUTomh91k4SrjBgHicN9pGcS2WgtNKCKhVp3Uk9VfFMCiCf WHMXIqTtujHWdhhvhzInE4mZ5pVZqVg14BcDPtbR1ZEbkksY16NdXrXpP/dLRvGi/h8RqM 8Lf5zLfH+hPzVD8brNhGcawtGLE9n5XUQlzhLWRqQO8q8u8/spNXVJUyGygZfx32TLpob5 bSZIMwk41K9hSVcl1UDkf0yZpcrctNAo+4qWVe6I4QH6T3BlwICtFKTwQ+nMAA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gqyww4pF2z1Rln for ; Wed, 01 Jul 2026 11:49:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1873e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Jul 2026 11:49:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Brooks Davis Subject: git: 17602eb3eae9 - main - CHERI: make mem{cpy,move}(9) CHERI compatible List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: brooks X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 17602eb3eae95a53c973a5ceb4fc3134a770e8d6 Auto-Submitted: auto-generated Date: Wed, 01 Jul 2026 11:49:36 +0000 Message-Id: <6a44fed0.1873e.696ad06@gitrepo.freebsd.org> The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=17602eb3eae95a53c973a5ceb4fc3134a770e8d6 commit 17602eb3eae95a53c973a5ceb4fc3134a770e8d6 Author: Brooks Davis AuthorDate: 2026-07-01 11:46:55 +0000 Commit: Brooks Davis CommitDate: 2026-07-01 11:49:10 +0000 CHERI: make mem{cpy,move}(9) CHERI compatible - Use intptr_t in place of long as the word type in the core copying loop where aligned words a copied. This preserved the provenance of any copied pointers. - When working with the address of src or dst use ptraddr_t rather than uintptr_t. This avoid ambigious provenance in expressions involving multiple addresses. As a minor tweak, rename the function to memmove since that is the interface it implements (overlapping src and dst are permitted) and make memcpy the alias rather than the other way around. Reviewed by: kib, markj Effort: CHERI upstreaming Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D57965 --- sys/libkern/bcopy.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/sys/libkern/bcopy.c b/sys/libkern/bcopy.c index 8df260809a02..be26443ef884 100644 --- a/sys/libkern/bcopy.c +++ b/sys/libkern/bcopy.c @@ -35,7 +35,9 @@ #include #ifdef _KERNEL #include +#include #else +#include #include #endif @@ -46,7 +48,7 @@ * sizeof(word) MUST BE A POWER OF TWO * SO THAT wmask BELOW IS ALL ONES */ -typedef long word; /* "word" used for optimal copy speed */ +typedef intptr_t word; /* "word" used for optimal copy speed */ #define wsize sizeof(word) #define wmask (wsize - 1) @@ -57,7 +59,7 @@ typedef long word; /* "word" used for optimal copy speed */ * (the portable versions of) bcopy, memcpy, and memmove. */ void * -memcpy(void *dst0, const void *src0, size_t length) +memmove(void *dst0, const void *src0, size_t length) { char *dst; const char *src; @@ -76,18 +78,18 @@ memcpy(void *dst0, const void *src0, size_t length) #define TLOOP(s) if (t) TLOOP1(s) #define TLOOP1(s) do { s; } while (--t) - if ((unsigned long)dst < (unsigned long)src) { + if ((ptraddr_t)dst < (ptraddr_t)src) { /* * Copy forward. */ t = (size_t)src; /* only need low bits */ - if ((t | (uintptr_t)dst) & wmask) { + if ((t | (ptraddr_t)dst) & wmask) { /* * Try to align operands. This cannot be done * unless the low bits match. */ - if ((t ^ (uintptr_t)dst) & wmask || length < wsize) { + if ((t ^ (ptraddr_t)dst) & wmask || length < wsize) { t = length; } else { t = wsize - (t & wmask); @@ -112,10 +114,10 @@ memcpy(void *dst0, const void *src0, size_t length) */ src += length; dst += length; - t = (uintptr_t)src; + t = (size_t)src; - if ((t | (uintptr_t)dst) & wmask) { - if ((t ^ (uintptr_t)dst) & wmask || length <= wsize) { + if ((t | (ptraddr_t)dst) & wmask) { + if ((t ^ (ptraddr_t)dst) & wmask || length <= wsize) { t = length; } else { t &= wmask; @@ -134,4 +136,4 @@ done: return (dst0); } -__strong_reference(memcpy, memmove); +__strong_reference(memmove, memcpy);