Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp673720imu; Thu, 22 Nov 2018 03:45:02 -0800 (PST) X-Google-Smtp-Source: AFSGD/Wl4Uo4WhVcJK0S4fOVCi84h9T7+6Z3lTmgTBaga6rK55qCEn+fu1aemZM5Mkx7mVAYy8rn X-Received: by 2002:a17:902:20e9:: with SMTP id v38mr9222679plg.250.1542887102360; Thu, 22 Nov 2018 03:45:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542887102; cv=none; d=google.com; s=arc-20160816; b=K4lv/NFedAJWnNfGI7tJP5d5lJzxMb8fZjznlZkwXjJSYqm85kpH7OUhClJhYoudvr iRrgrlni8KsZ2At+Sgq1cffwIB97It8YLfPD2LtHqOYBQG2XPqeI/n2d9/Wd4my2ufRo d7VMvERNTkIwMr8OkPvWDmjRPNX0kvda4dLY4tI2wivZZOzzkA+GejG6DcjRSMIBHTHl dK+4HAq2LsJpIsqRBuc64+VWelYeDgKkufZNi8cLXqzfWrGc/wEkW1hp4RzR7mFO1+Z+ 36YJcsnup9xmZKLz9iDjMWDAGXjlynVwsrFIwEjlTLwOCu/CJs/91AskEDfgvtnQWeZT 5ecQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id:dkim-signature; bh=+DqmAef9nynSzpToR29ufZifS3WEaqaPTIrDN/QrLhc=; b=SHbfO8CuEFfsEqSB7J0tozdSoG/yOFxUrAr1kVhDaPHKb3vFTlXXrENtIKBKVCZ1LR oyEa/8jWPm92CrMgyRFhc0gPX0zEVyEnDvA2ZgI02LgUQnW0HeQ9ZYqjLuE9b/GkSswB i39DN1AhcCzspvNp7OP+MmZP692vinvDVADVmaRK4YV0bUIwTlWjSLZW5ABfwhUTYtwa j63cixH1RXe4r99t0lx5MbaNuCqTcMj26o7VLXGaUU2UWcD3fGkGeP/udttaYzpkonvD 1v7uLksh7IhxQYiXh7AQ5Lsrip94bJdP+0M3blQ49xa1Iyasn3AJzrJ+28STfRhqz4h3 3ZDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=ShnQP+Q0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h6si35635992plk.231.2018.11.22.03.44.47; Thu, 22 Nov 2018 03:45:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=ShnQP+Q0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391347AbeKVMBt (ORCPT + 99 others); Thu, 22 Nov 2018 07:01:49 -0500 Received: from out4-smtp.messagingengine.com ([66.111.4.28]:43443 "EHLO out4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729285AbeKVMBt (ORCPT ); Thu, 22 Nov 2018 07:01:49 -0500 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 933D72120D; Wed, 21 Nov 2018 20:24:51 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Wed, 21 Nov 2018 20:24:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=+DqmAef9nynSzpToR29ufZifS3WEaqaPTIrDN/QrL hc=; b=ShnQP+Q0abDzOMhwD/kze1rhnUBYjj5deLGoz1vQsAMhApcnM2FgGscGs fJ3G5IxZFmRYlDB6gB4pKDZY9vjvnNiC71bA8oHFAICQHGAJl8KG1azBf66Xaa0I hOSS9TidIKQiYbSf6nYYlE/HcYgGLav6Q0kR6KuNhsHqWDpEHzgaQAqdHtIqr/p4 yvgtUtHPYWEbPxEGTmaVtK4AR45dvBA/ebe6IF52ro1ySWrdNy/eKHBGuIBZ53HK UJABjY86JuFVljMdG8h1hjMKvbMIfV+BJbeXVHXCX6GRRA+eAroJdkBKBPgaSLYM Y4t5ZeYGA25dQVslxgxR30N9ZavJQ== X-ME-Sender: X-ME-Proxy: Received: from crackle.ozlabs.ibm.com (unknown [122.99.82.10]) by mail.messagingengine.com (Postfix) with ESMTPA id 39E78102DE; Wed, 21 Nov 2018 20:24:46 -0500 (EST) Message-ID: <0d599e228d336c532b4d4bcde31be5f5565dce1b.camel@russell.cc> Subject: Re: [RFC PATCH v1 5/6] powerpc/mm: Add a framework for Kernel Userspace Access Protection From: Russell Currey To: Christophe LEROY , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Thu, 22 Nov 2018 12:25:18 +1100 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.30.2 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 2018-11-21 at 09:32 +0100, Christophe LEROY wrote: > > Le 21/11/2018 à 03:26, Russell Currey a écrit : > > On Wed, 2018-11-07 at 16:56 +0000, Christophe Leroy wrote: > > > This patch implements a framework for Kernel Userspace Access > > > Protection. > > > > > > Then subarches will have to possibility to provide their own > > > implementation > > > by providing setup_kuap(), and lock/unlock_user_rd/wr_access > > > > > > We separate read and write accesses because some subarches like > > > book3s32 might only support write access protection. > > > > > > Signed-off-by: Christophe Leroy > > > > Separating read and writes does have a performance impact, I'm > > doing > > some benchmarking to find out exactly how much - but at least for > > radix > > it means we have to do a RMW instead of just a write. It does add > > some > > amount of security, though. > > > > The other issue I have is that you're just locking everything here > > (like I was), and not doing anything different for just reads or > > writes. In theory, wouldn't someone assume that they could (for > > example) unlock reads, lock writes, then attempt to read? At which > > point the read would fail, because the lock actually locks both. > > > > I would think we either need to bundle read/write locking/unlocking > > together, or only implement this on platforms that can do one at a > > time, unless there's a cleaner way to handle this. Glancing at the > > values you use for 8xx, this doesn't seem possible there, and it's > > a > > definite performance hit for radix. > > > > At the same time, as you say, it would suck for book3s32 that can > > only > > do writes, but maybe just doing both at the same time and if > > implemented for that platform it could just have a warning that it > > only > > applies to writes on init? > > Well, I see your points. My idea was not to separate read and write > on platform that can lock both. I think it is no problem to also > unlocking writes when we are doing a read, so on platforms that can > do > both I think both should do the same.. > > The idea was to avoid spending time unlocking writes for doing a read > on > platforms on which reads are not locked. And for platforms able to > independently unlock/lock reads and writes, if only unlocking reads > can > improve performance it can be interesting as well. > > For book3s/32, locking/unlocking will be done through Kp/Ks bits in > segment registers, the function won't be trivial as it may involve > more > than one segment at a time. So I just wanted to avoid spending time > doing that for reads as reads won't be protected. And may also be > the > case on older book3s/64, may not it ? > On Book3s/32, the page protection bits are as follows: > > Key 0 1 > PP > 00 RW NA > 01 RW RO > 10 RW RW > 11 RO RO > > So the idea is to encode user RW with PP01 (instead of PP10 today) > and > user RO with PP11 (as done today), giving Key0 to user and Key1 to > kernel (today both user and kernel have Key1). Then when kernel needs > to > write, we change Ks to Key0 in segment register for the involved > segments. > > I'm not sure there is any risk that someone nests unlocks/locks for > reads and unlocks/locks for writes, because the unlocks/locks are > done > in very limited places. Yeah I don't think it's a risk since the scope is so limited, it just needs to be clearly documented that locking/unlocking reads/writes could have the side effect of covering the other. My concern is less about a problem in practice as much as functions that only don't exactly do what the function name says. Another option is to again have a single lock/unlock function that takes a bitmask (so read/write/both), which due to being a singular function might be a bit more obvious that it could lock/unlock everything, but at this point I'm just bikeshedding. Doing it this way should be fine, I'm just cautious that some future developer might be caught off guard. Planning on sending my series based on top of yours for radix today. - Russell > > Christophe > > > > Curious for people's thoughts on this. > > > > - Russell > >