From nobody Sat Nov 4 16:47:55 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 4SN3Sq6wlwz4yqKX; Sat, 4 Nov 2023 16:47:55 +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 4SN3Sq6L0Fz3LW3; Sat, 4 Nov 2023 16:47:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1699116475; 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=iH7ClaGC1pEVmVwO5jkTUTv3dllqTe9/VtQonP1hKHs=; b=uragS5/gtQ8E+WnkAxyVSe6WjPm5QKIQeKKFzFUnOCvd58Znkb0FoH37/ZnKPcPFLQkGne V9sGeZ6L/AXLvUV5KebKPpNYpedgbOOXwomFMR/CjfQM2tdf7jLM8c+CUdC3FvZNEZbVD2 /rj3+NjmApEiLHLlAptDf55N0bqSsZsr1C3xi6qEBLQCrvIBZ1AiYIXqsY2aJNTfIOKdzL Z+J0vsYOIBJUi1+KNsHx9qlfxqEvc/TrVYLVHEzois8BX+/hnVBbnOqJ7MkEGx6/GtXrML SED3XW2xGAG9HZMLcc6PJ2ic5qbzj2TOJ2mjLnoXHxVgbenyDVvEQWznkX3V7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1699116475; 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=iH7ClaGC1pEVmVwO5jkTUTv3dllqTe9/VtQonP1hKHs=; b=w+KtqudxngA0ONOvViOhfIWWWOv73vpZJz/jh2dajfQXUmqrDFb0O8MmIqByW85VZZlstz DqIah/yzBtjq66dUbGmSFiLvIrHtP1mFfDDxPhStlYktn53y6TTJYB40Azdp9iFWypXcix xxOk2HjWppjuvlzFntUc5byaHAQO44u023J41Kyb8wTHGdRu0z0N/HjQE2VlAhdUmF+OAQ imkkojNUbK5XEwoS146OacnTFKc4PRjy6gFGhg0MGHVD/1G6QOKb2a1IfnRRFlOpQU/pD/ jy1C0ZtGcC22rSHwONHZ7ev0wsCWeDqPXRYZ/nG3dBISTb1Acb74alhUrsgmHw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1699116475; a=rsa-sha256; cv=none; b=e+i5GslDaPHmjeZG6b0KkMXRNNPuAMyVFpnVgE85kNyHinN+CuNyHYvdjlzinQkEWU5BhK NRIpQAtWEe8x3q6qEJP9PQ3GNiWQzZ6X+PsMKYes0kwqAN18oj8I4oc8mPo5cBtVLre+bn KcDu10cbwd7wwUUoekZQYxpoT0o9ErcX2u4vN8ItuentmnIaH1gl6VGH6lZDMJItkRB9K3 R1BxBbf9fOQaaRq+xMrvkScDkwzdsS6c+W9+1Vh1dT3itTr+SpbAEDByV3bhpm5avGUvuM M4o/kr8BvMjjWuyxjUkl0bOCVtgMGOB2PGnuhEl5s6U58pWxd53YXUY92I931A== 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 4SN3Sq5PF3z153c; Sat, 4 Nov 2023 16:47:55 +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 3A4Gltqf053211; Sat, 4 Nov 2023 16:47:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3A4GltXm053208; Sat, 4 Nov 2023 16:47:55 GMT (envelope-from git) Date: Sat, 4 Nov 2023 16:47:55 GMT Message-Id: <202311041647.3A4GltXm053208@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 967022aa5aa6 - main - 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/main X-Git-Reftype: branch X-Git-Commit: 967022aa5aa60a18764a668ae0fb78e39e16fa8e Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=967022aa5aa60a18764a668ae0fb78e39e16fa8e commit 967022aa5aa60a18764a668ae0fb78e39e16fa8e Author: Konstantin Belousov AuthorDate: 2023-10-25 01:03:09 +0000 Commit: Konstantin Belousov CommitDate: 2023-11-04 16:47:50 +0000 arm64: improve UVA layout for 32bit processes Add compat.aarch32 tunables for maxssiz, maxdsiz, and maxvmem. Set the default values same as for amd64. Fix freebsd32 sysentvec on arm64 to provide sv_maxssiz, and sv_fixlimit. PR: 274705 Reviewed by: markj Tested by: fuz Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D42451 --- 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 4161f9d44ae7..733aaf40541a 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 @@ -61,6 +62,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[]; @@ -74,12 +78,26 @@ static void freebsd32_set_syscall_retval(struct thread *, int); static bool 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, @@ -284,3 +302,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; + } +}