From patchwork Wed Dec 8 17:18:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 1565406 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4J8PBY3kh7z9sCD for ; Thu, 9 Dec 2021 04:23:01 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4J8PBY1P9gz3f1l for ; Thu, 9 Dec 2021 04:23:01 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=csgroup.eu (client-ip=2a01:111:f400:7e18::620; helo=fra01-pr2-obe.outbound.protection.outlook.com; envelope-from=christophe.leroy@csgroup.eu; receiver=) Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown [IPv6:2a01:111:f400:7e18::620]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4J8P5h5VkTz2yZ6 for ; Thu, 9 Dec 2021 04:18:48 +1100 (AEDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HQE/yi/CLqNTAie+pOdeKBykmjhtujN+GH5+8RuvavMmjXvcKzhf8Iup2vl8P14XKfykmYV45BFhuQRrQoeZpGwwl2unKYUe6BlT+UxtJugS03cLvMwUwvhlVD6WA7QDnJnWs7yHjdJ6JH+o+0BGlyS0HplMw8bhFgZ+hOBsYlNw7j9BzDdoibd+Vfg4MJNoQoSMIM5j1yjOsPZWsSOq5exXJaCYbyk8ZFM0RqHRftrz94YyaSqx8X6KH1QCsu7I5teVpBbf7S6QKGJwacGWCpYdOEE56TeQ/OzxtHiigP3B6Gnd0yuugTTyPhYesls8u60LN2H2odC70OZZ457wlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lf6GokKuoZoWQvmpjyaXDKy1bgTlLEdqEkRamvuWwIs=; b=Fn03L9wbRpx0K9VJqGa5XAI0SimcQS2wNpSR0xK8JaZsEKoj7lIS/HY+IHKIZpU7F7DzoPN2xpWq9bBEXNRk1o6Sb3VJeU8gZeKHlCy0wAPLb1AtJCVnavzOgBKWfXqIcTrR87qFECSkpRBtRafRfXdBfi4+LnjW3fnXny49ohiRZHQDdvYNEN+PU0yTJrVu2AYC7OoN+jZvzTM4vLScxw/Q3w6GdklXnxonVAI1Hm4Siu1WzZW00sNT86n09E4NVLbsY+M+ZWBmPBDZaS1jXcFlvtKgXtQnzZW7APofkiHwuC6/hE9tk+3821YFjMoAJx8ru6zAwNIlCn+VNhWRAA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MRXP264MB0823.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:16::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.11; Wed, 8 Dec 2021 17:18:22 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::fc67:d895:7965:663f]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::fc67:d895:7965:663f%2]) with mapi id 15.20.4755.022; Wed, 8 Dec 2021 17:18:22 +0000 From: Christophe Leroy To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , "alex@ghiti.fr" Subject: [PATCH v4 09/10] powerpc/mm: Convert to default topdown mmap layout Thread-Topic: [PATCH v4 09/10] powerpc/mm: Convert to default topdown mmap layout Thread-Index: AQHX7FeaDIjAZ/GjkUuXVuFYrIE56w== Date: Wed, 8 Dec 2021 17:18:22 +0000 Message-ID: References: In-Reply-To: Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=csgroup.eu; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2e9cbbe9-67da-468d-7bea-08d9ba6ebcf4 x-ms-traffictypediagnostic: MRXP264MB0823:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:862; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: w3+fDyUkoCVZoLlOatmNJHMzX4qBit4GfxYMzarSNt7/VVq+6rSaWTn1RgmVJQNk2gxikfNqshKWDb3KdeaoIlDcgmwCfcuBp/xZCWbExYsNxZe4lGfnqbayuX1dMeiNyJidgXcIPc7T2TdpRgPjyLwA4G56eTlxy7uG1Eo/eSXtuggTvmz9NbHZZwtYTl/WWMGTENnTHMiaTG5vZI9pLQLZclLgMiv08ngt0g4uLA/mDHRZRfStRxbVKpI5a2HeGCQ2z1y/a9lOiBmQwYIwI0HPK4pXJNB50r/0THpvOXMs/XCyI2KQYr4iV39aARCj1/Qt9ZUt5gCupSkjRp9v8PnJSDt7GP8nOgLgbUcuMsJjTPU9B4ZSZ4Sl/5fUqrAmtb+sYOxZBovBR63ng+Z8gx/m8IIt320P5Xvrn6+ul41jgy6q/m15T1mGo9lKtB7Yd/cXIvvZFCVY22GTq6VlDp8Qu5J6hU2vKZ9MS1hYAehsAhrQViQOC4RUlc8+qyZSTbmGjV1M6RXn/HX6YS1O9eXhnMzBf8TsHXdf4i5ANHmNcPKg5Ore+minhyBIqRzoM/mhVPNwf6R7zVGLFbEm7Dls37yV7BdLW79b4Hq/y565qwmt17tIWiQW17RBiosyPpUJEEUD/IqauT0hrDM1Y0FkNB2MkKQrUR/HWcetlM1sG7W0vQ/Q5HDzLNc2PYTNt9Hif/+SBf/4H0Ue07l7Tw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(4636009)(366004)(4326008)(316002)(83380400001)(6486002)(2906002)(36756003)(26005)(110136005)(64756008)(91956017)(66946007)(8676002)(54906003)(86362001)(44832011)(76116006)(6506007)(66476007)(66556008)(6512007)(5660300002)(508600001)(38100700002)(2616005)(66446008)(71200400001)(122000001)(186003)(8936002)(38070700005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?q?toYYV23H63V5qvt0j63R0H8?= =?iso-8859-1?q?AzPipbgQ1BPJsbAQ++/GKrUBbi8iyYGnWelfKr6x46pqI66SEDIEAatQY2uU?= =?iso-8859-1?q?N4KT1vZymUNW/Aku5GrNy5xIQPeeEpFnQe2OnhuO/HMGKkhfOQKnkjF8mJOh?= =?iso-8859-1?q?z7LLhm6eAYY17bda+SItzxm90gE8GlGv7CwhzjzI3X/DAvXXn6qRHcFomQ3I?= =?iso-8859-1?q?rj6padcWj7NazCbYD2BDPQfFQQXnPTRd7iDprVSv+yAlmYgh56ZBhlaN3C/X?= =?iso-8859-1?q?Uuvc03n83wqcpur/0695BiDd3WtLQfzQaJRXaemr0jRKHtz/5/ocAnU0Z4ty?= =?iso-8859-1?q?1jUwKiUcH2kW0gK7mI9EDz4NzBXjv+o2DjJ4Ai5HTacG3mqCCxrviSExWfp4?= =?iso-8859-1?q?dJWlVST7T6lScl4M5ECoHcfWmxJW7dF5MxbBSvLDOODzh15UlNnrdTz71CUU?= =?iso-8859-1?q?JRCtrtbThbf3LUljwMDYYrObM9XlaTztMmyK0nZeWJLkmkpLN2w63Tse8bdS?= =?iso-8859-1?q?I0E0uZlN/BUAMY0w9NOFws2mmvqmcOnW2aeAeu2O6lqjSjY9vI3DqqdB8N6d?= =?iso-8859-1?q?lEthUZhWowR5Km94A9QR4hwPrKn3s2IHbBWHZcTOoolwt6yHm7242m27QFtZ?= =?iso-8859-1?q?UVo3E2cwlbiDp30POSxWpqIDum+Bf1A9TYLxFfDQLc5fTTTDHhCHxMQRagsl?= =?iso-8859-1?q?VGfFJ0UT3YogTyNQ3am7vFXv4ELpJvHaLcJkHVhBJBV7d1nEn57MQ2frcI56?= =?iso-8859-1?q?7iwVQTipEJayjI6qjxXNaQOAO/n2aWdAg0zf5oXAWO5sCEnJydgp1IchVOxd?= =?iso-8859-1?q?dpveAOw0LpVQkKgv6yfP5o0vU24dtZlJHQzNIJ6rcJPOzMsrbWwJguWLIWc2?= =?iso-8859-1?q?g7KJQEePtvGvNWcAS9mL/gP+8qdDtv4DPI5+mPPnntYky6qhMHvtTiZHNAhZ?= =?iso-8859-1?q?lpJOGe32Uuzi8NUNU5qlhQ1BYxWpieaC4WrfPvQsLaPzg5461vZ+QkIM37sw?= =?iso-8859-1?q?sAj6UQM00fD/Ve3Je9BA3H0bR2KAkasgoFid/lWyDW2CGO/My7dBz/7NIDhL?= =?iso-8859-1?q?QDgJhkq2NOBSaGOq4gEyjTB5cQunSyu0frWxPj+G3PKCJGXoHYZpUACyARFG?= =?iso-8859-1?q?EJDwj5cF2FWzGfoJVrxXJkY5sQ02JCqmO+122BVaACXAtcz7fVKTtMAG3bbJ?= =?iso-8859-1?q?ErUE+7onsi1iERfM8ArpiwprjP5sBMuLBBN4QfowP1XJ5SQzAk7D9g2W4Bba?= =?iso-8859-1?q?qpOeZvTqpko9WCPTo1Y+whwMgyukbYJyDKiws/eKtkuQe5VAwYUKGw7NE6m/?= =?iso-8859-1?q?T8W0HwKFyoUInbM54QzascMDQ7c0nEXflce4K6r2oGbm+VT8FglUCFvT0Xck?= =?iso-8859-1?q?zVLICFMO2p2T8fPZLInYPk4HBysM0IHCEqpl7ica/E4Iy/q0G5ASVavX9UZE?= =?iso-8859-1?q?lH4iVQy9qWxZLfNOXM2raxownfLOIS8i5yeMX7Ak5QtfYPFOBxPG8Xvulrsb?= =?iso-8859-1?q?65EV+PYxP8Eyi0giMh+XYxzvmb7GjqkJwKkHQefjVvZt4qAUhGbv1lf9VGTs?= =?iso-8859-1?q?TGk24Ys0VxQAh7e1JXEta5C/qY/Y+0HnFIlnDmBt7T92EjV2IkWPqfVbVpgx?= =?iso-8859-1?q?B0JTYpfhZvsqiIYGfbAXB7GFuDgng1cMJfc40JX8R++4lfZKcMt48abmuRZn?= =?iso-8859-1?q?uckxfsu0qalX3annXrqFNymRCtY0n2IwSY0scYlFnQwk8Z+YzKhgJWtetckE?= =?iso-8859-1?q?3pRU=3D?= MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 2e9cbbe9-67da-468d-7bea-08d9ba6ebcf4 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Dec 2021 17:18:22.8007 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: l4lJQDaEQyWkmYDCsureuUNhSkJtkLZPMmWwhFZwIWeTgjQqmFGB1SrEu8p/sUfcj5aW8OyAfZ2xEXKEIYiUHupbbIVx9b7qrQTW97+jDeo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MRXP264MB0823 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "linux-mm@kvack.org" , "akpm@linux-foundation.org" , "linuxppc-dev@lists.ozlabs.org" , "linux-kernel@vger.kernel.org" Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Select CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT and remove arch/powerpc/mm/mmap.c This change provides standard randomisation of mmaps. See commit 8b8addf891de ("x86/mm/32: Enable full randomization on i386 and X86_32") for all the benefits of mmap randomisation. Comparison between powerpc implementation and the generic one: - mmap_is_legacy() is identical. - arch_mmap_rnd() does exactly the same allthough it's written slightly differently. - MIN_GAP and MAX_GAP are identical. - mmap_base() does the same but uses STACK_RND_MASK which provides the same values as stack_maxrandom_size(). - arch_pick_mmap_layout() is almost identical. The only difference is that it also adds the random factor to mm->mmap_base in legacy mode. That last point is what provides the standard randomisation of mmaps. Signed-off-by: Christophe Leroy --- arch/powerpc/Kconfig | 2 +- arch/powerpc/include/asm/processor.h | 2 - arch/powerpc/mm/Makefile | 2 +- arch/powerpc/mm/mmap.c | 105 --------------------------- 4 files changed, 2 insertions(+), 109 deletions(-) delete mode 100644 arch/powerpc/mm/mmap.c diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 0631c9241af3..b4ae3d8bde46 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -122,7 +122,6 @@ config PPC select ARCH_HAS_DEBUG_WX if STRICT_KERNEL_RWX select ARCH_HAS_DEVMEM_IS_ALLOWED select ARCH_HAS_DMA_MAP_DIRECT if PPC_PSERIES - select ARCH_HAS_ELF_RANDOMIZE select ARCH_HAS_FORTIFY_SOURCE select ARCH_HAS_GCOV_PROFILE_ALL select ARCH_HAS_HUGEPD if HUGETLB_PAGE @@ -158,6 +157,7 @@ config PPC select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS if PPC_QUEUED_SPINLOCKS select ARCH_USE_QUEUED_SPINLOCKS if PPC_QUEUED_SPINLOCKS + select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT select ARCH_WANT_IPC_PARSE_VERSION select ARCH_WANT_IRQS_OFF_ACTIVATE_MM select ARCH_WANT_LD_ORPHAN_WARN diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index 2c8686d9e964..873adaab20c8 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h @@ -392,8 +392,6 @@ static inline void prefetchw(const void *x) #define spin_lock_prefetch(x) prefetchw(x) -#define HAVE_ARCH_PICK_MMAP_LAYOUT - /* asm stubs */ extern unsigned long isa300_idle_stop_noloss(unsigned long psscr_val); extern unsigned long isa300_idle_stop_mayloss(unsigned long psscr_val); diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index d4c20484dad9..503a6e249940 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile @@ -5,7 +5,7 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) -obj-y := fault.o mem.o pgtable.o mmap.o maccess.o pageattr.o \ +obj-y := fault.o mem.o pgtable.o maccess.o pageattr.o \ init_$(BITS).o pgtable_$(BITS).o \ pgtable-frag.o ioremap.o ioremap_$(BITS).o \ init-common.o mmu_context.o drmem.o \ diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c deleted file mode 100644 index 5972d619d274..000000000000 --- a/arch/powerpc/mm/mmap.c +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * flexible mmap layout support - * - * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina. - * All Rights Reserved. - * - * Started by Ingo Molnar - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * Top of mmap area (just below the process stack). - * - * Leave at least a ~128 MB hole. - */ -#define MIN_GAP (128*1024*1024) -#define MAX_GAP (TASK_SIZE/6*5) - -static inline int mmap_is_legacy(struct rlimit *rlim_stack) -{ - if (current->personality & ADDR_COMPAT_LAYOUT) - return 1; - - if (rlim_stack->rlim_cur == RLIM_INFINITY) - return 1; - - return sysctl_legacy_va_layout; -} - -unsigned long arch_mmap_rnd(void) -{ - unsigned long shift, rnd; - - shift = mmap_rnd_bits; -#ifdef CONFIG_COMPAT - if (is_32bit_task()) - shift = mmap_rnd_compat_bits; -#endif - rnd = get_random_long() % (1ul << shift); - - return rnd << PAGE_SHIFT; -} - -static inline unsigned long stack_maxrandom_size(void) -{ - if (!(current->flags & PF_RANDOMIZE)) - return 0; - - /* 8MB for 32bit, 1GB for 64bit */ - if (is_32bit_task()) - return (1<<23); - else - return (1<<30); -} - -static inline unsigned long mmap_base(unsigned long rnd, - struct rlimit *rlim_stack) -{ - unsigned long gap = rlim_stack->rlim_cur; - unsigned long pad = stack_maxrandom_size() + stack_guard_gap; - - /* Values close to RLIM_INFINITY can overflow. */ - if (gap + pad > gap) - gap += pad; - - if (gap < MIN_GAP) - gap = MIN_GAP; - else if (gap > MAX_GAP) - gap = MAX_GAP; - - return PAGE_ALIGN(DEFAULT_MAP_WINDOW - gap - rnd); -} - -/* - * This function, called very early during the creation of a new - * process VM image, sets up which VM layout function to use: - */ -void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack) -{ - unsigned long random_factor = 0UL; - - if (current->flags & PF_RANDOMIZE) - random_factor = arch_mmap_rnd(); - - /* - * Fall back to the standard layout if the personality - * bit is set, or if the expected stack growth is unlimited: - */ - if (mmap_is_legacy(rlim_stack)) { - mm->mmap_base = TASK_UNMAPPED_BASE; - mm->get_unmapped_area = arch_get_unmapped_area; - } else { - mm->mmap_base = mmap_base(random_factor, rlim_stack); - mm->get_unmapped_area = arch_get_unmapped_area_topdown; - } -}