Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753406AbdLMPOq (ORCPT ); Wed, 13 Dec 2017 10:14:46 -0500 Received: from mga01.intel.com ([192.55.52.88]:17542 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753051AbdLMPOn (ORCPT ); Wed, 13 Dec 2017 10:14:43 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,397,1508828400"; d="scan'208";a="2224906" Subject: Re: [patch 05/16] mm: Allow special mappings with user access cleared To: "Kirill A. Shutemov" , Peter Zijlstra References: <20171212173221.496222173@linutronix.de> <20171212173333.669577588@linutronix.de> <20171213122211.bxcb7xjdwla2bqol@hirez.programming.kicks-ass.net> <20171213125739.fllckbl3o4nonmpx@node.shutemov.name> Cc: Andy Lutomirski , Thomas Gleixner , LKML , X86 ML , Linus Torvalds , Borislav Petkov , Greg KH , Kees Cook , Hugh Dickins , Brian Gerst , Josh Poimboeuf , Denys Vlasenko , Boris Ostrovsky , Juergen Gross , David Laight , Eduardo Valentin , aliguori@amazon.com, Will Deacon , "linux-mm@kvack.org" , kirill.shutemov@linux.intel.com, aneesh.kumar@linux.vnet.ibm.com From: Dave Hansen Message-ID: Date: Wed, 13 Dec 2017 07:14:41 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <20171213125739.fllckbl3o4nonmpx@node.shutemov.name> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 758 Lines: 24 On 12/13/2017 04:57 AM, Kirill A. Shutemov wrote: > Dave, what is effect of this on protection keys? The goal was to make pkeys-protected userspace memory access _consistent_ with normal access. Specifically, we want a kernel to disallow access (or writes) to memory where userspace mapping has a pkey whose permissions are in conflict with the access. For instance: This will fault writing a byte to 'addr': char *addr = malloc(PAGE_SIZE); pkey_mprotect(addr, PAGE_SIZE, 13); pkey_deny_access(13); *addr[0] = 'f'; But this will write one byte to addr successfully (if it uses the kernel mapping of the physical page backing 'addr'): char *addr = malloc(PAGE_SIZE); pkey_mprotect(addr, PAGE_SIZE, 13); pkey_deny_access(13); read(fd, addr, 1);