Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp464286pxt; Thu, 12 Aug 2021 02:37:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzMjSidta9BtIf7hR88eiP8+U4e8VLCo92ZOy8bVoC53kWqt/OgXWPj4sYhcJK8TAUoKMlL X-Received: by 2002:a92:d70f:: with SMTP id m15mr2196249iln.162.1628761028810; Thu, 12 Aug 2021 02:37:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628761028; cv=none; d=google.com; s=arc-20160816; b=Wuo04pSM06MpDUJkKAEtPou/uAXzpmwcfj/g5lwbLfsYbyoRCUnnlohYB51QKjI0JI q8qV+Z3q5NfOaJBNZH2PwfINN5Z93pCp9q6dMbySGaT0wQz07v20sQ6JEB7J9DaKISQk qsNprPZknkxzvU3tZE/lohfVATRchpht9oiJ/xoooxiV5nvRZ7PZ2GVveLQvpisLtnBZ 03E8gMM+jMrsCNNO5w5l2RUBrFaJtXYkgb1YE2k6ZFLdlAHOZ/XdiF5DUsRJ7DDG6Cqa 4prHieJ6wK6Gjy4ZgrKVBigi+jbqWSwmFcsWyAgwwBo1p9SETDCqLZ50L7t82X3o/RcC wccw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=0POxZDht8C8634FZ8jO36kh3AwROGuUlXP474C8QLFU=; b=OQsbfk9d8ydiTGq9G5OJENdKDPy9VKHuBMkyZ54AWTS8gtfYOuOTybX+l03p5Hw4Zs 36FpcyGvSO/ekxisRlBJX9HhDg8MxqBsn44rNeGxBHxwR9smqFp3JO/ivi17y/AcNXIJ v5F/+ZuuAUmZiKkVwxa8s4dtcehVkUAjwUtqChcnu+zHbHbY1PZzRUmGAmYYELwm5uN7 CX6aCI0lCdaTfUEyd06JbDbnt6/YG3xh5zGD4nmUwE/WooMDg1Fq/BM4Di5sDd9I50/Q LHhx85kV7DqEaHXW6XSXvlMR8hOt1dhip531pbVolvkVZKpGOgKD9e/0GMpmFKudTr2a 4npw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=FZfsoWix; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p9si2900968ilo.104.2021.08.12.02.36.57; Thu, 12 Aug 2021 02:37:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=FZfsoWix; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235086AbhHLIpD (ORCPT + 99 others); Thu, 12 Aug 2021 04:45:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:24997 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235059AbhHLIpA (ORCPT ); Thu, 12 Aug 2021 04:45:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1628757874; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0POxZDht8C8634FZ8jO36kh3AwROGuUlXP474C8QLFU=; b=FZfsoWixR8afddl32VA5hYBQQcF9cUw2MUUla6dT3OsmAO9f6qW6QOUbhZUSsVzRdxO1qN 2Sbsooy18uZAwHHYwCLrWiRfFS78ruNd82KD138eU/um4/pn8VpTw1bQaXkwqNqHDQ2KLt w+/zbH7TrDEs0PXnc0AhXYkuD8tnuYc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-65-C5_m8MfPM5aejXme8gy7QQ-1; Thu, 12 Aug 2021 04:44:33 -0400 X-MC-Unique: C5_m8MfPM5aejXme8gy7QQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 42315760C4; Thu, 12 Aug 2021 08:44:32 +0000 (UTC) Received: from t480s.redhat.com (unknown [10.39.193.117]) by smtp.corp.redhat.com (Postfix) with ESMTP id 998805FC22; Thu, 12 Aug 2021 08:44:12 +0000 (UTC) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: David Hildenbrand , Linus Torvalds , Andrew Morton , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Alexander Viro , Alexey Dobriyan , Steven Rostedt , Peter Zijlstra , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Petr Mladek , Sergey Senozhatsky , Andy Shevchenko , Rasmus Villemoes , Kees Cook , "Eric W. Biederman" , Greg Ungerer , Geert Uytterhoeven , Mike Rapoport , Vlastimil Babka , Vincenzo Frascino , Chinwen Chang , Michel Lespinasse , Catalin Marinas , "Matthew Wilcox (Oracle)" , Huang Ying , Jann Horn , Feng Tang , Kevin Brodsky , Michael Ellerman , Shawn Anastasio , Steven Price , Nicholas Piggin , Christian Brauner , Jens Axboe , Gabriel Krisman Bertazi , Peter Xu , Suren Baghdasaryan , Shakeel Butt , Marco Elver , Daniel Jordan , Nicolas Viennot , Thomas Cedeno , Collin Fijalkovich , Michal Hocko , Miklos Szeredi , Chengguang Xu , =?UTF-8?q?Christian=20K=C3=B6nig?= , linux-unionfs@vger.kernel.org, linux-api@vger.kernel.org, x86@kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1 1/7] binfmt: don't use MAP_DENYWRITE when loading shared libraries via uselib() Date: Thu, 12 Aug 2021 10:43:42 +0200 Message-Id: <20210812084348.6521-2-david@redhat.com> In-Reply-To: <20210812084348.6521-1-david@redhat.com> References: <20210812084348.6521-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org uselib() is the legacy systemcall for loading shared libraries. Nowadays, applications use dlopen() to load shared libraries, completely implemented in user space via mmap(). For example, glibc uses MAP_COPY to mmap shared libraries. While this maps to MAP_PRIVATE | MAP_DENYWRITE on Linux, Linux ignores any MAP_DENYWRITE specification from user space in mmap. With this change, all remaining in-tree users of MAP_DENYWRITE use it to map an executable. We will be able to open shared libraries loaded via uselib() writable, just as we already can via dlopen() from user space. This is one step into the direction of removing MAP_DENYWRITE from the kernel. This can be considered a minor user space visible change. Signed-off-by: David Hildenbrand --- arch/x86/ia32/ia32_aout.c | 2 +- fs/binfmt_aout.c | 2 +- fs/binfmt_elf.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index 5e5b9fc2747f..321d7b22ad2d 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c @@ -293,7 +293,7 @@ static int load_aout_library(struct file *file) /* Now use mmap to map the library into memory. */ error = vm_mmap(file, start_addr, ex.a_text + ex.a_data, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_32BIT, + MAP_FIXED | MAP_PRIVATE | MAP_32BIT, N_TXTOFF(ex)); retval = error; if (error != start_addr) diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index 145917f734fe..d29de971d3f3 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -309,7 +309,7 @@ static int load_aout_library(struct file *file) /* Now use mmap to map the library into memory. */ error = vm_mmap(file, start_addr, ex.a_text + ex.a_data, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE, + MAP_FIXED | MAP_PRIVATE; N_TXTOFF(ex)); retval = error; if (error != start_addr) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 439ed81e755a..6d2c79533631 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1384,7 +1384,7 @@ static int load_elf_library(struct file *file) (eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr)), PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_FIXED_NOREPLACE | MAP_PRIVATE | MAP_DENYWRITE, + MAP_FIXED_NOREPLACE | MAP_PRIVATE, (eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr))); if (error != ELF_PAGESTART(eppnt->p_vaddr)) -- 2.31.1