From owner-dev-commits-src-main@freebsd.org Tue Apr 13 21:42:41 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0BA055ED54F; Tue, 13 Apr 2021 21:42:41 +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 4FKfGS4kDQz3Ptx; Tue, 13 Apr 2021 21:42:40 +0000 (UTC) (envelope-from git@FreeBSD.org) 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 EB24A11EE5; Tue, 13 Apr 2021 21:42:39 +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 13DLgdjX099254; Tue, 13 Apr 2021 21:42:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 13DLgdSu099253; Tue, 13 Apr 2021 21:42:39 GMT (envelope-from git) Date: Tue, 13 Apr 2021 21:42:39 GMT Message-Id: <202104132142.13DLgdSu099253@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: f1c3adefd95d - main - execve: Mark exec argument buffers 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: f1c3adefd95d35115bd4597293e0b904ae401245 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Apr 2021 21:42:41 -0000 The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=f1c3adefd95d35115bd4597293e0b904ae401245 commit f1c3adefd95d35115bd4597293e0b904ae401245 Author: Mark Johnston AuthorDate: 2021-04-13 21:40:19 +0000 Commit: Mark Johnston CommitDate: 2021-04-13 21:42:21 +0000 execve: Mark exec argument buffers We cache mapped execve argument buffers to avoid the overhead of TLB shootdowns. Mark them invalid when they are freed to the cache. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D29460 --- sys/kern/kern_exec.c | 5 +++++ sys/kern/subr_asan.c | 2 ++ sys/sys/asan.h | 1 + 3 files changed, 8 insertions(+) diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 3de6ac565db5..22a050019ce0 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -1328,6 +1329,8 @@ exec_alloc_args_kva(void **cookie) SLIST_REMOVE_HEAD(&exec_args_kva_freelist, next); mtx_unlock(&exec_args_kva_mtx); } + kasan_mark((void *)argkva->addr, exec_map_entry_size, + exec_map_entry_size, 0); *(struct exec_args_kva **)cookie = argkva; return (argkva->addr); } @@ -1338,6 +1341,8 @@ exec_release_args_kva(struct exec_args_kva *argkva, u_int gen) vm_offset_t base; base = argkva->addr; + kasan_mark((void *)argkva->addr, 0, exec_map_entry_size, + KASAN_EXEC_ARGS_FREED); if (argkva->gen != gen) { (void)vm_map_madvise(exec_map, base, base + exec_map_entry_size, MADV_FREE); diff --git a/sys/kern/subr_asan.c b/sys/kern/subr_asan.c index 842370ad1e63..d0478899e8c7 100644 --- a/sys/kern/subr_asan.c +++ b/sys/kern/subr_asan.c @@ -153,6 +153,8 @@ kasan_code_name(uint8_t code) return "UMAUseAfterFree"; case KASAN_KSTACK_FREED: return "KernelStack"; + case KASAN_EXEC_ARGS_FREED: + return "ExecKVA"; case 1 ... 7: return "RedZonePartial"; case KASAN_STACK_LEFT: diff --git a/sys/sys/asan.h b/sys/sys/asan.h index a8e07b765028..c86202222c72 100644 --- a/sys/sys/asan.h +++ b/sys/sys/asan.h @@ -53,6 +53,7 @@ #define KASAN_KMEM_REDZONE 0xFC #define KASAN_UMA_FREED 0xFD #define KASAN_KSTACK_FREED 0xFE +#define KASAN_EXEC_ARGS_FREED 0xFF void kasan_init(void); void kasan_shadow_map(void *, size_t);