From nobody Mon May 6 22:01:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1570835905; cv=none; d=zoho.com; s=zohoarc; b=W/8Vku7YMQOVap9W03oA3X2Tv5Iu6db0khVYvoDrWH6X4Sxv/2uXLYwm2AOmVLZZ44OTwupd2o8vkLT7t3QDSatJk3iycYGTNy+fNR3ocEeMqVraydqpRQo/bvoG4EzID6U7c9ERzUHaRAAU/uQEMKCemm6Teze5bEJsjhAjotQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570835905; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=UtUDd5e/TA51h4IZxO1cpupAltRdyzMyfziFMZdbB/U=; b=gDqXvcS6LK+G945QZ7L/rGRpvLHRiuuHKc5ulCK6o5Q+53KPh1kClqSj5LOIdO3Tk+ylK5dDUpPNDngqRN9VAyzUicTlYhuo1aUQL5WSjdApbx/ab3Q/TBJYthpcR7wCDZQDR63uK+2u7LQSDLV8kZYCpfKKjXcLSgacfY64jVk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1570835905385652.4399656864053; Fri, 11 Oct 2019 16:18:25 -0700 (PDT) Received: from localhost ([::1]:57790 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iJ4Ar-0001YJ-DX for importer@patchew.org; Fri, 11 Oct 2019 19:18:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37929) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iJ47H-0000eL-3D for qemu-devel@nongnu.org; Fri, 11 Oct 2019 19:14:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iJ47F-0001Jd-Dl for qemu-devel@nongnu.org; Fri, 11 Oct 2019 19:14:34 -0400 Received: from mail-qt1-x843.google.com ([2607:f8b0:4864:20::843]:44330) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iJ47F-0001JJ-4B for qemu-devel@nongnu.org; Fri, 11 Oct 2019 19:14:33 -0400 Received: by mail-qt1-x843.google.com with SMTP id u40so16174428qth.11 for ; Fri, 11 Oct 2019 16:14:32 -0700 (PDT) Received: from ip-172-31-33-50.ec2.internal (ec2-34-206-44-154.compute-1.amazonaws.com. [34.206.44.154]) by smtp.gmail.com with ESMTPSA id 194sm4305953qkm.62.2019.10.11.16.14.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 Oct 2019 16:14:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=berkeley-edu.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=UtUDd5e/TA51h4IZxO1cpupAltRdyzMyfziFMZdbB/U=; b=kp4iHyo3TaywfyDOiK+F/61RdOqMWz28RUJq+PdXiO1NrDfhTErkDbHUfv7T7DBUog 56eoIOFMtMQ6sDZgwzHDUNIpjbxQ5xVJyhP8G16BbbB1wricN8KJ7I9L6JeGEir3zccP lqyDfyRrhToeGaGp6m6ZBOMwUpWkObz+YDVnToCoiv/mcUDA/dqzB/WnYrVnF9NVh953 VkAB89aNLnurH8364HssS2pz/5hMudAUTEu8Vxr+En7IJuANWCZlKXSIxZ2BV42s69Y3 Z7yfEt/SN7b/9V6aGOEnsYwUm56op4HYcQLiuOVlf49s56itglAUta6V5JoOA6L/FVbf G+/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=UtUDd5e/TA51h4IZxO1cpupAltRdyzMyfziFMZdbB/U=; b=W9D6z5ryMHR9iemkuqK/HMON1vaUy+dVbjaMo3r7W8Y1+aef8JtE03yBhU5IvOUskO 5rdh0hvgc2evkn0qZzk8CPFBMxY+yamz5094oI2/5KZSRHtW55uXKG42dzy3OUzpRgp1 hStXAVg798ujSOFn6KcECZ/2rPug/q0VFdJUkNWWn1IIf9Z3ni2AAJixJ/x3g4llsgP7 1V0vAaSXN42G02PpS65V0fXSqWssq9b2VRIQBFPnnJ5x7USRap0TWZz3B3ngK27cfrCW 7vs7gu4nrO6oI8HRMNm5+9gXcHU4jlziKzrk0ZmsczEjO+jhB6AJGzPWsKoZQGox/F3k f41g== X-Gm-Message-State: APjAAAU1t8XnMbVqvaGD4eiTT3h84Sw+QmrtxCKqJIMwhlY1mFLouy0y X1akm7LBDhtHG5c/XvQxDghKKLgoqi+LUQ== X-Google-Smtp-Source: APXvYqzRNlsgXmhqdup3Wb2rVu1disrPOOGbhEAj28ZsHBVFKB0kQ+GIZwMy/rvDVtwhuBL4a4QGxw== X-Received: by 2002:ac8:550d:: with SMTP id j13mr19683509qtq.37.1570835671728; Fri, 11 Oct 2019 16:14:31 -0700 (PDT) From: Dayeol Lee To: qemu-devel@nongnu.org Subject: [PATCH] target/riscv: PMP violation due to wrong size parameter Date: Fri, 11 Oct 2019 23:14:06 +0000 Message-Id: <20191011231406.9808-1-dayeol@berkeley.edu> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::843 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "open list:RISC-V TCG CPUs" , Sagar Karandikar , Dayeol Lee , Bastian Koppelmann , Palmer Dabbelt , Richard Henderson , Alistair Francis , diodesign@tuta.io Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" riscv_cpu_tlb_fill() uses the `size` parameter to check PMP violation using pmp_hart_has_privs(). However, if the size is unknown (=3D0), the ending address will be `addr - 1` as it is `addr + size - 1` in `pmp_hart_has_privs()`. This always causes a false PMP violation on the starting address of the range, as `addr - 1` is not in the range. In order to fix, we just assume that all bytes from addr to the end of the page will be accessed if the size is unknown. Signed-off-by: Dayeol Lee Reviewed-by: Richard Henderson --- target/riscv/cpu_helper.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index e32b6126af..7d9a22b601 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -441,6 +441,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, CPURISCVState *env =3D &cpu->env; hwaddr pa =3D 0; int prot; + int pmp_size =3D 0; bool pmp_violation =3D false; int ret =3D TRANSLATE_FAIL; int mode =3D mmu_idx; @@ -460,9 +461,19 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, i= nt size, "%s address=3D%" VADDR_PRIx " ret %d physical " TARGET_F= MT_plx " prot %d\n", __func__, address, ret, pa, prot); =20 + /* + * if size is unknown (0), assume that all bytes + * from addr to the end of the page will be accessed. + */ + if (size =3D=3D 0) { + pmp_size =3D -(address | TARGET_PAGE_MASK); + } else { + pmp_size =3D size; + } + if (riscv_feature(env, RISCV_FEATURE_PMP) && (ret =3D=3D TRANSLATE_SUCCESS) && - !pmp_hart_has_privs(env, pa, size, 1 << access_type, mode)) { + !pmp_hart_has_privs(env, pa, pmp_size, 1 << access_type, mode)) { ret =3D TRANSLATE_PMP_FAIL; } if (ret =3D=3D TRANSLATE_PMP_FAIL) { --=20 2.20.1