From nobody Fri Nov 14 12:18:20 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1587741015; cv=none; d=zohomail.com; s=zohoarc; b=M3cgT4DfTM0qNzsmqOZNWIsomy+rjomq4GElUeIMTGkiKEkS2SYaXacMOEzWvmYItMlLgoXggNxwF4mpSq7rQsR0sV/FGOFP8WWXTrc1b7AC+rvFAmi+YWdFOKMK4ifSzvXUJ8nn47OhEWIa7lUD9EV84udC78p4eYMCO/FDH2s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587741015; h=Content-Type:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=uSkPVDChwZc8xxyCwwHERfg3imtvy6OvSKH/C59zyPg=; b=fBSkT80SZDPy1GSUc91paZeRqTxwoHpj9eFweEhalx/uaHhdUHW7Pbxr/5XOeDmQno0uQnMzHPToytQOin8OG944t8UyWh0+emWUbb7fY7kwvzW4ijiNXhqwGx6dzmpiPUhrTOLajfYhZsY8KYR15d8RtQy09JeIeE0Y0A8e+6s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158774101568258.3594526097304; Fri, 24 Apr 2020 08:10:15 -0700 (PDT) Received: from localhost ([::1]:40910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jRzy1-00026O-SB for importer@patchew.org; Fri, 24 Apr 2020 11:10:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46866) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jRzxC-0001Rf-Mv for qemu-devel@nongnu.org; Fri, 24 Apr 2020 11:09:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jRzxB-0005bW-IR for qemu-devel@nongnu.org; Fri, 24 Apr 2020 11:09:22 -0400 Received: from mail-il1-x141.google.com ([2607:f8b0:4864:20::141]:33529) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jRzx9-0005Nh-26; Fri, 24 Apr 2020 11:09:20 -0400 Received: by mail-il1-x141.google.com with SMTP id q10so9576576ile.0; Fri, 24 Apr 2020 08:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=uSkPVDChwZc8xxyCwwHERfg3imtvy6OvSKH/C59zyPg=; b=QdXvDE0PdpQa0Ug6WIDVv3I44GCMxubGTJNph4O9Y6sQMMC6QA1vNJUiIALgkY/nnt iC6NQFPOkK58H71MYs8rORCJ+oVjlQz0A5lYQHmvQZWqopPKdBqiIltRP1+TKT9PsSGL /IV4J1RwD/+jQo4B5anZJ+mzhH6p3Xa3zOc20QG/7E5ohr5h2if2zhvAuY2vAlFyWvdB 6zYjb3IArmiNe0ah4SOEIHjoYmbt0Vz9tT+Nsno+SPBkCkXkbsjgGGXlQ0OoU8plUZZa rwLJ6F1CSVGoc7FXTZtmC7eNBPO2sZPSlCCTstxVX8G4k18s4vm7LKvlwM2hTihsZD4b 5CJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=uSkPVDChwZc8xxyCwwHERfg3imtvy6OvSKH/C59zyPg=; b=lvRgOG6/iZkedOkKsxoRmbnqbqpE9BI9N0962QVzbgYFvusKpCDwkYHQvLeDaznLu9 MH8q2j7misOKtoYuXJ3WqyION+d1dmkjMH7XFQjjnF9lBmUAfPJilanPYGMQtozB1LEs CEMjHCPX5PfSjSkjePZDIunXdDPfby8uTwBvExY2SVjZ7HGObRDfba4DpMQe31LZnrxj xNcVAuI4ldKQcT57+HJSpvLP+RlmZRKdvum143JCp/EOJm4B74TI2J37Ut6B3xTP8Cm6 MEJTeW1e2h75TxkqkGtzlqRoYbFUZ+zJg5cz3owiJyWc6wQsF9bhcph1lXI+OzhJrHkO v0Vg== X-Gm-Message-State: AGi0PuY6FmDaTY6q9O7erXsyf/a5UHhqqhjeikuwEMy1Szoj35jkN6Nm /3NQTGpIw6w5+c5bpXpQBb+X+zvKEKxg+iRuiW4DdMHHdvw= X-Google-Smtp-Source: APiQypLdIGRc1Yep6wQI72lRKBR/RorX+6dMSvKQJDFIUvCm24ZEyYrci3TcPwUfqJpwFi+jTOs3Esx2G68f5BA+OeI= X-Received: by 2002:a92:985d:: with SMTP id l90mr9346296ili.108.1587740956159; Fri, 24 Apr 2020 08:09:16 -0700 (PDT) MIME-Version: 1.0 From: Jose Martins Date: Fri, 24 Apr 2020 16:09:04 +0100 Message-ID: Subject: [PATCH] target/riscv: fix check of guest pa top bits To: qemu-riscv@nongnu.org Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::141; envelope-from=josemartins90@gmail.com; helo=mail-il1-x141.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::141 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: alistair.francis@wdc.com, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The spec states that on sv39x4 guest physical "address bits 63:41 must all be zeros, or else a guest-page-fault exception occurs.". However, the check performed for these top bits of the virtual address on the second stage is the same as the one performed for virtual addresses on the first stage except with the 2-bit extension, effectively creating the same kind of "hole" in the guest's physical address space. I believe the following patch fixes this issue: Signed-off-by: Jose Martins Reviewed-by: Alistair Francis --- target/riscv/cpu_helper.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index d3ba9efb02..da879f5656 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -421,15 +421,21 @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical, int va_bits =3D PGSHIFT + levels * ptidxbits + widened; target_ulong mask, masked_msbs; - if (TARGET_LONG_BITS > (va_bits - 1)) { - mask =3D (1L << (TARGET_LONG_BITS - (va_bits - 1))) - 1; + if(!first_stage){ + if ((addr >> va_bits) !=3D 0) { + return TRANSLATE_FAIL; + } } else { - mask =3D 0; - } - masked_msbs =3D (addr >> (va_bits - 1)) & mask; + if (TARGET_LONG_BITS > (va_bits - 1)) { + mask =3D (1L << (TARGET_LONG_BITS - (va_bits - 1))) - 1; + } else { + mask =3D 0; + } + masked_msbs =3D (addr >> (va_bits - 1)) & mask; - if (masked_msbs !=3D 0 && masked_msbs !=3D mask) { - return TRANSLATE_FAIL; + if (masked_msbs !=3D 0 && masked_msbs !=3D mask) { + return TRANSLATE_FAIL; + } } int ptshift =3D (levels - 1) * ptidxbits; --=20 2.17.1 Jose