From nobody Fri May 9 23:21:52 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=1621328873; cv=none; d=zohomail.com; s=zohoarc; b=bPjslTx2Gx8akc1R7Dk2UMdoj+irID5CyvacMYXg4TkF4MGNZrXMBMXv5sAiRPsj2AocL30RIBxwHBT2zo4/h3zMM7nOrR4rSdv6O/CcD6IKll67YZ27YI3EOKO+WmU9oiafDYSeLUSI3pwVud9Bto2Li+9oq9ARrnQlaf4fvqA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328873; 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=kdkSFUCZ0JAHTvBpppdKUMBqy398eMGnAURWTxGEtrKum1gcuwHDdBep1d/dkmbyXm8SKo7ZmkKzcafr6KsFWtckGwyz69hzeU1Bpx4CtSCkmCdz7eizjnt+DR1qIuWEMPg/CyoBOwUwWICPnkVRnxQUIrVKHpO3arbKl/vF1Vw= 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 1621328873632469.90751648711205; Tue, 18 May 2021 02:07:53 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242925AbhERJJK (ORCPT ); Tue, 18 May 2021 05:09:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37596 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347846AbhERJI1 (ORCPT ); Tue, 18 May 2021 05:08:27 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39BCAC061343 for ; Tue, 18 May 2021 02:07:09 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id h4so9300994wrt.12 for ; Tue, 18 May 2021 02:07:09 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07:07 -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=iTek3TJr/YFjmB4UfL1edPWpPsdj7IE8wcUP7qFv4mY9W3+0rrXVj2i4BAbIXp9MVz no224x94Qw8CWQxPyZxYsXrig3Ka0SnZJqSGshyuj/4FgA1tLLF49wvcdMZkZInVfKim kPApG10/E6NQjNu7KZulPTP6HZOhR3Nq+NfnJ2Epz9pF1sjPRchcUvbHOJLTrHN6XNkX fdbZVSSI/voKrJh+zBoYx/bMePq7Nwqvu/kkdg66zafR0egMiyT35X20TwM6lTMwcopz v2Lztg0+gawG427Kq/kUAtTBdOhLNGjOn3pabRp2oL/yiqJazMn7icnxAed9oE4cI5oB VCjQ== 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=TZGTpbRMuhUBtFfC7Kf8PZJX8EuzpQv3eqgj62egvgQepvPdybS+DUwi5jivA07MiG NOZAz4ELx0DjN2s/2DE8jaLI50AGR0KIhPnH/n9YNReK+9EzAg/VOYdq2BqE8ArnCegR Y8tcV+sG+pdWFCVnebTfyUwTWBO5r9BqNTmDJ1C/NUL5pvUhnn+bFlhvH38IyfBMQhk1 nAvuoJcGMGdjAseL0j0eQRzGYkOONbgNK0tMccBb/G9cNuPtbj7gRzTSoKcWMNaljS7J 8pY1Ngw+OjcGZWB9ikmmN88INKCY1/Sr8o4vo8ro+hf05euJi9Zef07dSph8plwVHVn4 iftg== X-Gm-Message-State: AOAM531kks2t4BngLzMAvX0bgBYP81B9AFeeRN5gc2UmSUviartnxnIM kEarcg0Wc7bksGFc7oK2Drc= X-Google-Smtp-Source: ABdhPJwqlJzu9U/zTbd6UMrv4emOFKb20RwGvFolAezPWYNdsqqHpRvkUnjCsF+jPcrBgjwttyw0VQ== X-Received: by 2002:a5d:4a81:: with SMTP id o1mr5284414wrq.177.1621328827965; Tue, 18 May 2021 02:07:07 -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: [RESEND PATCH v4 1/8] mm: Add arch_get_mmap_base_topdown macro Date: Tue, 18 May 2021 10:06:51 +0100 Message-Id: <20210518090658.9519-2-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328883; cv=none; d=zohomail.com; s=zohoarc; b=cufrtd12kmqbDoIkbGBhVbqoIVmWHiCh5uagrhm8/nTApLFCzXmySLv34S1OBdS654YPYA9mUMmVKXH6xIodiUPq1GA9RGb/8GljHFXNI5DdJU4qWNK9FyhnufZgckXT6xIclBIU++XUjWeZk/Y2zI8QelkN85sh8GtjQfyRzIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328883; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=DEq0/bKuKyVdL1JH6Xf7qoLNGy26OvZqXWZScmfZsZ4=; b=Um3BbrRvz0CI7YWRMbQEkSV5zp7XjpcPuKAUz0908KC/jhchycJhFN6kwVvlWdwoIWZ9eCtEKTOjIbxCtcJ8+MU37YAYc1FEG2jO87Tkm4QI4z5Z0w6QSfjMjCyqz0hZNkwS5jlJ/at6N9HWqVneb4K6b8EzAVkzT7Z9mgowQcE= 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 1621328883255442.9587336513455; Tue, 18 May 2021 02:08:03 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347836AbhERJJR (ORCPT ); Tue, 18 May 2021 05:09:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347855AbhERJI2 (ORCPT ); Tue, 18 May 2021 05:08:28 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02C48C061344 for ; Tue, 18 May 2021 02:07:10 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id f19-20020a05600c1553b02901794fafcfefso430247wmg.2 for ; Tue, 18 May 2021 02:07:09 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07: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=YXX3VRZhOsfkB4tqu4Q6tAruc141WxgNYT2vTPahITkoBVW62BQbI/sBbFkSqseuNC mhbNcHMeCuLCBI+BiUFrst6wUM5jKxPuY8C8rgZPqXRiDptgfsiJcKEK5lzgkfWq4ciG 5o4kXqCM3YDFxvy4g6lHD4PG5hwsK9baR2Eo2C6jL7D/oSRm1/VSxks0nAEuNwAsAbPR YmiKvgRJK4ZFprotrlEM+uXJxVpewBXcVsCX0MvgzEIx0/Y+G7KEweH6FbNsMCCkwntb 8+vvaCFdK1xbWXWC6Hlz71OwNNETAee3JejQ6tL9+YqsQB/JqPPb5lhQUI69AJ1YNLxD 0P3w== 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=MlFvcOWmXsXX8jWO3efhz3io2kLkohOGqU2nsrEZ/nJmWl6oRBywu/4t9x66F3/wjy heMu4IFk8P96f8aKo0c6DrkTpfQ1Svq3hei0vmuCU/4Q08iUbmn4HhasLYVo3qNqkV+z y7sxIBzfC75sDw2x6zeh5UUNVOhit+008i+mRAfZ+8huoEQsj5k5GEc6Oqpidoxb62Cz xnq1B8agnH+DXr6nEsRXxV+Lz/nKb3c0I8oTxGHh6YUtqkY951PdAZcJ1911yFKTDx4i Eb8HL+u+ekgjEP5m1FNSFDa9+yVUQnWQ44YvdVaHxRc35epy6MIug+fMGAnVjrmNCW5T qr5Q== X-Gm-Message-State: AOAM531JcrS2E+rrG0OWI2MMrw68Xn1WzicpuT5lQAPtfnxlAk7kOGJQ lKUduOOWH80h3X3ef7sX1v8= X-Google-Smtp-Source: ABdhPJypDI4jFTUNpyCBGcVWEB+Qc4Mg9AKECPAD92Z3ZLvuiLmU/GmFHaNdYqqF00Froa1hujNP4w== X-Received: by 2002:a1c:dd08:: with SMTP id u8mr3757709wmg.62.1621328828723; Tue, 18 May 2021 02:07: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: [RESEND PATCH v4 2/8] hugetlbfs: Use arch_get_mmap_* macros Date: Tue, 18 May 2021 10:06:52 +0100 Message-Id: <20210518090658.9519-3-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328877; cv=none; d=zohomail.com; s=zohoarc; b=Dj0ClfCs08zctASvt3++dh5hM1PESgSz9wcvAvXu+02+7EsY+GixhICqRdgMd5v470MbuGJHamLTPOXD2wROVMh9T4+Eg1xicg+tvyZbiHZqej8uzEAqf1RGhkOJyYqScLWjnQmvwgMwuvTYcb4dqljM6gujAAV2F1KzTc836SQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328877; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=9rGi608qIyo5wwTAfm/9KSh42lmNIqRVhptkNqcqKak=; b=lRnfCcjpX+QHEA5IZOufZor8CQeV2wyiM7Fxb/VkoAC+Q1QhxDTg7pgQ0Z7s0moa1zQXT+QPluv903KghC9+rSZSkfYcxXwapRqp4cbwN4gBKgszIbv7x+nR4/bv5IZhhlZLGgBOH4PgHUZZjsbxyNkDy+rbKzAMq5hKzW8qEzc= 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 1621328877727310.2784170890103; Tue, 18 May 2021 02:07:57 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347791AbhERJJN (ORCPT ); Tue, 18 May 2021 05:09:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347725AbhERJI2 (ORCPT ); Tue, 18 May 2021 05:08:28 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5D6EC061345 for ; Tue, 18 May 2021 02:07:10 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id v12so9329551wrq.6 for ; Tue, 18 May 2021 02:07:10 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07: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=9rGi608qIyo5wwTAfm/9KSh42lmNIqRVhptkNqcqKak=; b=boNwMh1++w7TDzmUAg3tAWQaAtUpXq0nkaVL4P8ywlxWnnj3GizxF9D5FCopHzYH0l M392UtjwRQdiPZV4Nn5JI2GOdJ+18ZnwwY/Yc6DCynMepnDHLpTnHR3bvKPB7oR+QqB3 NBfxlbpLCIbfsyf5AfcoHUKdJmvEg7e3mj7gSeG+XZjVzDwRkLWQrIb6xdqcAXzDQK9C 2W6K257G0wB0LkXgThuBcB8JyHIKqqpKgI0qn8GOQ1KhMSM5Vqr5kOxyNL290VammKg/ t4LRWs1m68gYzNU0jl8giZsH9bb5PWDXWl4afmWTENaBJ7sJmnugegUMu/LWG9Hs/JXo 7tow== 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=cMtsA/rFIyPHpHuI0AOpCGwMhwwJHMeIV7/BW7viVefqJndyF+Nyj/BLsrE048eG7w 85Lj3/onpx+BeCd+yVRzXrb/sKIaE1Koo2fI36x9UAv/74ZQ/QSeKucKl+gAb9hu+ZmI TheEE6KwcOpv3jTEIHX43RypyqamH/KoZWYETRyYiWstF89u7hNArZsUcO5fWlf22ZZ2 /6/kcctSvBNo9jEnCncTR/0zmjq7aqurFSxlgsXVcmMyr63dvgk3Jc2zxVIue4CPBwtt 3Tu/cUrkU4ZSHcYAdsbkmwd85gvMQHHINb3tZzkLEWg4Ac8Z+q6z/JHZBJ1MAgFIBncx kzMA== X-Gm-Message-State: AOAM5317JXsi8ZNXi0E0pM+BkOhjGI0KRqQPUOttBoCXPADfXwN3Blxl UfCxKuFfbh9W1CwtzA8Gp4gOyHNvv2rnS7g+ X-Google-Smtp-Source: ABdhPJwS9MdO+Qwxpqf9XZbH6OCB7DYTmx7uZPYqKcZVbpPMaJnWz94YV9xSRF/j8QdMOHfyvwkbnw== X-Received: by 2002:a5d:658e:: with SMTP id q14mr5355475wru.81.1621328829488; Tue, 18 May 2021 02:07: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: [RESEND PATCH v4 3/8] mm: Support mmap_compat_base with the generic layout Date: Tue, 18 May 2021 10:06:53 +0100 Message-Id: <20210518090658.9519-4-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328888; cv=none; d=zohomail.com; s=zohoarc; b=INAkQjjiwA4qziO5bt70+aax8chkSiStR2CHbN9i3Nqx1n/8YNbQ8d2hC0oqV7ylWYcBq4/nZLzgBu7dapQKZQxUe0dg9kCzsu2A8gOClYskJ5SM+SaeV0l3xTjjF5paeSffFdIqx0zMNuqakRwh90mrWXpOuwN/TzZk4QNWE3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328888; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=ui6DkSfSUHVuV2NqDDwW1VpfGUapkm0wPnlAdb6e2cM=; b=XZLoygKZnyR3AESzEighG3bvqYalQeGbthqSmY6zGSmNsekbVUKgFakGIMAE3Pa3VlVMKYS8HQSiXaEw1IWlS4a2+9cMohkCaOC8legEPan1AEY2xSAQzpTKY0mig6ja9ZOq2szdLTYUSRRqynDgF+od5baauvg7NZQOgDHrPhY= 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 1621328888248286.65446819906674; Tue, 18 May 2021 02:08:08 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241931AbhERJJY (ORCPT ); Tue, 18 May 2021 05:09:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347856AbhERJI3 (ORCPT ); Tue, 18 May 2021 05:08:29 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8819FC061573 for ; Tue, 18 May 2021 02:07:11 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id b19-20020a05600c06d3b029014258a636e8so1042899wmn.2 for ; Tue, 18 May 2021 02:07:11 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07: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=ui6DkSfSUHVuV2NqDDwW1VpfGUapkm0wPnlAdb6e2cM=; b=MKnOXAYqobu9vZgnQo2xLbvYvLmegYQO/FLgmDUx3jBKyLlS638sZHMgtsC4NxZNj7 mHzksuIXaNE9inxo+D5WlitiKZVIgqEgYAi7qItT88oyYVytD6jirj9JThwBdR9F9L0c e0U16Cfj1y5r40srtwtIZRG5EcZgBsSLiwDH6ec6SySAkvYVJm2CY+5LNd0kJ4wAyFaZ Wh0H17ZFyY9MRYbm/3zQ/ThQfWyyaxbcxwGtq/kZs9e6tOw9AHkLeecKmY/bY5CCKLzl p6zCTw2b833Yd7v6Kudv0yHTVYYoJzGuMlDb8LGDfac54oXMCY+p2cHvPNMqg/i9lzxI 6pHQ== 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=BIeUjNdldWrU08o/4DW5vObYdjcljelo/ygWgdKx91EMjiZcChEz0SkXVemvgmz/7O DBtsmvEzSKXcDx8QSXQek2FfzoUjXI33DyMvXj7j+nivq2yIEj1qYzX0L4lVmwwMRsZc sOjreen1c6JOw/w9oRsG10GaO0XT5Vz8m1APtLP+OWd6X1PRQLDw65CD2vMjwElmYQp6 mpUBbQCMues4dfUF1+rBkDj4y15/3rt4oRRH3/t6MI1gPBqsQFHdCjpR59XRLfO1U9I7 apoF10clU3+01pgPCGDEWvDut5Xy2ZkadpsgIwgDETwOhhVdBHwWiu6RQVwDRFAthkfU 6pZA== X-Gm-Message-State: AOAM532OS35e2JlZ3ukaUHJV/XH7wtvYVeXGrEwqobEFOJ6PG44fDD0s HyghRbOhJYrK01Yn41MjSHE= X-Google-Smtp-Source: ABdhPJyJ87Lk/qEv0BvAQqI2fLVrmtr4vyBKChU+E38Ab22pnAniKtbWa2D0iOqrXPMptqs07F/bBg== X-Received: by 2002:a05:600c:35c9:: with SMTP id r9mr3742415wmq.56.1621328830331; Tue, 18 May 2021 02:07:10 -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: [RESEND PATCH v4 4/8] arm64: Separate in_compat_syscall from is_compat_task Date: Tue, 18 May 2021 10:06:54 +0100 Message-Id: <20210518090658.9519-5-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328886; cv=none; d=zohomail.com; s=zohoarc; b=EaD0/h/mo82P67XrXL7eFABR1ii0+98lxtTfp8BWedmpon4bP5ftBaW3Pe/vYIiowyJHI/vAot32Xt54I+cM/amemUcCp8EXdIrxnV4qRySYibZHiNIrjuIz7U3yr19VmuCwtx1YzwLCxB06EUcijQNvRo7fZIvrNP0mCpe8arI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328886; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=G/r5fensnn55MXUHGBjpVLt7X4x9tXaFMDjcQRg5EpA=; b=djj3w7WjVefr9BsEiYvpRiLKHWMiGWAnqI3wJgLzDIVbeGrVNtJ1sbzSFUbox8e4fnsoNVevg/XaGmaS+HlCGXOeuSfoaPGpSvu+1GyGwTDfWJL165Qh4nunDMzfyKP+R84pnBV2JHHtPZ76VC4Pqk+V339++vCqy2PDbFxs0wo= 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 1621328886753896.7103470698913; Tue, 18 May 2021 02:08:06 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347713AbhERJJX (ORCPT ); Tue, 18 May 2021 05:09:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37456 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347809AbhERJIa (ORCPT ); Tue, 18 May 2021 05:08:30 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49337C061756 for ; Tue, 18 May 2021 02:07:12 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id r12so9352095wrp.1 for ; Tue, 18 May 2021 02:07:12 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07:10 -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=eUJE1f1YvEhBwCYMcbqD+IMmg8AvbE3Y2ox7q6oQSyKdbDSMnTKfChaWfqNCSwh5Y5 l1349V6mwRmwj8biCJ/NRe0DE7QKW7sDue1E7G6gaCvUBiIfjwai6p+0zYig0AKnduFf In3eRdQJYonyyqPJAOrEGwL+fXM4hleyqjCApPY5KqhYfwKE+Yr41zXhZjEE2AO2/ZOo SYtXCMIy7oPi18cJkyoNQCkFfRZRbihoeimDdCEXvT9hz/agnQhvfMgIUXi6Ak/f4SQ5 TPqZjOKCHAAC7RIcpLMNskPUeC/Z6gw1LQJppIB99faQFNRpNcNBraN4ggn7E6eKk136 LVGA== 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=qJBpw8Ipg+lOGl1RpAAeksb7e46OnxTrALvrVx5Ig8msOX68r/x/RcHBXFWQDxC+UT xO8HKZwytyuUK0Jp2VYifWfUwiDyMMasiI/RdVabh52U09XJwGReczpao8OKRFxvDTju zdDdmtwZr8aL69FOWhfJqAU5QsDm2gU5qKiPVuDpg2s2y8wAzu1+IMJQvxIFkQGVz6OD K0WVdKNgQwp42maVZP6J4GEbmG2KfQgHjFsIpIK52kGqUbAdJZHutjcYK2PRm5caIydQ cnvhXy2lK7KmDDxcIDneUNUYgkPaN3gPSHN9Toa6hTdqgn9Y0JeFOpgfY7h20ubEjIIR rxsg== X-Gm-Message-State: AOAM532Nj/MaPbV+VO8YJO8iYAivGU7EBJzmvdMdyREORU+dbznOnaOw y94t6EuDGLadGXI+gpUy8ik= X-Google-Smtp-Source: ABdhPJweEKk2l8D7ru8vr0SN32RW6HDKj9rEKHootedlexMXHcpQSqg1DuJKtxJaY0VMRcQjOYP66A== X-Received: by 2002:a5d:5049:: with SMTP id h9mr5596727wrt.24.1621328831089; Tue, 18 May 2021 02:07: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: [RESEND PATCH v4 5/8] arm64: mm: Use HAVE_ARCH_COMPAT_MMAP_BASES Date: Tue, 18 May 2021 10:06:55 +0100 Message-Id: <20210518090658.9519-6-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328889; cv=none; d=zohomail.com; s=zohoarc; b=Pk7j1iM9V0fNfb6AzMEJgFyMr1RPGPBc5LXXqpXjlhZWiej+ND7f0ReS5rpO9zN5yEHapAtA6L9vVzRm//P7XlukLbN2L3gMAEz/KWrNXA3cbiwbWU1mMESSbWF8nIqws9gG5Hle1ezimm3sl2XCfICYoEopfpBwdWgfmBD2A7M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328889; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=wp7Rsa3dbFK1Rt2HaXcIflNA2UCoRc1Jacf2kiGOD4Y=; b=DDiYTLvGHg0P6VXtBsWsp1uIg4VmREkzmG2NGwvsqrhnCF6KwCJFLX8i9aWS0a0YIaz9d9kyQMWrSJEB4tOfgiMsDOj3Fw7SEzQ7+r7o/ycSzw6X07lnX/1xzTqzPKfz33zLL6hZkagmOhCzFwoVEESrEiABpRJFnw4dUDMWMfY= 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 1621328889891909.1241371857752; Tue, 18 May 2021 02:08:09 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347882AbhERJJ0 (ORCPT ); Tue, 18 May 2021 05:09:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37616 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347858AbhERJIb (ORCPT ); Tue, 18 May 2021 05:08:31 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F18C4C061346 for ; Tue, 18 May 2021 02:07:12 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id u5-20020a7bc0450000b02901480e40338bso1174616wmc.1 for ; Tue, 18 May 2021 02:07:12 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07: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=wp7Rsa3dbFK1Rt2HaXcIflNA2UCoRc1Jacf2kiGOD4Y=; b=ff0261f4Hko1waXn6rNO/FtWFyjFfVyqzR/nJiZ3YbrHr8a+uxlj92umxGVEHT7Rt9 p7Nq32ktvBjGCor012fDkLVAqz7tSaQ20lSavshJ2VCUUqljyNqk0l+VOOXSnWKmRdz9 Aq8PgdJZSlFkh77zNfyCew+AZQvhdaJ8l+xcn4ZaxysJIKLjtRYr4qadcWnVpeDSPf0r xkfliCW42GMftD84B/E5qGVDZ5M/5i6FjYsAqwqXgE96DrjBaTF0taaZnbNZfplnNLyY q6heNIttlsHO+OuPperd2nY0U+xA0KpZx+JtuNX0CPxBItkloqBJVxSXLe4RmjfZU50Z tXww== 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=EJnTs3lmgO+DKbMVSqSff5NPNkena/1mjjV2F4oSX6gGukDCwt0UJ3bL2Q/ijxzQOr 5bzajt3KRgbZOCrAgKrUcioQbLIrrlTEpVRBFZGn7mZ0KXk9b20KYalS+NWuuRUH4MwY o3n7kj0ZdS7Hp3XyZOToCbijEtMDYth7TWfevvLRZfL0Ni50PEZjs3/bu0hMT32O3BSB 7BgV3Oo2b1NJrEEgoEQ/QM0N3uVx/cqg4Y5bXEc1wacMhk9HT6p8owY/2TxinSo6L4ig 5cdXxc/JCEC3+BjoNO78tmBcXnbarkE7y/n+BjW5HFWni/4wHaI4xJhlOAOWEiGTQHHg CfFw== X-Gm-Message-State: AOAM530Zc89Yi0iI+FrQ5DHQLZQsK6uLtNZw7qU+vfURv7hc+zTKSFOU xUIMcD+AmCOFAli+QSrofXI= X-Google-Smtp-Source: ABdhPJw1APcsYlGJ45XHsowAtoxXAPYrvMyzUxHQYFHWRpZRviO9X6zJ63aXS7UiWJjupn+s3oHHcA== X-Received: by 2002:a7b:cbd4:: with SMTP id n20mr4335730wmi.187.1621328831729; Tue, 18 May 2021 02:07: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: [RESEND PATCH v4 6/8] arm64: Add a compat syscall flag to thread_info Date: Tue, 18 May 2021 10:06:56 +0100 Message-Id: <20210518090658.9519-7-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328895; cv=none; d=zohomail.com; s=zohoarc; b=Hr8PmxnU9bRBkGaAMeidIK2BtoLP/AeJywmiXkWJk/srWHlOvyLGlQB4i4zxNSqvRfQxH6j1ISVI88/a/mvGy1xgFEi9Wnx6zgyUX5/J/GRnSrq2u/J9AIHWhcrm8lYGyV3gPdh/TVRlZFowR45gzjy/ico/MafzenSOjx4nvxE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328895; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=5gtHRujbA++rmZKVlVKXeDrh5bnEaeS8o439txwjvSA=; b=XJIWFu7lf9cM7s+z/AD1HuCA/XFMUJ2RQ4fzZ4Osz6wFsMGpw1ngJkoQ5OZWQxrC2tDYrrcJoEZzFJ1fJoW552pOBGQ70aRLgGGonqCUFi995zlMhHDY5zB+ORiUQVDOKrMSTvTC3F0RG9ieMmFY/Mb0klA1WTtxEhup+cWeHFQ= 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 1621328895194290.88065224098614; Tue, 18 May 2021 02:08:15 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347908AbhERJJb (ORCPT ); Tue, 18 May 2021 05:09:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37618 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347736AbhERJIb (ORCPT ); Tue, 18 May 2021 05:08:31 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9C7F6C061347 for ; Tue, 18 May 2021 02:07:13 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id z17so9311268wrq.7 for ; Tue, 18 May 2021 02:07:13 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07:12 -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=kTfjDSsgaq9qbDV1ucHbETvQ/8/ik6lZYd1sDSYBYvzO5YOC2355x5r6WEZJsMFAaq TjWIPb6hh9Qyd0hvSxCnR9xvlg6lHvM/vDQAp3FLdpWv0R8Yg14Us2FuMOSTqfk58N6+ DVYackISrNedtzyFqko1Bn0lLIqV5uuAYTt78ggEYlcBeoZz0zgQ2dWp7v52moTMHu0k 1nLRAjR21BFUJscaSBAVFFb8m536QaQMIjnqjU6zGSi9KmqMhH5uEMUfJFriL2pSSle/ Lum3CioeDmXQXi+uhQfNU++N4jDqC9I52MCTiWwr86qUBCm7cxVwwfczF2cOQQyFYd8x XvPA== 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=rgacfSgQtkVApePDrWZQ59Z+SVaq23QUEyeOndzNGLhzFBZ1Dm0EriUltyle5Kh/sP ylexXjPkrHPr63PLV84ujYpzSWtRTdebIgPaLgAxWBeiGOOgQWOWvaD2co0DGPd0Ll2W OKVX1Rna+1xLX3v5DSKyC1oA3d018HkaTMO3XPQSZPvsWpcDhzkF+Pnb+vhuWEX0c67z vpJ7zHWa5Fq52xdbAA8aJ0t7wxaIIJJDWkKeB/mKU7eMiGeyRv6IzPUwHiQugb1mUie/ zPNinwxufx7h2InJmZwqa5cCicxugeNJSXNQjPL5u6EpNZbj7Bj8PfyQnc5dQIlaqutH 7owg== X-Gm-Message-State: AOAM533XbEFh2SE3CK2IbEMFy+yangwi8RPSl4LRQJ1yl/QVsjTQlQ0i ODUO7ogCtJJJiTT8S5kjhmE= X-Google-Smtp-Source: ABdhPJzF3v2NF1BehS+3u+lw1sBLeXSGTnvsmTmfUvY3oAh8WDf0nwHq2EO4QH5xarQi9gLUtb3rjQ== X-Received: by 2002:adf:fa45:: with SMTP id y5mr5575639wrr.311.1621328832404; Tue, 18 May 2021 02:07:12 -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: [RESEND PATCH v4 7/8] arm64: Forbid calling compat sigreturn from 64-bit tasks Date: Tue, 18 May 2021 10:06:57 +0100 Message-Id: <20210518090658.9519-8-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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:21:52 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=1621328897; cv=none; d=zohomail.com; s=zohoarc; b=fHeoF7B2PJ7Zgc0t5vU4go0v0dXwFog4z++OSK/K2OH1OyRcwb68cOiD44PXJyMsdbztBH+5Xl47YqnJGWlXJEw9rMNqGQK68hutVgpK8cGARgYMO/QOR6yvJ0dW1S7MOS6Um1xOUvkMct04IKFJ0wX66S2NGb6J1pMNl4IkbJk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621328897; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Subject:To; bh=W8HlNSywnIkavL/zIcpgi9C3SQjg+1ILx19xA07tItE=; b=V5Wjyvf/zDnkfdCh7jHx1EIJO9VhymEUSKVgVURbwYOGbwtj5kuTSFRu369bcrMrUaHGKh40XQZthYe42bar5h0KLHOdl0XZuuu3Rc1zxAnVGLEDG0KALLF0lI4TMLmmQYSwzLYGpjs1kQvA1xQTZP+VR8+nfHPUMQdlzo1wGWA= 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 1621328897351507.6443236115807; Tue, 18 May 2021 02:08:17 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347812AbhERJJc (ORCPT ); Tue, 18 May 2021 05:09:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347859AbhERJIc (ORCPT ); Tue, 18 May 2021 05:08:32 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DDB9C061348 for ; Tue, 18 May 2021 02:07:14 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id c14so7535376wrx.3 for ; Tue, 18 May 2021 02:07:14 -0700 (PDT) Received: from amanieu-laptop.home ([2a00:23c6:f081:f801:91cf:b949:c46c:f5a9]) by smtp.gmail.com with ESMTPSA id z17sm7520306wrt.81.2021.05.18.02.07.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:07:12 -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=Z6UuQJQJE8OzmnolFvAI66wj3VrgTvPdkPJlOmuWUhdHBCBObKZ0uCsL3fBc806Zb4 aT9EVjUe40ZY9D9bcEGL9WsiqYV7rjA6CaeRMi9C1yPCcEmzajr7rg37Te6upfx1STvn n0I74VwTfl+XPuwhnt6rt6TxlpSzNwPBJsHr83YcDGGi/UC951zihbkjNAWqLvcKai6j B+tGBRU/oNg+scxB3Yy3y9SOf9uI9HOjtuhiENwIXl2MCadHNRmRPppw70K2TUGI4Yc0 i0twL0zZCdNMAAEEHtLzIub4po047H69a5zDtNa9p3o8n4f7FEhxoj6bcmSFD/OhSQ5/ zo8Q== 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=MCwCsG91foPqGAHsPsdYqZZhh9EnoDVS4t5KiR5SnMu0Pgld97R9fAiaTyYJ3IaLoN GMIR/Jjze1fUl0p3EPnAerBezyk706iO5OVunXPsIGSmENvx1RCYTIbZhk598JbloAGc pNyh6XGEMKYkcM3GVj0TjfOX/oJqAb7T5Afw+n97AxF0aAoN3m3rSaqLeyUNgOhi6YFw U7nxpLkBZ+Hw1JHl1nfRwswSnjvFJdabYm/xkCyKVhHyp87INz3QjHe7E+xHIS1eCs21 GO6H+nnVvMGzZ6ojbnJN744Wx0fSAcUvok4I/9B0hcRp+jIP2HYCeyWJPSGCl2ZF94IB oJfg== X-Gm-Message-State: AOAM532FCBZnDvh2hilhlWSqq/ZSddGSzvmuJTaZhDCQPJUap9nL1sJr DKTcKgOUbV9nhCawtQ+O2PNb3XlnJoAx0Mg5 X-Google-Smtp-Source: ABdhPJx1UUqfv4BHIZswYgXTZX54aJ1DIP+CKgReBYH0NJNL1Y41RH5slNA4+TWC7X2yXZIiWOTgIA== X-Received: by 2002:a5d:448b:: with SMTP id j11mr5420767wrq.93.1621328833162; Tue, 18 May 2021 02:07: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: [RESEND PATCH v4 8/8] arm64: Allow 64-bit tasks to invoke compat syscalls Date: Tue, 18 May 2021 10:06:58 +0100 Message-Id: <20210518090658.9519-9-amanieu@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518090658.9519-1-amanieu@gmail.com> References: <20210518090658.9519-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