From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619814537; cv=none; d=zohomail.com; s=zohoarc; b=csedoflRv9TQzHmRhb6vZ4FmLUVd2IOS2eipNiovohH+P6+iffxzFUinWGKCDyHZAwn9jiTD638MULjU8wszAOuINpI8tApQ+tJdQOlmrlP5jPCEkAqY2zJEsff2CTJF6Tqd8oDanTWVxBGwdbw/wfAmca7m7a/TmMjVRPlyKVg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619814537; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=iw+V37JgA+F4SsYKf28zN0ap1ybGadX/nBD4+2JYyZo=; b=A9k/H7SzJT8zZeWxjj0FSYNcANcJk9UGF5rudd/GpRaP4zP3bgRA/+wRyvxWa8KF1buiLrULmH2Gb0zmASDPESKSsIHndu3O9/ty6/dWMAvKExEcPKPJOsIljsAipUdQ9ScRFMelUoLknU6mTJvBfmEPhlvr3jkLz6fC1rbgvRE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1619814537695211.95578388529418; Fri, 30 Apr 2021 13:28:57 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235933AbhD3U3i (ORCPT ); Fri, 30 Apr 2021 16:29:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234471AbhD3U3b (ORCPT ); Fri, 30 Apr 2021 16:29:31 -0400 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 290B0C06138B for ; Fri, 30 Apr 2021 13:28:43 -0700 (PDT) Received: by mail-wm1-x32b.google.com with SMTP id n84so11300023wma.0 for ; Fri, 30 Apr 2021 13:28:43 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id p7sm3359519wrt.24.2021.04.30.13.28.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:28:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iw+V37JgA+F4SsYKf28zN0ap1ybGadX/nBD4+2JYyZo=; b=R8G/zQ0WwQGRAzVaUBGE3Mp1kmXtje3K1nEAaxUYEsSoqdsRBfbOtctF4/ymUKFbpz fx0NfcGbhtDCgEmlJXaCxA13cAoR+5wMzuKGP90Al38HvbRmZJPGG018yP+/+WEOD5ZY 43q4G6K4zSKOu1doN010oIpChV49/HpCTMzq6qVmpGX/Tc21yt5Zj2sN/18demT3gQwy kdfzt08EVxDpsJt3m/EEzBQTrbAYXjqMdRhR8YEIKKwlk3qGmtGUjeXKk7JOjKO7ul5E 1D1atm4yHnKUGsFitkXDBdGy3Q3DuP/3BUCC5i1PxGiPSrfmUJa9njamrnb38afrd3iq kmCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iw+V37JgA+F4SsYKf28zN0ap1ybGadX/nBD4+2JYyZo=; b=OCcFsx2zcv0GtxTUmUUaDXSswtDtLDmvuxlJ2TS87bUf5yV9UwKE8BOrjJyNDjOkz6 Iu1A6hrhxTZZl2aGSZ8nF0vbQOMpC9aarwrulYqAbRvdFClUsqsdk+2Eh7ox03by24Ie sf598bSCWRVznVAWPReyp+7ygLMe7GOBIe+613mzuT9k7ibwHiae28KcTZmlfKnoFOkD pWBg8ShtMhGr0Di1c6lcqDMU3NzcXgcGGYQofrU42lHUIYq36DjO7jFwjUdB8r/2E/VE ftXy6/OrGfQShhsd2jMBiO8peO3LuErY9rUjgmrOW3D/ENqSaMXxeeY9N5j4LWrN+edi tWWQ== X-Gm-Message-State: AOAM533OHvR+wTMrVmdnvjrUjg+dMWfhC4riQ1bQHpjh5EMVD5Z9CLcZ CBFmYgfXH/h6xKY9UMgLurk= X-Google-Smtp-Source: ABdhPJx2plv+lZ2c8L84PAXcEl2RtY4d/P83CJvfHH2dNR/L4jv88e5ZGbkR5TXd+I0WIYUDYwHKiw== X-Received: by 2002:a1c:228a:: with SMTP id i132mr7932536wmi.10.1619814521905; Fri, 30 Apr 2021 13:28:41 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 1/8] mm: Add arch_get_mmap_base_topdown macro Date: Fri, 30 Apr 2021 21:28:03 +0100 Message-Id: <20210430202810.44092-2-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This allows architectures to customize the mmap base to use depending on the direction of allocation. The base argument is also removed from arch_get_mmap_base[_topdown] in prepartion for future changes. arm64 is currently the only user of the arch_get_mmap_* macros and is adjusted accordingly. Specifically it only needs to limit the upper bound of VM allocations and therefore only needs to customize arch_get_mmap_base_topdown but not arch_get_mmap_base. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- arch/arm64/include/asm/processor.h | 7 ++++--- mm/mmap.c | 14 +++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/pr= ocessor.h index efc10e9041a0..f47528aae321 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -88,9 +88,10 @@ #define arch_get_mmap_end(addr) ((addr > DEFAULT_MAP_WINDOW) ? TASK_SIZE :\ DEFAULT_MAP_WINDOW) =20 -#define arch_get_mmap_base(addr, base) ((addr > DEFAULT_MAP_WINDOW) ? \ - base + TASK_SIZE - DEFAULT_MAP_WINDOW :\ - base) +#define arch_get_mmap_base_topdown(addr) \ + ((addr > DEFAULT_MAP_WINDOW) ? \ + current->mm->mmap_base + TASK_SIZE - DEFAULT_MAP_WINDOW :\ + current->mm->mmap_base) #endif /* CONFIG_ARM64_FORCE_52BIT */ =20 extern phys_addr_t arm64_dma_phys_limit; diff --git a/mm/mmap.c b/mm/mmap.c index 3f287599a7a3..4937b34085cb 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2139,11 +2139,15 @@ unsigned long vm_unmapped_area(struct vm_unmapped_a= rea_info *info) } =20 #ifndef arch_get_mmap_end -#define arch_get_mmap_end(addr) (TASK_SIZE) +#define arch_get_mmap_end(addr) (TASK_SIZE) #endif =20 #ifndef arch_get_mmap_base -#define arch_get_mmap_base(addr, base) (base) +#define arch_get_mmap_base(addr) (current->mm->mmap_base) +#endif + +#ifndef arch_get_mmap_base_topdown +#define arch_get_mmap_base_topdown(addr) (current->mm->mmap_base) #endif =20 /* Get an address range which is currently unmapped. @@ -2184,7 +2188,7 @@ arch_get_unmapped_area(struct file *filp, unsigned lo= ng addr, =20 info.flags =3D 0; info.length =3D len; - info.low_limit =3D mm->mmap_base; + info.low_limit =3D arch_get_mmap_base(addr); info.high_limit =3D mmap_end; info.align_mask =3D 0; info.align_offset =3D 0; @@ -2227,7 +2231,7 @@ arch_get_unmapped_area_topdown(struct file *filp, uns= igned long addr, info.flags =3D VM_UNMAPPED_AREA_TOPDOWN; info.length =3D len; info.low_limit =3D max(PAGE_SIZE, mmap_min_addr); - info.high_limit =3D arch_get_mmap_base(addr, mm->mmap_base); + info.high_limit =3D arch_get_mmap_base_topdown(addr); info.align_mask =3D 0; info.align_offset =3D 0; addr =3D vm_unmapped_area(&info); @@ -2241,7 +2245,7 @@ arch_get_unmapped_area_topdown(struct file *filp, uns= igned long addr, if (offset_in_page(addr)) { VM_BUG_ON(addr !=3D -ENOMEM); info.flags =3D 0; - info.low_limit =3D TASK_UNMAPPED_BASE; + info.low_limit =3D arch_get_mmap_base(addr); info.high_limit =3D mmap_end; addr =3D vm_unmapped_area(&info); } --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815092; cv=none; d=zohomail.com; s=zohoarc; b=iJE9MztysHwhFKIxah8YcKkJlmleD9uh3GzAej6kcKb4Wl/FZY0t6wEjMKs2WXA3NopG5/71LOTHht0uR7YLFtpLlIddR2nl0mt8mBM4OextSCuc1j2S2pCHc7JZthDAn4tTa2UzY3DKmeFRx8A/Lvr3yv4RNHNRFXG5wALyqng= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815092; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=DEq0/bKuKyVdL1JH6Xf7qoLNGy26OvZqXWZScmfZsZ4=; b=DuQqfuN0F5BbIsQT/mefZmVi6aFwaJe00U/+nm66K19RHB6Mpi/+c8X52O5z92/5EoP7G4H0rmIxsmmVCPFrBsKL0vNAKA+mtIGIf1VihWJqWKMg7nvUIWg1OZdVi16RWuCItT9b/MJN4AzNzqOzZEpGGBS0fVQ6/ii7lJO9hnQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 16198150929248.058623366479083; Fri, 30 Apr 2021 13:38:12 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235991AbhD3UjA (ORCPT ); Fri, 30 Apr 2021 16:39:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231325AbhD3Ui6 (ORCPT ); Fri, 30 Apr 2021 16:38:58 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8269DC06174A for ; Fri, 30 Apr 2021 13:38:09 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id m5so11725219wmf.1 for ; Fri, 30 Apr 2021 13:38:09 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DEq0/bKuKyVdL1JH6Xf7qoLNGy26OvZqXWZScmfZsZ4=; b=I0VCihY9/Yzgm/gCe6zh6hq4ak+g7rW7WwWNXOZLJwv3HS3q0LwY+uzRRU+GDnGnwU Dfsr9wtVZZqei7Pm45e5k9igK9KbjtsJIspFn5T2ktkjRepnnfZdQQvZArGDh+5HKQXD kuly2T25iQN1F5yHFGu+RFM4tsnKPROSuc5VZin4RzNXdLdRHBSTDl3kDDoHwugOuAPi 0+Y+wzZ5IEnYgFL+Ymzo8OXo+u8oHws3UDy33mRUJgyRLI+MaQkhlrqeeDJM5u1NjXNK UXlJLLFUnEW4jprVbwuej2R6LJd5nimX1Eui0/9A1XVCVB+6q/kmhmk6P8pB/etduWRJ WDZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DEq0/bKuKyVdL1JH6Xf7qoLNGy26OvZqXWZScmfZsZ4=; b=WiccS/xqaR1kNulSgk1PNB8qNmQHaP6i38MMrL7Q09diALpO1ZD1km3yUwmKb2e5vi 0NDbzfNsR6nugF0Qfms+A998PskcPGg+9YRHE5qNzASKXNLxaB0FDG83W9FUMYv9Kfvx D+Vi2ZSa5/PbeeKlSMwcFKgAXCjpvLfhHmCLj1ufAPRuQKPd5blASyC1LaBIY0AaTg8X 8c0vKMewl5DXRTymEb8uZQbfETqxDl6iJdhgbkxdL/+GZ37Xpy2dQQDsduumtOCQqQ6R u0ktS7tZy5w7cAOmdZ3JC1WfCZRSkkZpR5y+zjqaPFD4wR71o9OrmTAURtlPZ/oRudeM lDNA== X-Gm-Message-State: AOAM533Ejfua+aPlh/LlltR98JnnrmcEnT0r5oFgYilpxTU9lGoTeAzz zHA6QL2H3J/oj8Z+pfcamZU= X-Google-Smtp-Source: ABdhPJwpWgPw/hEcwnrnkgZN1FYmu83wrXI+9Z4H4NQtFJEKT9jTEWCNqWFNvppzg+i5y9ogbxbJHg== X-Received: by 2002:a7b:c156:: with SMTP id z22mr18616237wmi.86.1619815088327; Fri, 30 Apr 2021 13:38:08 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/8] hugetlbfs: Use arch_get_mmap_* macros Date: Fri, 30 Apr 2021 21:37:51 +0100 Message-Id: <20210430203757.47653-1-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" hugetlb_get_unmapped_area should obey the same arch-specific constraints as mmap when selecting an address. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- fs/hugetlbfs/inode.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 701c82c36138..526ccb524329 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -191,6 +191,18 @@ static int hugetlbfs_file_mmap(struct file *file, stru= ct vm_area_struct *vma) */ =20 #ifndef HAVE_ARCH_HUGETLB_UNMAPPED_AREA +#ifndef arch_get_mmap_end +#define arch_get_mmap_end(addr) (TASK_SIZE) +#endif + +#ifndef arch_get_mmap_base +#define arch_get_mmap_base(addr) (current->mm->mmap_base) +#endif + +#ifndef arch_get_mmap_base_topdown +#define arch_get_mmap_base_topdown(addr) (current->mm->mmap_base) +#endif + static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) @@ -200,8 +212,8 @@ hugetlb_get_unmapped_area_bottomup(struct file *file, u= nsigned long addr, =20 info.flags =3D 0; info.length =3D len; - info.low_limit =3D current->mm->mmap_base; - info.high_limit =3D TASK_SIZE; + info.low_limit =3D arch_get_mmap_base(addr); + info.high_limit =3D arch_get_mmap_end(addr); info.align_mask =3D PAGE_MASK & ~huge_page_mask(h); info.align_offset =3D 0; return vm_unmapped_area(&info); @@ -217,7 +229,7 @@ hugetlb_get_unmapped_area_topdown(struct file *file, un= signed long addr, info.flags =3D VM_UNMAPPED_AREA_TOPDOWN; info.length =3D len; info.low_limit =3D max(PAGE_SIZE, mmap_min_addr); - info.high_limit =3D current->mm->mmap_base; + info.high_limit =3D arch_get_mmap_base_topdown(addr); info.align_mask =3D PAGE_MASK & ~huge_page_mask(h); info.align_offset =3D 0; addr =3D vm_unmapped_area(&info); @@ -231,8 +243,8 @@ hugetlb_get_unmapped_area_topdown(struct file *file, un= signed long addr, if (unlikely(offset_in_page(addr))) { VM_BUG_ON(addr !=3D -ENOMEM); info.flags =3D 0; - info.low_limit =3D current->mm->mmap_base; - info.high_limit =3D TASK_SIZE; + info.low_limit =3D arch_get_mmap_base(addr); + info.high_limit =3D arch_get_mmap_end(addr); addr =3D vm_unmapped_area(&info); } =20 --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815094; cv=none; d=zohomail.com; s=zohoarc; b=bC9QZxyWNOuPSmxPSdjq/0/Jm65xgAI4YNf040ShDUExJCqVagCOv0ftxWkt3ilQOBBb2TxZYprg/9mUT3idTMx2LCHzZGiKqykflDnwoC9jgAmeITbdCwNBaQy9lOQjFh6v0Y4Wkn4OMz/Og3fKsY8wY6/DHylEC6IjBC7jTvg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815094; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=9rGi608qIyo5wwTAfm/9KSh42lmNIqRVhptkNqcqKak=; b=kL97/a4jfaSiJ05eIkCOTEN35Y6zhueTkQKh8cd0NokUNyHSvEX7FICRtPFu3arH+baOdYZnGzpm3ugQuLgoXKv3FqXjzUO1XTPWrxOR40ROWivTlbcH01U6TgmP22snxJXy2hpbVnPgJx+l0djwUGPPmWWL5euVJw62p7gGECI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1619815094800851.6075668469297; Fri, 30 Apr 2021 13:38:14 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236006AbhD3UjC (ORCPT ); Fri, 30 Apr 2021 16:39:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235988AbhD3UjA (ORCPT ); Fri, 30 Apr 2021 16:39:00 -0400 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 354E8C06174A for ; Fri, 30 Apr 2021 13:38:11 -0700 (PDT) Received: by mail-wm1-x32e.google.com with SMTP id k128so38490025wmk.4 for ; Fri, 30 Apr 2021 13:38:11 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9rGi608qIyo5wwTAfm/9KSh42lmNIqRVhptkNqcqKak=; b=CvdqY8NoDzxfaCjWuYW52uyx4VI6KnVFObEuc3VwxhMsaIB9+Yv4+tJ5vc+CKkqAqu DFkD9Wcz40fDhJ13BMexOvdyFJi/ugtuNbpRM/8SojpBgKf5T301Aj2LahPVu6h4woLr Z4SyIObMmCfvJyxIb5GJ/DCusmZsPi6dyAz06/2rJIErg6bJYwvf9+NnQbk3kd/iTePY PzvnOkdUkdlNid5s3MOumUi0p7ubnfX7B/yfi+1MBfOz8diWX973CqtmcNPRnEfws7jw tDB8391tY7H+oDnzgGjAlaDvbw55Cbo1Ci+hOxA8xaADWlH9cTu3BKhqLrlX93d0+t0Y eRjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9rGi608qIyo5wwTAfm/9KSh42lmNIqRVhptkNqcqKak=; b=hhURLD9bEXtRcVr9YUe9Gi2svBfn2K1HXnYoECzJch+ioviTH579Fo3VU/xvbhNyRg GCiHVCSn4+p1kMADErrvpTDwhO6QMjkcc+ZQOX89BXlp1s+qP25XsN1MJlC77kKXVgj5 Rh8UB8EtuEwiRNQG2BzSMYg5jMrWh+xOSd+M0B4Cggf5BIR3wudQxaWWCGRnWoUjydCn AjikbJM8/XDnmNJTNr/j3o/8pm7ch3OUudhM+DRHemLMGExvTFCjsVVDdwsK6iryWjJB 1C70EGUITfKRZBMkHEddNl4EvM1NuhEelZ3NjnMXY9OsrThkx4T2lq+44SZph5IW/5iO cqgQ== X-Gm-Message-State: AOAM533C3+mX3DsnzJTg9JLx2+x/MMXjKkgL1uMD41VGk1PnWa/0weDk 7VLrSV3y75yglv7zgjBUj1k= X-Google-Smtp-Source: ABdhPJysbnsaEfcFI4I+IvQaI7Ctl179Unq6uDAJ8B1wNG4pOThSvlUXxu5oi9Ui1o6zwCcJ8cL5Eg== X-Received: by 2002:a1c:7f4a:: with SMTP id a71mr18087171wmd.60.1619815089943; Fri, 30 Apr 2021 13:38:09 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/8] mm: Support mmap_compat_base with the generic layout Date: Fri, 30 Apr 2021 21:37:52 +0100 Message-Id: <20210430203757.47653-2-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This enables architectures using the generic mmap layout to support 32-bit mmap calls from 64-bit processes and vice-versa. Architectures using this must define separate 32-bit and 64-bit versions of STACK_TOP, TASK_UNMAPPED_BASE and STACK_RND_MASK. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- mm/util.c | 46 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/mm/util.c b/mm/util.c index 54870226cea6..37bd764174b5 100644 --- a/mm/util.c +++ b/mm/util.c @@ -353,12 +353,12 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) return randomize_page(mm->brk, SZ_1G); } =20 -unsigned long arch_mmap_rnd(void) +static unsigned long mmap_rnd(bool compat) { unsigned long rnd; =20 #ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS - if (is_compat_task()) + if (compat) rnd =3D get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1); else #endif /* CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS */ @@ -367,6 +367,11 @@ unsigned long arch_mmap_rnd(void) return rnd << PAGE_SHIFT; } =20 +unsigned long arch_mmap_rnd(void) +{ + return mmap_rnd(is_compat_task()); +} + static int mmap_is_legacy(struct rlimit *rlim_stack) { if (current->personality & ADDR_COMPAT_LAYOUT) @@ -383,16 +388,17 @@ static int mmap_is_legacy(struct rlimit *rlim_stack) * the face of randomisation. */ #define MIN_GAP (SZ_128M) -#define MAX_GAP (STACK_TOP / 6 * 5) +#define MAX_GAP (stack_top / 6 * 5) =20 -static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stac= k) +static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stac= k, + unsigned long stack_top, unsigned long stack_rnd_mask) { unsigned long gap =3D rlim_stack->rlim_cur; unsigned long pad =3D stack_guard_gap; =20 /* Account for stack randomization if necessary */ if (current->flags & PF_RANDOMIZE) - pad +=3D (STACK_RND_MASK << PAGE_SHIFT); + pad +=3D (stack_rnd_mask << PAGE_SHIFT); =20 /* Values close to RLIM_INFINITY can overflow. */ if (gap + pad > gap) @@ -403,21 +409,45 @@ static unsigned long mmap_base(unsigned long rnd, str= uct rlimit *rlim_stack) else if (gap > MAX_GAP) gap =3D MAX_GAP; =20 - return PAGE_ALIGN(STACK_TOP - gap - rnd); + return PAGE_ALIGN(stack_top - gap - rnd); } =20 void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack) { unsigned long random_factor =3D 0UL; +#ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES + unsigned long compat_random_factor =3D 0UL; +#endif =20 - if (current->flags & PF_RANDOMIZE) + if (current->flags & PF_RANDOMIZE) { +#ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES + random_factor =3D mmap_rnd(false); + compat_random_factor =3D mmap_rnd(true); +#else random_factor =3D arch_mmap_rnd(); +#endif + } =20 if (mmap_is_legacy(rlim_stack)) { +#ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES + mm->mmap_base =3D TASK_UNMAPPED_BASE_64 + random_factor; + mm->mmap_compat_base =3D + TASK_UNMAPPED_BASE_32 + compat_random_factor; +#else mm->mmap_base =3D TASK_UNMAPPED_BASE + random_factor; +#endif mm->get_unmapped_area =3D arch_get_unmapped_area; } else { - mm->mmap_base =3D mmap_base(random_factor, rlim_stack); +#ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES + mm->mmap_base =3D mmap_base(random_factor, rlim_stack, + STACK_TOP_64, STACK_RND_MASK_64); + mm->mmap_compat_base =3D mmap_base(compat_random_factor, + rlim_stack, STACK_TOP_32, + STACK_RND_MASK_32); +#else + mm->mmap_base =3D mmap_base(random_factor, rlim_stack, STACK_TOP, + STACK_RND_MASK); +#endif mm->get_unmapped_area =3D arch_get_unmapped_area_topdown; } } --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815102; cv=none; d=zohomail.com; s=zohoarc; b=Plhdn8RQkNxw8BRUWEjD1uNJMr3zNMJh/ok+HIQeQ7yBfvb3++Jak4iSvfXWA8IzeWGPbR0iytPGOPKOlgXjBKNtCeKau8Jb3wgUokF+EupoSJiZPBOSayovBUcN5+e0/1ea2xiAl2sbhJf3WbP5L2JFg9l7Io1svq41x6oraFk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815102; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=ui6DkSfSUHVuV2NqDDwW1VpfGUapkm0wPnlAdb6e2cM=; b=bivsHQ8eDUtUX1/I7EFi48WveEJ4DaeZ/AoG2i3bN6bFpRjtHFuu5A8gehkkBhDOugG5C4g/fnh2HCX2ku+tGY3rp98EpdKBhrbkw7BYL8wvYJ0T+7NLlEtSEkQn44UOeif8tLp4TmubeV2oHLPDIoDBE5jSUIjWQWvXXzdeCSk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1619815102554532.1554899173519; Fri, 30 Apr 2021 13:38:22 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236044AbhD3UjH (ORCPT ); Fri, 30 Apr 2021 16:39:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236016AbhD3UjC (ORCPT ); Fri, 30 Apr 2021 16:39:02 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3261C06174A for ; Fri, 30 Apr 2021 13:38:12 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id p6-20020a05600c3586b029014131bbe5c7so2321886wmq.3 for ; Fri, 30 Apr 2021 13:38:12 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ui6DkSfSUHVuV2NqDDwW1VpfGUapkm0wPnlAdb6e2cM=; b=LrhdOKUGUFfXCyWFt7HLknvpkMXYjiEIA6UVQiNNPlbWxGp5pfQgkb0bK+AvlftqHS XiMltR66b7FeuedUWtb0OsVGYcLKvGO+Z9PrBwWa/gMDH528nUaufkeZdgM9qkHN/AQI FDbXsYNhCWugRbtXV15E9amprf95zJgbC+w839/RJ1mpsUvaZ3jwP9w+XRn4tWstVeW2 gx0YPCdfkrZ/P8dTwlC68DR1fzBfMREKowbJXsjcVF3Xrkmb7739jje6NRhPwQGR7s1T 2CWcxARxQHHIdCOM8xq9V/jT3p5aCjZ8uwSpkITyI9L38NT+n3U9Eiu69/3kFArvtjli 2+tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ui6DkSfSUHVuV2NqDDwW1VpfGUapkm0wPnlAdb6e2cM=; b=VeZIL8/vlCIMIrbxwZNNDCGAyDWcmUPLWa/NVTXgN2srJUbCeojO7SGpa5JliiblUu d6Zd2a/R/7TlmUkdxB28wAv9+4KBLT4E/Wmn9lsEQGTpw+d1vf2Ilvgv7/K9OtKnv/dS uL4zsBhNE2FQv/Tx3mqH1U5NZtni5ZjEcJv2wIYuXxZGRWFs+dU7wQSKhdFu7yZ1v84z 8+F4I7nhZKTyV13ppbSKPHJlb0KxDUE8stlylIunK7J4J6l5b+0rQ9/sIqUuY6pWojc6 l+Tt0rq4Bbsn537xFkmNAsuzzF/pvMkizwXZSfxFr8yMb+Bhb1VvZPzbXKMAZ559p81g pYvQ== X-Gm-Message-State: AOAM5328LmgOoKS/lDKhA4SGp5ZXcVFlu/P1Selv4rdubcmxbFYSStCi UFQFMIjZc4ajUVhu0cjeaR8= X-Google-Smtp-Source: ABdhPJyTHBndFXkjFdom/U4HEVWfjckId3zpjoxhg/QpWesoAnLGaCTD92JSSVKQiaSvXXDctoVAEg== X-Received: by 2002:a05:600c:3548:: with SMTP id i8mr18656069wmq.110.1619815091714; Fri, 30 Apr 2021 13:38:11 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 4/8] arm64: Separate in_compat_syscall from is_compat_task Date: Fri, 30 Apr 2021 21:37:53 +0100 Message-Id: <20210430203757.47653-3-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This is preliminary work for allowing 64-bit processes to invoke compat syscalls. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- arch/arm64/include/asm/compat.h | 24 ++++++++++++++++++++---- arch/arm64/include/asm/ftrace.h | 2 +- arch/arm64/include/asm/syscall.h | 6 +++--- arch/arm64/kernel/ptrace.c | 2 +- arch/arm64/kernel/syscall.c | 2 +- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compa= t.h index 23a9fb73c04f..a2f5001f7793 100644 --- a/arch/arm64/include/asm/compat.h +++ b/arch/arm64/include/asm/compat.h @@ -178,21 +178,37 @@ struct compat_shmid64_ds { compat_ulong_t __unused5; }; =20 -static inline int is_compat_task(void) +static inline bool is_compat_task(void) { return test_thread_flag(TIF_32BIT); } =20 -static inline int is_compat_thread(struct thread_info *thread) +static inline bool is_compat_thread(struct thread_info *thread) { return test_ti_thread_flag(thread, TIF_32BIT); } =20 +static inline bool in_compat_syscall(void) +{ + return is_compat_task(); +} +#define in_compat_syscall in_compat_syscall /* override the generic impl */ + +static inline bool thread_in_compat_syscall(struct thread_info *thread) +{ + return is_compat_thread(thread); +} + #else /* !CONFIG_COMPAT */ =20 -static inline int is_compat_thread(struct thread_info *thread) +static inline bool is_compat_thread(struct thread_info *thread) +{ + return false; +} + +static inline bool thread_in_compat_syscall(struct thread_info *thread) { - return 0; + return false; } =20 #endif /* CONFIG_COMPAT */ diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrac= e.h index 91fa4baa1a93..f41aad92c67a 100644 --- a/arch/arm64/include/asm/ftrace.h +++ b/arch/arm64/include/asm/ftrace.h @@ -88,7 +88,7 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace= *rec); #define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs) { - return is_compat_task(); + return in_compat_syscall(); } =20 #define ARCH_HAS_SYSCALL_MATCH_SYM_NAME diff --git a/arch/arm64/include/asm/syscall.h b/arch/arm64/include/asm/sysc= all.h index cfc0672013f6..0dfc01ea386c 100644 --- a/arch/arm64/include/asm/syscall.h +++ b/arch/arm64/include/asm/syscall.h @@ -35,7 +35,7 @@ static inline long syscall_get_error(struct task_struct *= task, { unsigned long error =3D regs->regs[0]; =20 - if (is_compat_thread(task_thread_info(task))) + if (thread_in_compat_syscall(task_thread_info(task))) error =3D sign_extend64(error, 31); =20 return IS_ERR_VALUE(error) ? error : 0; @@ -54,7 +54,7 @@ static inline void syscall_set_return_value(struct task_s= truct *task, if (error) val =3D error; =20 - if (is_compat_thread(task_thread_info(task))) + if (thread_in_compat_syscall(task_thread_info(task))) val =3D lower_32_bits(val); =20 regs->regs[0] =3D val; @@ -88,7 +88,7 @@ static inline void syscall_set_arguments(struct task_stru= ct *task, */ static inline int syscall_get_arch(struct task_struct *task) { - if (is_compat_thread(task_thread_info(task))) + if (thread_in_compat_syscall(task_thread_info(task))) return AUDIT_ARCH_ARM; =20 return AUDIT_ARCH_AARCH64; diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index 170f42fd6101..017a82b24f49 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -1721,7 +1721,7 @@ const struct user_regset_view *task_user_regset_view(= struct task_struct *task) * 32-bit children use an extended user_aarch32_ptrace_view to allow * access to the TLS register. */ - if (is_compat_task()) + if (in_compat_syscall()) return &user_aarch32_view; else if (is_compat_thread(task_thread_info(task))) return &user_aarch32_ptrace_view; diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index b9cf12b271d7..e0e9d54de0a2 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -51,7 +51,7 @@ static void invoke_syscall(struct pt_regs *regs, unsigned= int scno, ret =3D do_ni_syscall(regs, scno); } =20 - if (is_compat_task()) + if (in_compat_syscall()) ret =3D lower_32_bits(ret); =20 regs->regs[0] =3D ret; --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815104; cv=none; d=zohomail.com; s=zohoarc; b=Pt0JvFZoFquVG1PI0PrnfCU2b7Rvz/VoUHsRxgXa+6FAlpFJbpdKtjeRiQrk1fj9R/q6ibs4ttGpm7PMwA7rcDPRMFsqWoVSKsPJPG04Ok9pwOHavH80vn5S9BY0c/IduMd+AeG4YEj4LsYYP+pqwbSXH3X8QtkX4n/Afub1+wU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815104; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=G/r5fensnn55MXUHGBjpVLt7X4x9tXaFMDjcQRg5EpA=; b=FKEFQ7V2XiHrEYqPpP3ehAoCk6Z8wSo3l3ew+lV9JwsB5HQfwnAfTb4yuJ0b8SH4j7PSmzyClBRjCCIpCeK+bQ3paWxLK3wZXD29WvY+tTeciHBfYEt8dkK63uZAgmRPyy+vrN3T7nwG8Ds6392L2sLr2AEQm+jhRMbUG4MbHbQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 161981510438423.06142630735326; Fri, 30 Apr 2021 13:38:24 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236077AbhD3UjL (ORCPT ); Fri, 30 Apr 2021 16:39:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44318 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236018AbhD3UjD (ORCPT ); Fri, 30 Apr 2021 16:39:03 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8265EC06174A for ; Fri, 30 Apr 2021 13:38:14 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id v12so141332wrq.6 for ; Fri, 30 Apr 2021 13:38:14 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=G/r5fensnn55MXUHGBjpVLt7X4x9tXaFMDjcQRg5EpA=; b=pexmQbQ2FMIQxijpDpJd6fg0rB4mjAoVdriFE0Hgh8XZsvWHuA/3dwZP5rkvNy3zGY mASCu3x/Cq7WpSBR+NosE6dIr4GhsgazyE9d8iU4YgLdMTtZXUHX/6/ZAH/HOM2/sXIP wFoYUEdK8FQJ/ZqJ0jvifLwM35CsuVBl97xHhqHPyBp1FxXbVhxxsGeEqtnnTp3J/bA/ tHeGH4XhRBmcuiNF3kLeJfzL8uV0UekgmktmOOHKtRMkYHIDyICngB0Iry49YI3/CLrE mRCuxblAdzF614H65jLBQAAeKhen8EENODgW0y/F1k72nBXMAG7NZ68uLdU0wyLnVftQ 6pUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=G/r5fensnn55MXUHGBjpVLt7X4x9tXaFMDjcQRg5EpA=; b=gPKtwc9b2pQpgSkytMilvjgSphQBVzdNf/dVlPYVwi1dosf1EYG3ciWcTsRTVw8HsS gfQ+gUpneZ2fKDz+7wH5U3nAH35GoyNjUusBBt39J1z1FXb4a7xfcgTGLc4myNNG4Lzx aeWjW+kf/oMbf8rkHP8stwOq3NHEbOv3n28Kqa4plfNP1vEv4TcOBGOvqz8CypNLvTwL uBfbjPNJ1BqP+ZrcfOB3HQVFxRrf6BkpDhZnZZYxx2xePBEnT85QmHCKyjm380ovkPT9 U720XFwdJLa7jAnhb1QUudnvNLLwZAh856L0UpCdDo0fBjNlIxcJHGp6Nm6GRKh9iOhB sioA== X-Gm-Message-State: AOAM533dq/x2qwK16SFjuVsptl7G4oNRdkdnn4UP54nrhlbIWhx300Tw u18tsHxLXx8SFc25rpe+oBQ= X-Google-Smtp-Source: ABdhPJw6Is/XQCrdPf2RWrx2UDyKsq3WAbsN9+WvxGVTgubk8Utvsd5KsPP9jEdHm4ZExet7PCLdRQ== X-Received: by 2002:a05:6000:362:: with SMTP id f2mr9506423wrf.141.1619815093267; Fri, 30 Apr 2021 13:38:13 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 5/8] arm64: mm: Use HAVE_ARCH_COMPAT_MMAP_BASES Date: Fri, 30 Apr 2021 21:37:54 +0100 Message-Id: <20210430203757.47653-4-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This patch switches arm64 to use separate mmap_base for 32-bit and 64-bit mmaps. This is needed to ensure that compat syscalls invoked by 64-bit tasks perform VM allocations in the low 4G of the address space. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- arch/arm64/Kconfig | 1 + arch/arm64/include/asm/elf.h | 8 +++++--- arch/arm64/include/asm/processor.h | 33 ++++++++++++++++++------------ arch/arm64/mm/mmap.c | 33 ++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index dfdc3e0af5e1..d57b7bcbd758 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -133,6 +133,7 @@ config ARM64 select HAVE_ALIGNED_STRUCT_PAGE if SLUB select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_BITREVERSE + select HAVE_ARCH_COMPAT_MMAP_BASES if COMPAT select HAVE_ARCH_COMPILER_H select HAVE_ARCH_HUGE_VMAP select HAVE_ARCH_JUMP_LABEL diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 8d1c8dcb87fd..e21964898d06 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -187,12 +187,14 @@ extern int arch_setup_additional_pages(struct linux_b= inprm *bprm, int uses_interp); =20 /* 1GB of VA */ +#define STACK_RND_MASK_64 (0x3ffff >> (PAGE_SHIFT - 12)) #ifdef CONFIG_COMPAT +#define STACK_RND_MASK_32 (0x7ff >> (PAGE_SHIFT - 12)) #define STACK_RND_MASK (test_thread_flag(TIF_32BIT) ? \ - 0x7ff >> (PAGE_SHIFT - 12) : \ - 0x3ffff >> (PAGE_SHIFT - 12)) + STACK_RND_MASK_32 : \ + STACK_RND_MASK_64) #else -#define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12)) +#define STACK_RND_MASK STACK_RND_MASK_64 #endif =20 #ifdef __AARCH64EB__ diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/pr= ocessor.h index f47528aae321..f8309f8d0ece 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -70,29 +70,36 @@ =20 #ifdef CONFIG_ARM64_FORCE_52BIT #define STACK_TOP_MAX TASK_SIZE_64 -#define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 4)) +#define TASK_UNMAPPED_BASE_64 (PAGE_ALIGN(TASK_SIZE_64 / 4)) #else #define STACK_TOP_MAX DEFAULT_MAP_WINDOW_64 -#define TASK_UNMAPPED_BASE (PAGE_ALIGN(DEFAULT_MAP_WINDOW / 4)) +#define TASK_UNMAPPED_BASE_64 (PAGE_ALIGN(DEFAULT_MAP_WINDOW_64 / 4)) #endif /* CONFIG_ARM64_FORCE_52BIT */ =20 +#ifdef CONFIG_COMPAT +#define TASK_UNMAPPED_BASE_32 (PAGE_ALIGN(TASK_SIZE_32 / 4)) +#define TASK_UNMAPPED_BASE (test_thread_flag(TIF_32BIT) ? \ + TASK_UNMAPPED_BASE_32 : TASK_UNMAPPED_BASE_64) +#else +#define TASK_UNMAPPED_BASE TASK_UNMAPPED_BASE_64 +#endif /* CONFIG_COMPAT */ + +#define STACK_TOP_64 STACK_TOP_MAX #ifdef CONFIG_COMPAT #define AARCH32_VECTORS_BASE 0xffff0000 +#define STACK_TOP_32 AARCH32_VECTORS_BASE #define STACK_TOP (test_thread_flag(TIF_32BIT) ? \ - AARCH32_VECTORS_BASE : STACK_TOP_MAX) + STACK_TOP_32 : STACK_TOP_64) #else -#define STACK_TOP STACK_TOP_MAX +#define STACK_TOP STACK_TOP_64 #endif /* CONFIG_COMPAT */ =20 -#ifndef CONFIG_ARM64_FORCE_52BIT -#define arch_get_mmap_end(addr) ((addr > DEFAULT_MAP_WINDOW) ? TASK_SIZE :\ - DEFAULT_MAP_WINDOW) - -#define arch_get_mmap_base_topdown(addr) \ - ((addr > DEFAULT_MAP_WINDOW) ? \ - current->mm->mmap_base + TASK_SIZE - DEFAULT_MAP_WINDOW :\ - current->mm->mmap_base) -#endif /* CONFIG_ARM64_FORCE_52BIT */ +#define arch_get_mmap_end arch_get_mmap_end +#define arch_get_mmap_base arch_get_mmap_base +#define arch_get_mmap_base_topdown arch_get_mmap_base_topdown +unsigned long arch_get_mmap_end(unsigned long addr); +unsigned long arch_get_mmap_base(unsigned long addr); +unsigned long arch_get_mmap_base_topdown(unsigned long addr); =20 extern phys_addr_t arm64_dma_phys_limit; #define ARCH_LOW_ADDRESS_LIMIT (arm64_dma_phys_limit - 1) diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c index a38f54cd638c..956cab3ade11 100644 --- a/arch/arm64/mm/mmap.c +++ b/arch/arm64/mm/mmap.c @@ -38,3 +38,36 @@ int valid_mmap_phys_addr_range(unsigned long pfn, size_t= size) { return !(((pfn << PAGE_SHIFT) + size) & ~PHYS_MASK); } + +unsigned long arch_get_mmap_end(unsigned long addr) +{ +#ifdef CONFIG_COMPAT + if (in_compat_syscall()) + return TASK_SIZE_32; +#endif /* CONFIG_COMPAT */ +#ifndef CONFIG_ARM64_FORCE_52BIT + if (addr > DEFAULT_MAP_WINDOW_64) + return TASK_SIZE_64; +#endif /* CONFIG_ARM64_FORCE_52BIT */ + return DEFAULT_MAP_WINDOW_64; +} +unsigned long arch_get_mmap_base(unsigned long addr) +{ +#ifdef CONFIG_COMPAT + if (in_compat_syscall()) + return current->mm->mmap_compat_base; +#endif /* CONFIG_COMPAT */ + return current->mm->mmap_base; +} +unsigned long arch_get_mmap_base_topdown(unsigned long addr) +{ +#ifdef CONFIG_COMPAT + if (in_compat_syscall()) + return current->mm->mmap_compat_base; +#endif /* CONFIG_COMPAT */ +#ifndef CONFIG_ARM64_FORCE_52BIT + if (addr > DEFAULT_MAP_WINDOW_64) + return current->mm->mmap_base + TASK_SIZE - DEFAULT_MAP_WINDOW_64; +#endif /* CONFIG_ARM64_FORCE_52BIT */ + return current->mm->mmap_base; +} --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815112; cv=none; d=zohomail.com; s=zohoarc; b=iBZSuYv8EzOn8lxXcTM4TrJ5BPpDu+ywAX5Gh1wWmyKGWA2rL9JDc8KwWPHk4+Kr5l7RjlabBIsIUFVln20X3k7RU55YjSf82lm77Pj9N7hNGU+ktc9w/rNeksvTnKGjiVRG2n/czXsQIuDTM7KHy+SUsKy025cPI0dtF6kvFdY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815112; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=wp7Rsa3dbFK1Rt2HaXcIflNA2UCoRc1Jacf2kiGOD4Y=; b=Hkcu1Bd2XdjLvM5mGG14PgDN5i4hOh6EPOxF6+zJr1gxzedXjDOS2ZJmdQ46BevO+Sc8bVpbQQ+2twqdev4X4HijrxmUAAypJmFa/WvqjgLyBUqEqSM+YZDBPdrB5tqZZy58zNrpnYpU08BiJXjCpplN2iRumu/VIzEuPoBH3GI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1619815112007364.43833240012395; Fri, 30 Apr 2021 13:38:32 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236124AbhD3UjS (ORCPT ); Fri, 30 Apr 2021 16:39:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44332 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236037AbhD3UjF (ORCPT ); Fri, 30 Apr 2021 16:39:05 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11C06C06174A for ; Fri, 30 Apr 2021 13:38:16 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id z6so10654743wrm.4 for ; Fri, 30 Apr 2021 13:38:15 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wp7Rsa3dbFK1Rt2HaXcIflNA2UCoRc1Jacf2kiGOD4Y=; b=fTWIgIXXXBicM8mkR4e+jMmoMkXLMfXIPA8qQJfimikpqNo4e6OavH5E2OFZQldeFV wdFu2C17LBu3ZAafS1DpnRtyU4zQ1q7hL/DdUZUopyaPYWKVkOnAOVxVT7gmhzihNhkA RpwpPqwn/JyMXn7bsws+DE6vi1jEZxsi1D6DQpfPSaHA3VYErEIxGP10opO3WQRGovzW T/gZAAry1kzu0qIbeQif93P8myozy7i4SphAn7qrDDyLLQv9S7SYSkKQkEa1nvU7F0fu P87agY0+PtB1lGoj+4fEcJ0rH2pAb6xB6djbUyfg4cZoHgAYFjtdJxqY/OGX56xL2bHV yc4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wp7Rsa3dbFK1Rt2HaXcIflNA2UCoRc1Jacf2kiGOD4Y=; b=oXig2t+wgGKzDEVL9T/4TWo2+QLqsePcYlk0Qky0KCUP3BdgcdwwSJ7GbIlfQ+oJ0o YnMh3pMUH2BC/Nj26GvlYUQ7/LKVtPeXXX4Dqyech588FOTbyQuWAror6ap17lsMIET7 +iekBqIpHRWBl1Ka655nb6RrxsahChLnXiXOsRFTDgOmK6XNWTx7XpVGUmIikZqR/G4X S5qE+FiipYHAYVcG6HYeicZR8Bptp140UbTxPHcqZKazdCpS6W2yqpfSR0Sh4zQW30t4 ryuXtFau3w+gwPXoIDuBK/FEGKNeaBDPorirD/LIAbjOmkLcjMICHibyU/G5cu/302Mc +Jqg== X-Gm-Message-State: AOAM530nKriyPu6W5LWAvXpmi/fD2FeHL8hlIO7D7GsGMTfLbqw07WJy CFNrqn5gOgY9864imEJBJ5s= X-Google-Smtp-Source: ABdhPJwsNZHj8NpnDYRZa7EoRD8F5v2Z3j4FTMvwiwmwQHZqMamEq3kqT32JAYW/vdBQAdOO2UmHUw== X-Received: by 2002:adf:f8cb:: with SMTP id f11mr9644074wrq.168.1619815094834; Fri, 30 Apr 2021 13:38:14 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 6/8] arm64: Add a compat syscall flag to thread_info Date: Fri, 30 Apr 2021 21:37:55 +0100 Message-Id: <20210430203757.47653-5-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This flag is used by in_compat_syscall to handle compat syscalls coming from 64-bit tasks. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- arch/arm64/include/asm/compat.h | 4 ++-- arch/arm64/include/asm/elf.h | 13 ++++++++++++- arch/arm64/include/asm/thread_info.h | 6 ++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compa= t.h index a2f5001f7793..124f4487dfee 100644 --- a/arch/arm64/include/asm/compat.h +++ b/arch/arm64/include/asm/compat.h @@ -190,13 +190,13 @@ static inline bool is_compat_thread(struct thread_inf= o *thread) =20 static inline bool in_compat_syscall(void) { - return is_compat_task(); + return current_thread_info()->use_compat_syscall; } #define in_compat_syscall in_compat_syscall /* override the generic impl */ =20 static inline bool thread_in_compat_syscall(struct thread_info *thread) { - return is_compat_thread(thread); + return thread->use_compat_syscall; } =20 #else /* !CONFIG_COMPAT */ diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index e21964898d06..49a9a9db612c 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -158,10 +158,20 @@ typedef struct user_fpsimd_state elf_fpregset_t; */ #define ELF_PLAT_INIT(_r, load_addr) (_r)->regs[0] =3D 0 =20 +#ifdef CONFIG_COMPAT +#define CLEAR_COMPAT_SYSCALL() \ +({ \ + current_thread_info()->use_compat_syscall =3D false; \ +}) +#else +#define CLEAR_COMPAT_SYSCALL() ((void)0) +#endif + #define SET_PERSONALITY(ex) \ ({ \ clear_thread_flag(TIF_32BIT); \ current->personality &=3D ~READ_IMPLIES_EXEC; \ + CLEAR_COMPAT_SYSCALL(); \ }) =20 /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes= */ @@ -228,7 +238,8 @@ typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_= ELF_NGREG]; #define COMPAT_SET_PERSONALITY(ex) \ ({ \ set_thread_flag(TIF_32BIT); \ - }) + current_thread_info()->use_compat_syscall =3D true; \ +}) #ifdef CONFIG_COMPAT_VDSO #define COMPAT_ARCH_DLINFO \ do { \ diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/= thread_info.h index 6623c99f0984..02310b45900d 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -42,6 +42,12 @@ struct thread_info { void *scs_base; void *scs_sp; #endif +#ifdef CONFIG_COMPAT + /* + * compat task or inside a compat syscall from a 64-bit task + */ + bool use_compat_syscall; +#endif }; =20 #define thread_saved_pc(tsk) \ --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815109; cv=none; d=zohomail.com; s=zohoarc; b=iEkqbWmLBSPSzooPqVQJPNfEFExn+1r4nWUTaBySUOFaPBFwPza6OLWbG2FhnHre9Mx1bkcIzbat+jan4C+Nz1/Gdbc5+MixaqMbh/cXE0wsFNp5qapDSgzGJMsz7uIJqneR2nPkd8uUlWJX9c7Depct4E3omtt9erJxx21L75A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815109; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=5gtHRujbA++rmZKVlVKXeDrh5bnEaeS8o439txwjvSA=; b=E6fHw0NlgWGFofM7rEDJ5lmI00UzoGQv/5+KXZCnIDhJBQjbpS9t/AdL4QRy2mbz+idc4BnMcnA/zh/naFnz5X9NB/wjebFK/q+BF97DVXL77wVpBSAUwXcuaJ/N5qQ65VGdbkgmscvYmXlWmEifXfc0NKbxij4/GpVQTODHMR0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1619815109774637.4442423578678; Fri, 30 Apr 2021 13:38:29 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236106AbhD3UjQ (ORCPT ); Fri, 30 Apr 2021 16:39:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44340 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236031AbhD3UjH (ORCPT ); Fri, 30 Apr 2021 16:39:07 -0400 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD883C06138C for ; Fri, 30 Apr 2021 13:38:17 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id x5so21676499wrv.13 for ; Fri, 30 Apr 2021 13:38:17 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5gtHRujbA++rmZKVlVKXeDrh5bnEaeS8o439txwjvSA=; b=qrc9+H+zO876EkLivwIh9Kjb21xwQnQtJBzxM3rkdwjm4Tx/1PWcOzQJ31sktAcNc+ MS2EYrIX7e4Ha5MfqiquAQCZiF89vo4q1ATmaBX4I03ihWSEYKYZ+9/8ry7nO8WEQ3u9 P4Nxj/HAF9l5SeDf9pVrHab0IckshPm7R+gfqxPNpk3hrOD4ViAt9JyKDFK7XvJ1yEPf bWA0pBQTrNJxxeA0ycbVEOVMt8IHEtmHTGdQE35HPvhtUnmZSV2U7vfjdQZYnaR//ldt EmzBA6zSaqGrQg/UBR0GCohMlPFdMDG2a/Y4JC1TUMT6hyBUXGnVW3FH1btv0f16Arm9 WMyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5gtHRujbA++rmZKVlVKXeDrh5bnEaeS8o439txwjvSA=; b=D66jq17yB2LECvKSgYN1gZdNcrh7C+px/FszExI+hAs7dbFbAVa5p+ZQwCFW7Yggym IABiL0wiSYq33gGto5ACGN/Vl8Xoar1aPnXjCD7JLyT3hNOEoLZK7h+uj7qPUekMJM8R 36cJQT5cZ7btuW4jBGWdHljOF9ndwgO64GUfoVklyurl0rbiH+RlGPYJOq4kqnMuY7qr oqTuI3WAfWQ8dGAHj62/GU3TGcqcyOUKNhE6V6fpB3ylRHpoZY4kgcfrVMuAtJCgcpQr UBbfPqGmTOZuTvoXALxID1NXRVi1d2BYdUVvdn14KGiGDvOpns70MRb+fW/DxYPyndfC TGgw== X-Gm-Message-State: AOAM531Dr2YKz4hCe9N3X9Emxjrg8jV2nTbDRSmNY0kVEOD81Rvs0Wbo KQrt+2JO2eG7eP+mBp2c8us= X-Google-Smtp-Source: ABdhPJyQ4TvSmcF9Tde8UDMJFkkUIiijwF8XDq5CyinKCWjBHcnk2B6L/sJrUzcul6NzYJNXMUCFGg== X-Received: by 2002:a05:6000:18ae:: with SMTP id b14mr9357812wri.211.1619815096507; Fri, 30 Apr 2021 13:38:16 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 7/8] arm64: Forbid calling compat sigreturn from 64-bit tasks Date: Fri, 30 Apr 2021 21:37:56 +0100 Message-Id: <20210430203757.47653-6-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" It's impossible for this syscall to do anything sensible in this context. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- arch/arm64/kernel/signal32.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index 2f507f565c48..e2bdd1eaefd8 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c @@ -237,6 +237,10 @@ COMPAT_SYSCALL_DEFINE0(sigreturn) /* Always make any pending restarted system calls return -EINTR */ current->restart_block.fn =3D do_no_restart_syscall; =20 + /* Reject attempts to call this from a 64-bit process. */ + if (!is_compat_task()) + goto badframe; + /* * Since we stacked the signal on a 64-bit boundary, * then 'sp' should be word aligned here. If it's @@ -268,6 +272,10 @@ COMPAT_SYSCALL_DEFINE0(rt_sigreturn) /* Always make any pending restarted system calls return -EINTR */ current->restart_block.fn =3D do_no_restart_syscall; =20 + /* Reject attempts to call this from a 64-bit process. */ + if (!is_compat_task()) + goto badframe; + /* * Since we stacked the signal on a 64-bit boundary, * then 'sp' should be word aligned here. If it's --=20 2.31.1 From nobody Fri May 9 23:41:57 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1619815115; cv=none; d=zohomail.com; s=zohoarc; b=O7PJtmD2FcQQ0bjWEQQiV2MjKLFVTNgkQTvdwVkdKVB23TUSAEqt4ec+VzowoJ6pX4OTKGjoL+25ZgVR1GYValLxSNdlFvM5qtkEjQPbPrz7bTUhzlPfzvkkGax/xlhEuunCz+Tw7XXU2j/6SFycsvr5n3KFGJvmB+cz7IhU3dE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619815115; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=W8HlNSywnIkavL/zIcpgi9C3SQjg+1ILx19xA07tItE=; b=Hwp1BSNCZDJ+aFBVDQaOFcaLc6XLXXXCc7TVgU4fVNAdcyg6m8MBASSl9B3nQyyGDQjVpQ9QuurK2Uw+C2P0QpfLqs90ewWi2k0+sJKl1rFTLDNSx0QTQfteHE7drB93z8HOCZRErx5edQoQ5H+a1zANu+HQb7Bl0pVFLUCqx1k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1619815115557306.842902194315; Fri, 30 Apr 2021 13:38:35 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236102AbhD3UjW (ORCPT ); Fri, 30 Apr 2021 16:39:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44354 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236054AbhD3UjI (ORCPT ); Fri, 30 Apr 2021 16:39:08 -0400 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68008C06138B for ; Fri, 30 Apr 2021 13:38:19 -0700 (PDT) Received: by mail-wr1-x429.google.com with SMTP id h4so62900830wrt.12 for ; Fri, 30 Apr 2021 13:38:19 -0700 (PDT) Received: from amanieu-desktop.home ([2a00:23c6:f081:f801:93ef:94e:9f8:1f0]) by smtp.gmail.com with ESMTPSA id r5sm4384239wmh.23.2021.04.30.13.38.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Apr 2021 13:38:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W8HlNSywnIkavL/zIcpgi9C3SQjg+1ILx19xA07tItE=; b=Tnwq+5UxdRYkBVHdXf/QrQ9s4F6nnVtKUKD2NYkttreUp9iUecEx1AKt/DzsxjodxD X0lMEOhpA5f9h1KEPQ0NaUxS3WDq6Yb58ovj5y0OKHlqmw7xYsXu95tD66XtCVPpxhL1 zp2/hBkjR0a1b7KlJKVvnN9vd5t8T24iNbF/cg7CQGMQsxAZCxs26nkElLFObpMcridR YJXB7X2j91NwAdja7B0bIQTjCesZaSS3wQNP7tYu7iSzcYAuDNjMEFUdiDx0Yx76kwdK H6xh3IbtNg4prfokDfTgXw/h3I/ufVI2kaQm9kZbi6arBc/dj8gkNH+uOCo/5+rQBsV/ Gf2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W8HlNSywnIkavL/zIcpgi9C3SQjg+1ILx19xA07tItE=; b=e5N9X1pkPRI689vhNcCxmu0xNK09jZcDcggM04Llhicn7ieXLUc5Dq7lNdNP1yNVIo 0GyKD4daNb01rETt1ICu1SxwFHjBJZUT+WcuImHEVnq+634ax8GS+Bo/NtxjyWMXsblG u7+N0i0m1HxNx2nuIsqMdvdrgqFKjMrkpyrHk0ECaD7o3Hy441nviLMIvHGP0a/Oxh7p TCt28OtZO22yoH5spxj4ZYcubAgr8O3iJ0KEhRC9AbwxVjZLK6PjRTMS12ObmQU6qKNM Da9YyWO1d3LPS02+0rp45DoN/nQJX0KyingrxXifFalEYAWF/r9lQjqgzXQXVm7gz09P KcYw== X-Gm-Message-State: AOAM532FQPc3rDs2Fo/0yL6zMp8FZTPU8OyfqZfRkOK/Jrg+kHdvFg48 0CNF7nV2pVH8wYGivWh/rWg= X-Google-Smtp-Source: ABdhPJwkHUBHZjxsMejlk4q2z3yroJTh21vFO8NECQS2otHtdv4mPUmcoMfoHgrOhcxtXwFgXF+8jQ== X-Received: by 2002:adf:ffcc:: with SMTP id x12mr9722457wrs.162.1619815098163; Fri, 30 Apr 2021 13:38:18 -0700 (PDT) From: Amanieu d'Antras Cc: Amanieu d'Antras , Ryan Houdek , Catalin Marinas , Will Deacon , Mark Rutland , Steven Price , Arnd Bergmann , David Laight , Mark Brown , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 8/8] arm64: Allow 64-bit tasks to invoke compat syscalls Date: Fri, 30 Apr 2021 21:37:57 +0100 Message-Id: <20210430203757.47653-7-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210430202810.44092-1-amanieu@gmail.com> References: <20210430202810.44092-1-amanieu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Setting bit 31 in x8 when performing a syscall will do the following: - The remainder of x8 is treated as a compat syscall number and is used to index the compat syscall table. - in_compat_syscall will return true for the duration of the syscall. - VM allocations performed by the syscall will be located in the lower 4G of the address space. - Interrupted syscalls are properly restarted as compat syscalls. - Seccomp will treats the syscall as having AUDIT_ARCH_ARM instead of AUDIT_ARCH_AARCH64. This affects the arch value seen by seccomp filters and reported by SIGSYS. - PTRACE_GET_SYSCALL_INFO also treats the syscall as having AUDIT_ARCH_ARM. Recent versions of strace will correctly report the system call name and parameters when an AArch64 task mixes 32-bit and 64-bit syscalls. Previously, setting bit 31 of the syscall number would always cause the sygscall to return ENOSYS. This allows user programs to reliably detect kernel support for compat syscall by trying a simple syscall such as getpid. The AArch32-private compat syscalls (__ARM_NR_compat_*) are not exposed through this interface. These syscalls do not make sense in the context of an AArch64 task. Signed-off-by: Amanieu d'Antras Co-developed-by: Ryan Houdek Signed-off-by: Ryan Houdek --- arch/arm64/include/uapi/asm/unistd.h | 2 ++ arch/arm64/kernel/signal.c | 5 +++++ arch/arm64/kernel/syscall.c | 21 ++++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/uapi/asm/unistd.h b/arch/arm64/include/uapi= /asm/unistd.h index f83a70e07df8..5574bc6ab0a3 100644 --- a/arch/arm64/include/uapi/asm/unistd.h +++ b/arch/arm64/include/uapi/asm/unistd.h @@ -15,6 +15,8 @@ * along with this program. If not, see . */ =20 +#define __ARM64_COMPAT_SYSCALL_BIT 0x80000000 + #define __ARCH_WANT_RENAMEAT #define __ARCH_WANT_NEW_STAT #define __ARCH_WANT_SET_GET_RLIMIT diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c index 6237486ff6bb..463c8a82050e 100644 --- a/arch/arm64/kernel/signal.c +++ b/arch/arm64/kernel/signal.c @@ -795,6 +795,11 @@ static void setup_restart_syscall(struct pt_regs *regs) { if (is_compat_task()) compat_setup_restart_syscall(regs); +#ifdef COMPAT + else if (in_compat_syscall()) + regs->regs[8] =3D __ARM64_COMPAT_SYSCALL_BIT | + __NR_compat_restart_syscall; +#endif else regs->regs[8] =3D __NR_restart_syscall; } diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index e0e9d54de0a2..83747cf4b5b7 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -118,6 +118,11 @@ static void el0_svc_common(struct pt_regs *regs, int s= cno, int sc_nr, * user-issued syscall(-1). However, requesting a skip and not * setting the return value is unlikely to do anything sensible * anyway. + * + * This edge case goes away with CONFIG_COMPAT since a + * user-issued syscall(-1) is interpreted as a + * compat_syscall(0x7fffffff) which still ends up returning + * -ENOSYS in x0. */ if (scno =3D=3D NO_SYSCALL) regs->regs[0] =3D -ENOSYS; @@ -165,7 +170,21 @@ static inline void sve_user_discard(void) void do_el0_svc(struct pt_regs *regs) { sve_user_discard(); - el0_svc_common(regs, regs->regs[8], __NR_syscalls, sys_call_table); + +#ifdef CONFIG_COMPAT + /* + * Setting bit 31 of x8 allows a 64-bit processe to perform compat + * syscalls. + */ + if (regs->regs[8] & __ARM64_COMPAT_SYSCALL_BIT) { + current_thread_info()->use_compat_syscall =3D true; + el0_svc_common(regs, + regs->regs[8] & ~__ARM64_COMPAT_SYSCALL_BIT, + __NR_compat_syscalls, compat_sys_call_table); + current_thread_info()->use_compat_syscall =3D false; + } else +#endif + el0_svc_common(regs, regs->regs[8], __NR_syscalls, sys_call_table); } =20 #ifdef CONFIG_COMPAT --=20 2.31.1