From nobody Sat Nov 11 00:40:48 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 4SRxgh66Jwz501XW; Sat, 11 Nov 2023 00:40:48 +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 4SRxgh5XGyz4H1J; Sat, 11 Nov 2023 00:40:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1699663248; 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=XjZfYK9cC6Mqrj/oGt+W8ESb366hVXzj1jpo2DV87lo=; b=cGxm3F8ZV9QIA8GSQNPsY9bkohyAFTPt9Frox7248NrP0MSRtj5Pz2lmsWBziQqFzf+T4D HQSpLa1RKK75nZ3Rqllrq5CvtysFxXGVQvi0i13nbScg0Yd0QiIqv04z37xFLqUB/leOYc KfZkrcbmHjlMT9IkJoWFhnLgVrUU+c5zRIyj1KJhAmGHFCuHe4bFywG8ac3OrRX0/ch45p 6ac+cJQs+ASGsbluYDapCPrd+OqNbajYo5OcuAvBmvRfgvF33i9OeZ2KH8xFlFksyv+yUU /kV7uLvRdRnsjzs/wwmQxmJK+/PNx1ps+eLF9s2py3C5RvLkXiX3oq9sQsHkxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1699663248; 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=XjZfYK9cC6Mqrj/oGt+W8ESb366hVXzj1jpo2DV87lo=; b=GM4zl4zQQYjNn10Sgzl0ysqXjx/GqeOY2q67fGwmKs9xNgdhd+Vue4B1pAT9+LpGiE9vnp qjzav2BAkNQRSsFGoSeXSlPH+Lg3w1Hh8X93MsJWvzUFKfBcPyOVzbH2E5iWCA03q2VAxw GhjaOzz36V32AejAZBe71dGzlEBtASCZMymv4u0iIliiBp9XE68h9zdziEt4knCF5d0Yic dncSGf6Njc6rUlai9AteAV+Lw1Pylf8lCG7KLU7MAd4FJkWIyL62Cnx3M610ayrJ9o3YsW RLRpGjPtlSHkwmNK5u89eewyVEpGXRhsn8PZ0yy/qnOGMTTE71xy5AGBvLWBnA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1699663248; a=rsa-sha256; cv=none; b=rCtNYKPy1b+l/WnNUyJ3N0yJNPpYuV2nLJcG7AxaiCXgmbItU2dyylVu0kFMhXM9E7RlgB zDOE7noV9B9xEpQsJmBjRcXcziBhOGy6s3R5bKtlmef9bN2pBXk/eBKSWxbFXzjd+bON5E sKDn/yL/Mf4wwuLq36Y5wIikeoJiiuUtHNFDbe1HPxTDytrQF+VoQxNJm0Yj1HdTZeQbz/ LjSxHFXSrqlRIfQ/yPy1IPts8TfqYwX6SSydks0FtWl08qbdFG0fSU0BDbejSmqrhZpLlF sNlFT9huHdzvx8Cfca5grJJhXsMbYFq6IiPVR2J9kOPw3hZ9QF8xg7kVjAKcNw== 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 4SRxgh4ZvZz564; Sat, 11 Nov 2023 00:40:48 +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 3AB0emUa078828; Sat, 11 Nov 2023 00:40:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3AB0emjk078825; Sat, 11 Nov 2023 00:40:48 GMT (envelope-from git) Date: Sat, 11 Nov 2023 00:40:48 GMT Message-Id: <202311110040.3AB0emjk078825@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 9e1efa0f8835 - stable/13 - arm64: improve UVA layout for 32bit processes 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 9e1efa0f88356747d88e310209e57ba8f689fa4e Auto-Submitted: auto-generated The branch stable/13 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=9e1efa0f88356747d88e310209e57ba8f689fa4e commit 9e1efa0f88356747d88e310209e57ba8f689fa4e Author: Konstantin Belousov AuthorDate: 2023-10-25 01:03:09 +0000 Commit: Konstantin Belousov CommitDate: 2023-11-11 00:40:25 +0000 arm64: improve UVA layout for 32bit processes PR: 274705 (cherry picked from commit 967022aa5aa60a18764a668ae0fb78e39e16fa8e) --- sys/arm64/arm64/elf32_machdep.c | 54 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/sys/arm64/arm64/elf32_machdep.c b/sys/arm64/arm64/elf32_machdep.c index c59571808cd3..3668d2a3c444 100644 --- a/sys/arm64/arm64/elf32_machdep.c +++ b/sys/arm64/arm64/elf32_machdep.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -60,6 +61,9 @@ #define FREEBSD32_MAXUSER ((1ul << 32) - PAGE_SIZE) #define FREEBSD32_SHAREDPAGE (FREEBSD32_MAXUSER - PAGE_SIZE) #define FREEBSD32_USRSTACK FREEBSD32_SHAREDPAGE +#define AARCH32_MAXDSIZ (512 * 1024 *n1024) +#define AARCH32_MAXSSIZ (64 * 1024 * 1024) +#define AARCH32_MAXVMEM 0 extern const char *freebsd32_syscallnames[]; @@ -73,12 +77,26 @@ static void freebsd32_set_syscall_retval(struct thread *, int); static boolean_t elf32_arm_abi_supported(struct image_params *, int32_t *, uint32_t *); +static void elf32_fixlimit(struct rlimit *rl, int which); extern void freebsd32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask); u_long __read_frequently elf32_hwcap; u_long __read_frequently elf32_hwcap2; +static SYSCTL_NODE(_compat, OID_AUTO, aarch32, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, + "aarch32 mode"); + +static u_long aarch32_maxdsiz = AARCH32_MAXDSIZ; +SYSCTL_ULONG(_compat_aarch32, OID_AUTO, maxdsiz, CTLFLAG_RWTUN, + &aarch32_maxdsiz, 0, ""); +u_long aarch32_maxssiz = AARCH32_MAXSSIZ; +SYSCTL_ULONG(_compat_aarch32, OID_AUTO, maxssiz, CTLFLAG_RWTUN, + &aarch32_maxssiz, 0, ""); +static u_long aarch32_maxvmem = AARCH32_MAXVMEM; +SYSCTL_ULONG(_compat_aarch32, OID_AUTO, maxvmem, CTLFLAG_RWTUN, + &aarch32_maxvmem, 0, ""); + static struct sysentvec elf32_freebsd_sysvec = { .sv_size = SYS_MAXSYSCALL, .sv_table = freebsd32_sysent, @@ -102,8 +120,8 @@ static struct sysentvec elf32_freebsd_sysvec = { .sv_copyout_auxargs = elf32_freebsd_copyout_auxargs, .sv_copyout_strings = freebsd32_copyout_strings, .sv_setregs = freebsd32_setregs, - .sv_fixlimit = NULL, // XXX - .sv_maxssiz = NULL, + .sv_fixlimit = elf32_fixlimit, + .sv_maxssiz = &aarch32_maxssiz, .sv_flags = SV_ABI_FREEBSD | SV_ILP32 | SV_SHP | SV_TIMEKEEP | SV_RNG_SEED_VER | SV_SIGSYS, .sv_set_syscall_retval = freebsd32_set_syscall_retval, @@ -283,3 +301,35 @@ void elf32_dump_thread(struct thread *td, void *dst, size_t *off) { } + +static void +elf32_fixlimit(struct rlimit *rl, int which) +{ + + switch (which) { + case RLIMIT_DATA: + if (aarch32_maxdsiz != 0) { + if (rl->rlim_cur > aarch32_maxdsiz) + rl->rlim_cur = aarch32_maxdsiz; + if (rl->rlim_max > aarch32_maxdsiz) + rl->rlim_max = aarch32_maxdsiz; + } + break; + case RLIMIT_STACK: + if (aarch32_maxssiz != 0) { + if (rl->rlim_cur > aarch32_maxssiz) + rl->rlim_cur = aarch32_maxssiz; + if (rl->rlim_max > aarch32_maxssiz) + rl->rlim_max = aarch32_maxssiz; + } + break; + case RLIMIT_VMEM: + if (aarch32_maxvmem != 0) { + if (rl->rlim_cur > aarch32_maxvmem) + rl->rlim_cur = aarch32_maxvmem; + if (rl->rlim_max > aarch32_maxvmem) + rl->rlim_max = aarch32_maxvmem; + } + break; + } +}