From nobody Mon Jun 20 17:00:28 2022 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 43C1487765C; Mon, 20 Jun 2022 17:00:29 +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 4LRbW10p9jz3DRP; Mon, 20 Jun 2022 17:00:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655744429; 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=0HYkcFzYA8xRS+86caY02X+KliGfcacaCJq1F/qsjPc=; b=p8MLfWlSGu8eh+yHBGRLKc3f9eXjX95nBikMc5uU7zC2As6MeiVvzjmCt3pmVh1jaG6S7e 9f4IDvOBwdictNzcKQdpsNw+C2GqeSdXOiWidyg97ugkEXkkoAG1nqZgl5ZB5TG1asn/xJ lsiMlsMEe668T7yJz/4YperkmsxURaPXvUGrvweFseGybYuVKx08pXYIjLcGG/CH/3WTO1 cwmyp+B6Lb3HFTrdZAzeIgNjeByEiQCMkUL0sOCQymFYmBHEQyZVgi2k/AuLTgio08fXuq BD0jKOicmNyrtTLZgXo5noHebGvID0isHs9GeRUPxO9FWPjcKwsJMm3tZ5jWPg== 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 E79ED20EE4; Mon, 20 Jun 2022 17:00:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25KH0S9r049748; Mon, 20 Jun 2022 17:00:28 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25KH0SSm049747; Mon, 20 Jun 2022 17:00:28 GMT (envelope-from git) Date: Mon, 20 Jun 2022 17:00:28 GMT Message-Id: <202206201700.25KH0SSm049747@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 540da48d83fc - main - vm_kern: Update KMSAN shadow maps when allocating kmem memory 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: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 540da48d83fc148c1d34136da34ca8a2985a2a27 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655744429; 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=0HYkcFzYA8xRS+86caY02X+KliGfcacaCJq1F/qsjPc=; b=nV2Vecx6Mva8vG168ttWximtXK4isTcxihRQFa4qy24HNY+yqYHTSmoCdSenHR5noUW7Jr Iy0nOJ3/qxM7Kz7VrmsUGa39boe8WuWVk8HPjCGyH3CWq6nZtNy71ZM4yEMC0n4hm/YmMe ghu/GOqwzrGVFuwkraotaiwa3S3rQzfIF9KcfCffWVVI82POQAxmxg9NY15GijyxcegWjv IdniXlvGum1/FeC5YrfVnB3HK/1E/Wfv2ncoKJ7hEubR7H/UxjJtH6MBRigcnhfm46TE+8 CsbqIeHgeM3oiSbcWyvgsV6wbiwxwhAgWJhA0j71/20oliCB4YeBs8HFn5f4lw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1655744429; a=rsa-sha256; cv=none; b=L8DvgjIhj1m8YPeJwEgceMVjklJzQaPZIY51G8yVXdKs5xjAVJKrQhX1BhBsKEyAfo6KKv 0yTKKnYrrF73b50mAUP7ZheXDFLPsvkjHfyxK9YvnLxx+4s6/c+LJWR+LmqfHRPYw8ZQdP Pp61+vDl0NUe6rzk3V4OEggopWg4WksvYlXa19KYhcoVJhq8lJFMk9N7RQJYAMzdt3GLWd Vz05+FlpRyhLRW+1vkRBOO+X7XoDVceCfoQcgY1Y/dA2cGVOQEnCQXoYnc2jKwQDyavQGa boCsOrcpE9pRIuLeTlD60Y77FQR4rWKdm/37NayFyVMpOzN8RcweXeIlm1mqng== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=540da48d83fc148c1d34136da34ca8a2985a2a27 commit 540da48d83fc148c1d34136da34ca8a2985a2a27 Author: Mark Johnston AuthorDate: 2022-06-20 16:01:09 +0000 Commit: Mark Johnston CommitDate: 2022-06-20 16:48:13 +0000 vm_kern: Update KMSAN shadow maps when allocating kmem memory This addresses a couple of false positive reports for memory returned by malloc_large(). Sponsored by: The FreeBSD Foundation --- sys/vm/vm_kern.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c index 669dc194759b..ac132f8ec0f3 100644 --- a/sys/vm/vm_kern.c +++ b/sys/vm/vm_kern.c @@ -77,6 +77,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -171,6 +172,23 @@ kva_free(vm_offset_t addr, vm_size_t size) vmem_free(kernel_arena, addr, size); } +/* + * Update sanitizer shadow state to reflect a new allocation. Force inlining to + * help make KMSAN origin tracking more precise. + */ +static __always_inline void +kmem_alloc_san(vm_offset_t addr, vm_size_t size, vm_size_t asize, int flags) +{ + if ((flags & M_ZERO) == 0) { + kmsan_mark((void *)addr, asize, KMSAN_STATE_UNINIT); + kmsan_orig((void *)addr, asize, KMSAN_TYPE_KMEM, + KMSAN_RET_ADDR); + } else { + kmsan_mark((void *)addr, asize, KMSAN_STATE_INITED); + } + kasan_mark((void *)addr, size, asize, KASAN_KMEM_REDZONE); +} + static vm_page_t kmem_alloc_contig_pages(vm_object_t object, vm_pindex_t pindex, int domain, int pflags, u_long npages, vm_paddr_t low, vm_paddr_t high, @@ -249,7 +267,7 @@ kmem_alloc_attr_domain(int domain, vm_size_t size, int flags, vm_paddr_t low, prot | PMAP_ENTER_WIRED, 0); } VM_OBJECT_WUNLOCK(object); - kasan_mark((void *)addr, size, asize, KASAN_KMEM_REDZONE); + kmem_alloc_san(addr, size, asize, flags); return (addr); } @@ -332,7 +350,7 @@ kmem_alloc_contig_domain(int domain, vm_size_t size, int flags, vm_paddr_t low, tmp += PAGE_SIZE; } VM_OBJECT_WUNLOCK(object); - kasan_mark((void *)addr, size, asize, KASAN_KMEM_REDZONE); + kmem_alloc_san(addr, size, asize, flags); return (addr); } @@ -511,7 +529,7 @@ retry: m->oflags |= VPO_KMEM_EXEC; } VM_OBJECT_WUNLOCK(object); - + kmem_alloc_san(addr, size, size, flags); return (KERN_SUCCESS); }