Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp3339382pxu; Mon, 30 Nov 2020 00:12:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJzPn5K4Bvhp1cRAhuthwu/sn9H/q1vZ+n9eX7JKftyb2KfHzYdcB4ysJqFwLat3DPCMk+2A X-Received: by 2002:a50:8a02:: with SMTP id i2mr15006435edi.222.1606723962213; Mon, 30 Nov 2020 00:12:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606723962; cv=none; d=google.com; s=arc-20160816; b=e+MDcq2dKtpeM/DmTf8+VGssc3gTHZpc8cts7r3wE5zDVP31gN0LjDPV4Fu1zL60Oq OV3Z+W4dBWYS9oQps8qJ07quVf9+Nr59VQFks64tXuQpBB8pPR3o3M4nVF4ei6aVLc56 gMR1P/2EqZiK79MIDq104duNulGrcL1GROCcXs+galLQyPkUPF67t2oLPQkHgOzSfvoO tb6tlGFqjM/IiBFXLbuJwU6e3uSJdqSfLN2q5t7RDxUWO4EqjDLaKLPpQL6mjpT8II02 NS9BTG2yvX/adfxAhgf2yDWAPG1we35PJEBjJxcAm/nNph6xoL10fBwGH1osJZjbpC/r sn4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=/sejjbzH1VPFW9nCTItPee2k0fSpsfkmZsIeiucrGOg=; b=yaaw8S26VrTOCpqoU4eKV0BiLfHzv6f+p1ngl5XTSYfJgLkwq2BCa/ZhGFb+0bEMxk PtcP54UhJyl8p3DSf7R+GW5BToN0R1JWgbFaMrP2QrQZxVr/k5UmMlJZwBKBaeeVIvy1 9gBHW6s/qqDzxTWE4up/zgclHOfy4i2urjJBg3z2PMBlHEvtKyAXJ/lMKlTkUVJsMvhi q6YN+0vORxLZ0RGqHr4F/usM62CS+xVAFxIoUH6LPeewXcuGjKuUqBmYUehK3FweJ+TV 01DeAr/hitrmZ23iU29pQRVJijO/ExT6bUpbgfsDzcQNHGvhxOUfS0H8EqnIV3yTeXaC dUgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=SVdLFF7x; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id rk28si10212836ejb.711.2020.11.30.00.12.17; Mon, 30 Nov 2020 00:12:42 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=SVdLFF7x; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725976AbgK3III (ORCPT + 99 others); Mon, 30 Nov 2020 03:08:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725860AbgK3III (ORCPT ); Mon, 30 Nov 2020 03:08:08 -0500 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5AD2C0613CF for ; Mon, 30 Nov 2020 00:07:21 -0800 (PST) Received: by mail-ej1-x642.google.com with SMTP id f9so17699373ejw.4 for ; Mon, 30 Nov 2020 00:07:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=/sejjbzH1VPFW9nCTItPee2k0fSpsfkmZsIeiucrGOg=; b=SVdLFF7xWJW5PzYeW9PtVHqnHFgfFlnAz3/olfCk/llK8OyX90C4rRBhMB3CYrHmOe A7EpvTlnGEtmlofIG8Hgiq9r91C59oqB8tfqi1kuujktvDkKf8o7UlUTtlV1hf36aIoP ifQTGBWYcYhMS1ppQN/oUk/Q35LyHErN3ZSnwtDCCK6SIZsnvGj2bTD7P+hoviTsF/5M TNrdCHepOsPVkyAfaNLGCfPri1BI1J3qlk+oXe01glbyFhcSWSuN6NzPZkz75KIHLrxp 5DU+d17e4kxx+hktfZ+VSAu9y6z9tVRrCQXh7mWdaQvVr/DNys2HPes/DASFldyXZ/Gd N/1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=/sejjbzH1VPFW9nCTItPee2k0fSpsfkmZsIeiucrGOg=; b=r+sP4SyyRsKCL1/wehQjR5EjVfByZF/wt3Nikgn/EJ15stDedT5F0eOcRvSYdVli6u bbfHzDwVfQql75Tj3m0b63HJeRwJkfBwp2WbCrY1c5P9S4sadyJrJOWjXmpEH9TzgK+o uWweQ2EqzL1mldWT4f9ZyL6SEWc6nw9SAnc4x2EwrQ2GksN9Zbr2DFkS25mbHa2y/c1v 6fTYnjiICJggxPwN+tXbW5FDxGUzpYZF8jgEb0aQPCeNPMquQpLI9gRgA63B1uVZFaxQ egCQ1ZPomslJ4MCfnejalZV4B+t3eVyhaKACo7feAsVVh1qf8J1QkOxPr2eLL19ksUv9 envQ== X-Gm-Message-State: AOAM530WA8Pky+mbphLe8CQ5gStboHojEWR7SKqg7t8h3Ho0be9GotRl SCvr7fwlTINnTw9JKMqnvnC2giY57++7GHF68uc= X-Received: by 2002:a17:906:d8a9:: with SMTP id qc9mr19435353ejb.482.1606723640479; Mon, 30 Nov 2020 00:07:20 -0800 (PST) MIME-Version: 1.0 References: <20201130053037.27006-1-tesheng@andestech.com> In-Reply-To: <20201130053037.27006-1-tesheng@andestech.com> From: Pekka Enberg Date: Mon, 30 Nov 2020 10:07:03 +0200 Message-ID: Subject: Re: [PATCH] riscv/mm: Prevent kernel module access user-space memory without uaccess routines To: Eric Lin Cc: LKML , linux-riscv , Michel Lespinasse , Daniel Jordan , Peter Xu , Andrew Morton , Albert Ou , Palmer Dabbelt , Paul Walmsley , dslin1010@gmail.com, Alan Kao Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 30, 2020 at 7:33 AM Eric Lin wrote: > > In the page fault handler, an access to user-space memory > without get/put_user() or copy_from/to_user() routines is > not resolved properly. Like arm and other architectures, > we need to let it die earlier in page fault handler. Fix looks good to me. Can you elaborate on how you found the issue and how the bug manifests itself? > > Signed-off-by: Eric Lin > Cc: Alan Kao > --- > arch/riscv/mm/fault.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c > index 3c8b9e433c67..a452cfa266a2 100644 > --- a/arch/riscv/mm/fault.c > +++ b/arch/riscv/mm/fault.c > @@ -232,6 +232,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs) > if (user_mode(regs)) > flags |= FAULT_FLAG_USER; > > + if (!user_mode(regs) && addr < TASK_SIZE && unlikely(!(regs->status & SR_SUM))) > + die(regs, "Accessing user space memory without uaccess routines\n"); Let's introduce a die_kernel_fault() helper (similar to arm64, for example) to ensure same semantics for the different kernel faults. You can extract the helper from no_context(). > + > perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr); > > if (cause == EXC_STORE_PAGE_FAULT) > -- > 2.17.0 > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv