From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068881; cv=none; d=zohomail.com; s=zohoarc; b=Te7F+2CfJZj2nrJMQBjokQvfT5YDa1xC0pAhjrmwNForJMBL1xlePR0o6aUjCXqZJ+K05UHhmmo7E+QPgRcU3//r7yRSoEgISuoMOXgHXzEcoKIpSJfeQN7MstKCCb4OuwitxkbXHWIPVhVsAWGvgnvoVSD3oZ/2D2+O8rs7LZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068881; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Ady9NqbXl1TpoUN6B9C30ttWlGK5vJamM2lGeKTFSb8=; b=QOQzoR/SgzkiVXV+UDDsPTJQJ5rQsCyvDPapDRO6Z35mZ2dNIxVOSkDEgnpt14DElLBeXg4sYzqzWCA5miZ8U/DjzW4y49dH7sBw+Xo59mkcX7NuiMy9KES5ECElLYUMX2+E1vqS+M/zk9NyZdv9ZOPHvzvLFycofoLNMHBKEXI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 167806888151115.153331037124303; Sun, 5 Mar 2023 18:14:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Li-0003EN-D9; Sun, 05 Mar 2023 21:13:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lg-0003Dq-Mu for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:12 -0500 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Lf-000606-6v for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:12 -0500 Received: by mail-pg1-x52a.google.com with SMTP id q23so4629574pgt.7 for ; Sun, 05 Mar 2023 18:13:10 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068789; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Ady9NqbXl1TpoUN6B9C30ttWlGK5vJamM2lGeKTFSb8=; b=pJr/lKqc+axnjxicbWBuYHrR/GJDNBUQM71S/dgLNVsOflmAU2RDypLqa2c1W1fLH1 qQcCz9uzYPLDgay4U97n6hMNdz0F7twONfI1O2NgHRyOpRFM4miJkN1+4IL62PNDRt2v m7rFkWzB64KHW1VvjIN0VqwXcwf6hG0AyiTUxwYcInlOgAedR2l7Oos+TlkQVOZnJNZc nI8ENTSz7qGL8xkjOF+giYOQWp9jZKAY9B6o9YekLDuwneiI4EdBUGiSy9qRHlM31878 ge9CtJNWg/5BeemlL+FI6I+E3o3fkny+B+AzVPXW4n5aFp52xUZhujKaxKsLe3eX9Nik IGew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068789; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ady9NqbXl1TpoUN6B9C30ttWlGK5vJamM2lGeKTFSb8=; b=GxKtjRecosZTVDF8DuxouBzkocDpR2VX64dyqGmBmUlVak1ZbQWPqo2UmYG32E4eXt 7+Q8N3D7M7mOHu5fPx7uU3O/P5/OL8HKGTeNxReVY8sMhBpUhNJHjxOac+ytHshUiBuC YbWKU615cSGed5j6KI2t4AJEb1rGuSfvKCBMxX9jLutOLMpPl7adm4zgbuy2bVYh2Inv NPJqtC1DkLL9zNBxHkRgfaOhLPvaacZvtKQvCC0JuboZgeokmvZaJ+jVO8GqMUMQGY5d I9VU22BG726Qk4W+uoYE1A3EghOoymg4LkGsra3ncuC3SdosDo13bIPcMaQbNo3bDluX jr1Q== X-Gm-Message-State: AO0yUKUDLIThyf/zKiaifa+X5PtAkJ3y8tNOZoQ+iUIeKUGNMytzI2gd 3b5gDfBjdAoTH7rQ4jCHUNxLx+cnz6RS7vYoR+EV0A== X-Google-Smtp-Source: AK7set+Q9sQwf4oqmX0R+Q5/NLHSci0SkYRb/URgwVmaARfFBpCuO3M8r+WVCk0kwQzKRlHdHgMDCw== X-Received: by 2002:a62:1814:0:b0:5ef:6f18:9d55 with SMTP id 20-20020a621814000000b005ef6f189d55mr8221628pfy.28.1678068789480; Sun, 05 Mar 2023 18:13:09 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 1/9] linux-user: Diagnose incorrect -R size Date: Sun, 5 Mar 2023 18:12:59 -0800 Message-Id: <20230306021307.1879483-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::52a; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068883119100001 Content-Type: text/plain; charset="utf-8" Zero is the value for 'off', and should not be used with -R. We have been enforcing host page alignment for the non-R fallback of MAX_RESERVED_VA, but failing to enforce for -R. Signed-off-by: Richard Henderson Tested-by: Joel Stanley Tested-by:NinadPalsule > --- linux-user/main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/linux-user/main.c b/linux-user/main.c index 4ff30ff980..f4dea25242 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -395,6 +395,16 @@ static void handle_arg_reserved_va(const char *arg) fprintf(stderr, "Unrecognised -R size suffix '%s'\n", p); exit(EXIT_FAILURE); } + if (reserved_va =3D=3D 0) { + fprintf(stderr, "Invalid -R size value 0\n"); + exit(EXIT_FAILURE); + } + /* Must be aligned with the host page size as it is used with mmap. */ + if (reserved_va & qemu_host_page_mask) { + fprintf(stderr, "Invalid -R size value %lu: must be aligned mod %l= u\n", + reserved_va, qemu_host_page_size); + exit(EXIT_FAILURE); + } } =20 static void handle_arg_singlestep(const char *arg) --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068870; cv=none; d=zohomail.com; s=zohoarc; b=CWBtPkCMskablCmhZ0S6KYA//IGCPp52tL3Q2jzy+eXfWOVe059g4l/yatrq/3lQxVsm0Gz0CJXI+xQ+Xnj0hdxoYwnk4v9We4YDe2F1zU8u7sX5AgkWFWIRMAgurcf+8+NW7iaQRpp9fcoVKWPj3cBFaJmz7eGME01HgrF5OSM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068870; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=U6sNLD8XHJNiSXrFn1QLQM94uDPxds/0DDVitXItwws=; b=RXEdDamRxPVRECk6e2NBniDwDWFUtxQsCk7GaRJgh9hC1ej0Sy0/j5kO5+8T3BaEqgbXFSA54DSSNZiUJSJwB0RY2HwUvM6P9rbxdrHZNGp0dP7Otgm2aBN1Umd60JpBb97KTFnieBzWBNXwVuuXBKG4+2GHOSLrsWK9YB6C9aY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068870647198.3323728056505; Sun, 5 Mar 2023 18:14:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Li-0003EO-ML; Sun, 05 Mar 2023 21:13:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lh-0003Dz-9O for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:13 -0500 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Lf-00060k-O2 for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:13 -0500 Received: by mail-pj1-x1029.google.com with SMTP id h17-20020a17090aea9100b0023739b10792so7532141pjz.1 for ; Sun, 05 Mar 2023 18:13:11 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068790; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=U6sNLD8XHJNiSXrFn1QLQM94uDPxds/0DDVitXItwws=; b=GXbui6B0Ff5augnmFC3SJ9MST6JBFnwBZcnR2OMqZyGPTbgnw/yxKLkNacspnPb4f2 mdPGLpD5GcIUr/NjZSzRs3LTgoykIb3eIvMFiCOFW35tx6/6b+IEQizZZGrF3BnyweoW itBm7FpeczYhSvzgF2IYTn9X/kPpymIVI581GNB3e05HWBAh5REZk7x1rQEC2lqC6uMc ma3b9xLg0T2zGdBeLPhBu7mXRBVNtaEZs7HaFMjBj2Y6kfM69b3jWzwnBzOQN88o0l9w Y+jcw1DsCb1YoJvNVqAWkB2cFrffNXtqQUwhpvNIUQUWfafFyX6ozb/tPp2YiYgGTTwX xuIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068790; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U6sNLD8XHJNiSXrFn1QLQM94uDPxds/0DDVitXItwws=; b=F397NXeZq8iz1ncczA6/Y+sNbAhMa78CvjWvrd+fgxbasXK4tPxyTpHgZZ6fkkWXLN wfy82gO3Z5VObRu4Xd5nZ6/L0H5srTgo5tWr2/zWVIgRaI6ls+BgAWaUAqzyiHhNRms1 jWEt5PTPW0SQ4Ajel3MUmnRdfyfgN+D9aO6MRBfKQMAQis0ZoprDj2j5Dt6WDBJVhzCu F5LDU83Qr7lUTYUMrn1jNjASdwCdnfHR+uC8LvIz9a019YPNn/W6Bl9u4qG3matx6mGx 7eB4iZEAoxkJRKRyOh2y3T34/c/Ru19OFxxFY72vVJiDjLoSyYgnsXw+txqgHCncZuyg JQoA== X-Gm-Message-State: AO0yUKWsQEtMojfz0HYQBBW9VIHObLyCdwilFRJJUC/qBWKmFTCE0i37 a/Dwp+zmZxOiHpXFVzt3ipkC6xwFvWV8ErHswljDuw== X-Google-Smtp-Source: AK7set/GmDGrIw4mNYfySjnN3/NioN4HjajFk6bXPYt66ruqSuGWukWVHsResvld2+5m5vop2H555w== X-Received: by 2002:a05:6a20:8f27:b0:cc:65c3:c8cb with SMTP id b39-20020a056a208f2700b000cc65c3c8cbmr10653059pzk.42.1678068790318; Sun, 05 Mar 2023 18:13:10 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 2/9] linux-user: Rename max_reserved_va in main Date: Sun, 5 Mar 2023 18:13:00 -0800 Message-Id: <20230306021307.1879483-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068871028100001 Content-Type: text/plain; charset="utf-8" Rename to local_max_va, to avoid a conflict with the next patch. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Joel Stanley Tested-by:NinadPalsule > --- linux-user/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/linux-user/main.c b/linux-user/main.c index f4dea25242..5fcaddffc2 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -680,7 +680,7 @@ int main(int argc, char **argv, char **envp) int i; int ret; int execfd; - unsigned long max_reserved_va; + unsigned long local_max_va; bool preserve_argv0; =20 error_init(argv[0]); @@ -786,9 +786,9 @@ int main(int argc, char **argv, char **envp) * still try it, if directed by the command-line option, but * not by default. */ - max_reserved_va =3D MAX_RESERVED_VA(cpu); + local_max_va =3D MAX_RESERVED_VA(cpu); if (reserved_va !=3D 0) { - if (max_reserved_va && reserved_va > max_reserved_va) { + if (local_max_va && reserved_va > local_max_va) { fprintf(stderr, "Reserved virtual address too big\n"); exit(EXIT_FAILURE); } @@ -797,7 +797,7 @@ int main(int argc, char **argv, char **envp) * reserved_va must be aligned with the host page size * as it is used with mmap() */ - reserved_va =3D max_reserved_va & qemu_host_page_mask; + reserved_va =3D local_max_va & qemu_host_page_mask; } =20 { --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068864; cv=none; d=zohomail.com; s=zohoarc; b=il1JH0PSDz4I1UidA/XzMaNVdY75U/u+qDBITzOxKPisK8bPJ18A4dwRE4B5VOdrcpDeXelX2XTAhQt6QDw1cyiuXQ5TKX99Rz3fPnD4WvyGNUty7zjQ1dNBk98nSrADV+o2481DyL7QEcJdvkMP+TLEyM+6xw37acIHdqJnuHg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068864; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QlRIa4mqF+/zPLE6gRuo0J3urdHypr+y4L2ws8MEG1I=; b=UC0UXm/f08D+SyCwvKl0iOByUIbZaB4O2eKDdfdrE0h8bUB6zCPgdsbWaxufD3nQfJZF2QDcgAxZ5VE5ZDomBzjT38AhQKNEbvokMn3TULVr05NWgcgFah/jSgHSKEORX9O6dfQ8oz2Qxlj7Nq3fRJJAgcwNSkl4YKWFDIG59WE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068864765217.1154058858807; Sun, 5 Mar 2023 18:14:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Ll-0003Fc-3y; Sun, 05 Mar 2023 21:13:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lj-0003Et-Jc for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:15 -0500 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Lg-00061U-TO for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:15 -0500 Received: by mail-pl1-x635.google.com with SMTP id a9so8649052plh.11 for ; Sun, 05 Mar 2023 18:13:12 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068791; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=QlRIa4mqF+/zPLE6gRuo0J3urdHypr+y4L2ws8MEG1I=; b=DE+/LtxL0NKgA/930lO6R64pIzUZyw83exoB+6WMuhyEph6kr+fKLqVV8Dmbf6Rpv8 5hnyTkxX5+Hg+OANZBg6iezo4Ss4/ilqXmw7Ky1BZG8jWBXfXjnXUBaFZb1ydxzq3JMU wBAe/y0Z264FR9QoNJSxy83aXv9R7Yyyg4BmQZ7FGYIIR0/hngC/nLrMeRwxz2Cgxlx2 ZktLbvCpyKZJhLRDxUPfph7nFwODFx7B+W7yHeIKaEcttbWcZgm1oJU43S8zqSyvF5uI qpz1AAdgFDQZLtYcWucu3YsGMYZoDjipLa94E8w6RNJ69/sxWAhGLWcaMgixXQ2sN8aa U2qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068791; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QlRIa4mqF+/zPLE6gRuo0J3urdHypr+y4L2ws8MEG1I=; b=1OQmqxpCuHl37AnFD+OYnmF5Dt5zLU2XV3Tu2zFhM42KqG9RSOJiMDOeE6saG/feM7 IvSwO+IBdkV3wPNLNANrGZy162v1NcamQ4Uy9U48DXtZL4db/+OwYim+PhhA9csPBKXH nQ0oiN16sE6kCb2GfI+NZEMoBcmvFTmK4RCT5yJ2qm9Sts8w6/exSEmVMkzihOSmA0kz EwS8zxjMCA/W3nYwqompBePeoPeRhjdDG9JDRTTwx5EqUbPkDbsjTnm9kBng8FST4jpR o4DLK0D6RvnjDk4CCGysHO8EXpv4tMFJOS0f9++U2gDOlBBb2zMM6xXS8hgl9VJBHyF2 j+LA== X-Gm-Message-State: AO0yUKVZmYvdb5GjqJtnZfRRaf2cerenqCrGfH3nyGTXZqnGjRWy/Aq8 fkxpCic1cOw50x41vs4ZoYW5T5sVjGGNJgzToumdtw== X-Google-Smtp-Source: AK7set/zUd19oKURtk/T010xtKdSBtTsEDEXDaiV8k2Zrv762Hy2+9dlGA0RzfQrXuS4FleA7kBi+w== X-Received: by 2002:a17:902:cec1:b0:19e:ab29:1ec2 with SMTP id d1-20020a170902cec100b0019eab291ec2mr6640894plg.65.1678068791255; Sun, 05 Mar 2023 18:13:11 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 3/9] include/exec: Replace reserved_va with max_reserved_va Date: Sun, 5 Mar 2023 18:13:01 -0800 Message-Id: <20230306021307.1879483-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068865080100001 Content-Type: text/plain; charset="utf-8" In addition to the rename, change the semantics to be the last byte of the guest va, rather than the following byte. This avoids some overflow conditions. Signed-off-by: Richard Henderson Tested-by: Joel Stanley Tested-by:NinadPalsule > --- include/exec/cpu-all.h | 15 ++++++++++++--- linux-user/arm/target_cpu.h | 2 +- bsd-user/main.c | 18 +++++++----------- bsd-user/mmap.c | 12 ++++++------ bsd-user/signal.c | 4 ++-- linux-user/elfload.c | 36 ++++++++++++++++++------------------ linux-user/main.c | 36 ++++++++++++++++-------------------- linux-user/mmap.c | 20 ++++++++++---------- linux-user/signal.c | 4 ++-- target/arm/cpu.c | 2 +- 10 files changed, 75 insertions(+), 74 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 2eb1176538..7ef6b9a94d 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -152,12 +152,21 @@ static inline void tswap64s(uint64_t *s) */ extern uintptr_t guest_base; extern bool have_guest_base; -extern unsigned long reserved_va; + +/* + * If non-zero, the guest virtual address space is a contiguous subset + * of the host virtual address space, i.e. '-R reserved-va' is in effect + * either from the command-line or by default. The value is the last + * byte of the guest address space e.g. UINT32_MAX. + * + * If zero, the host and guest virtual address spaces are intermingled. + */ +extern unsigned long max_reserved_va; =20 /* * Limit the guest addresses as best we can. * - * When not using -R reserved_va, we cannot really limit the guest + * When not using -R , we cannot really limit the guest * to less address space than the host. For 32-bit guests, this * acts as a sanity check that we're not giving the guest an address * that it cannot even represent. For 64-bit guests... the address @@ -171,7 +180,7 @@ extern unsigned long reserved_va; #define GUEST_ADDR_MAX_ \ ((MIN_CONST(TARGET_VIRT_ADDR_SPACE_BITS, TARGET_ABI_BITS) <=3D 32) ? \ UINT32_MAX : ~0ul) -#define GUEST_ADDR_MAX (reserved_va ? reserved_va - 1 : GUEST_ADDR_MAX_) +#define GUEST_ADDR_MAX (max_reserved_va ? : GUEST_ADDR_MAX_) =20 #else =20 diff --git a/linux-user/arm/target_cpu.h b/linux-user/arm/target_cpu.h index 89ba274cfc..f6383a7cd1 100644 --- a/linux-user/arm/target_cpu.h +++ b/linux-user/arm/target_cpu.h @@ -30,7 +30,7 @@ static inline unsigned long arm_max_reserved_va(CPUState = *cs) * the high addresses. Restrict linux-user to the * cached write-back RAM in the system map. */ - return 0x80000000ul; + return 0x7ffffffful; } else { /* * We need to be able to map the commpage. diff --git a/bsd-user/main.c b/bsd-user/main.c index 41290e16f9..de413bd1d2 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -67,16 +67,12 @@ bool have_guest_base; # if HOST_LONG_BITS > TARGET_VIRT_ADDR_SPACE_BITS # if TARGET_VIRT_ADDR_SPACE_BITS =3D=3D 32 && \ (TARGET_LONG_BITS =3D=3D 32 || defined(TARGET_ABI32)) -/* - * There are a number of places where we assign reserved_va to a variable - * of type abi_ulong and expect it to fit. Avoid the last page. - */ -# define MAX_RESERVED_VA (0xfffffffful & TARGET_PAGE_MASK) +# define MAX_RESERVED_VA 0xfffffffful # else -# define MAX_RESERVED_VA (1ul << TARGET_VIRT_ADDR_SPACE_BITS) +# define MAX_RESERVED_VA ((1ul << TARGET_VIRT_ADDR_SPACE_BITS) - 1) # endif # else -# define MAX_RESERVED_VA 0 +# define MAX_RESERVED_VA (-1ul) # endif #endif =20 @@ -86,9 +82,9 @@ bool have_guest_base; * if directed by the command-line option, but not by default. */ #if HOST_LONG_BITS =3D=3D 64 && TARGET_VIRT_ADDR_SPACE_BITS <=3D 32 -unsigned long reserved_va =3D MAX_RESERVED_VA; +unsigned long max_reserved_va =3D MAX_RESERVED_VA; #else -unsigned long reserved_va; +unsigned long max_reserved_va; #endif =20 static const char *interp_prefix =3D CONFIG_QEMU_INTERP_PREFIX; @@ -464,8 +460,8 @@ int main(int argc, char **argv) target_environ =3D envlist_to_environ(envlist, NULL); envlist_free(envlist); =20 - if (reserved_va) { - mmap_next_start =3D reserved_va; + if (max_reserved_va) { + mmap_next_start =3D max_reserved_va; } =20 { diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c index d6c5a344c9..e9a330d599 100644 --- a/bsd-user/mmap.c +++ b/bsd-user/mmap.c @@ -227,14 +227,14 @@ static abi_ulong mmap_find_vma_reserved(abi_ulong sta= rt, abi_ulong size, int prot; int looped =3D 0; =20 - if (size > reserved_va) { + if (size > max_reserved_va) { return (abi_ulong)-1; } =20 size =3D HOST_PAGE_ALIGN(size) + alignment; end_addr =3D start + size; - if (end_addr > reserved_va) { - end_addr =3D reserved_va; + if (end_addr > max_reserved_va) { + end_addr =3D max_reserved_va + 1; } addr =3D end_addr - qemu_host_page_size; =20 @@ -243,7 +243,7 @@ static abi_ulong mmap_find_vma_reserved(abi_ulong start= , abi_ulong size, if (looped) { return (abi_ulong)-1; } - end_addr =3D reserved_va; + end_addr =3D max_reserved_va + 1; addr =3D end_addr - qemu_host_page_size; looped =3D 1; continue; @@ -291,7 +291,7 @@ static abi_ulong mmap_find_vma_aligned(abi_ulong start,= abi_ulong size, =20 size =3D HOST_PAGE_ALIGN(size); =20 - if (reserved_va) { + if (max_reserved_va) { return mmap_find_vma_reserved(start, size, (alignment !=3D 0 ? 1 << alignment : 0)); } @@ -759,7 +759,7 @@ int target_munmap(abi_ulong start, abi_ulong len) ret =3D 0; /* unmap what we can */ if (real_start < real_end) { - if (reserved_va) { + if (max_reserved_va) { mmap_reserve(real_start, real_end - real_start); } else { ret =3D munmap(g2h_untagged(real_start), real_end - real_start= ); diff --git a/bsd-user/signal.c b/bsd-user/signal.c index 58a5386395..be12568f6c 100644 --- a/bsd-user/signal.c +++ b/bsd-user/signal.c @@ -492,7 +492,7 @@ static void host_signal_handler(int host_sig, siginfo_t= *info, void *puc) =20 /* * Convert forcefully to guest address space: addresses outside - * reserved_va are still valid to report via SEGV_MAPERR. + * max_reserved_va are still valid to report via SEGV_MAPERR. */ guest_addr =3D h2g_nocheck(host_addr); =20 @@ -512,7 +512,7 @@ static void host_signal_handler(int host_sig, siginfo_t= *info, void *puc) } =20 /* - * With reserved_va, the whole address space is PROT_NONE, + * With max_reserved_va, the whole address space is PROT_N= ONE, * which means that we may get ACCERR when we want MAPERR. */ if (page_get_flags(guest_addr) & PAGE_VALID) { diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 5928c14dfc..104c13ec77 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -204,10 +204,10 @@ static bool init_guest_commpage(void) * The vsyscall page is at a high negative address aka kernel space, * which means that we cannot actually allocate it with target_mmap. * We still should be able to use page_set_flags, unless the user - * has specified -R reserved_va, which would trigger an assert(). + * has specified -R , which would trigger an assert(). */ - if (reserved_va !=3D 0 && - TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE >=3D reserved_va) { + if (max_reserved_va !=3D 0 && + TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE - 1 >=3D max_reserved_va) { error_report("Cannot allocate vsyscall page"); exit(EXIT_FAILURE); } @@ -2484,11 +2484,11 @@ static void pgb_have_guest_base(const char *image_n= ame, abi_ulong guest_loaddr, } =20 /* Sanity check the guest binary. */ - if (reserved_va) { - if (guest_hiaddr > reserved_va) { + if (max_reserved_va) { + if (guest_hiaddr - 1 > max_reserved_va) { error_report("%s: requires more than reserved virtual " "address space (0x%" PRIx64 " > 0x%lx)", - image_name, (uint64_t)guest_hiaddr, reserved_va); + image_name, (uint64_t)guest_hiaddr - 1, max_reser= ved_va); exit(EXIT_FAILURE); } } else { @@ -2503,16 +2503,16 @@ static void pgb_have_guest_base(const char *image_n= ame, abi_ulong guest_loaddr, } =20 /* - * Expand the allocation to the entire reserved_va. + * Expand the allocation to the entire max_reserved_va. * Exclude the mmap_min_addr hole. */ - if (reserved_va) { + if (max_reserved_va) { guest_loaddr =3D (guest_base >=3D mmap_min_addr ? 0 : mmap_min_addr - guest_base); - guest_hiaddr =3D reserved_va; + guest_hiaddr =3D max_reserved_va + 1; } =20 - /* Reserve the address space for the binary, or reserved_va. */ + /* Reserve the address space for the binary, or max_reserved_va. */ test =3D g2h_untagged(guest_loaddr); addr =3D mmap(test, guest_hiaddr - guest_loaddr, PROT_NONE, flags, -1,= 0); if (test !=3D addr) { @@ -2716,7 +2716,7 @@ static void pgb_dynamic(const char *image_name, long = align) if (HI_COMMPAGE) { uintptr_t addr, commpage; =20 - /* 64-bit hosts should have used reserved_va. */ + /* 64-bit hosts should have used max_reserved_va. */ assert(sizeof(uintptr_t) =3D=3D 4); =20 /* @@ -2736,15 +2736,15 @@ static void pgb_reserved_va(const char *image_name,= abi_ulong guest_loaddr, int flags =3D MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE; void *addr, *test; =20 - if (guest_hiaddr > reserved_va) { + if (guest_hiaddr - 1 > max_reserved_va) { error_report("%s: requires more than reserved virtual " "address space (0x%" PRIx64 " > 0x%lx)", - image_name, (uint64_t)guest_hiaddr, reserved_va); + image_name, (uint64_t)guest_hiaddr - 1, max_reserved_= va); exit(EXIT_FAILURE); } =20 /* Widen the "image" to the entire reserved address space. */ - pgb_static(image_name, 0, reserved_va, align); + pgb_static(image_name, 0, max_reserved_va + 1, align); =20 /* osdep.h defines this as 0 if it's missing */ flags |=3D MAP_FIXED_NOREPLACE; @@ -2752,17 +2752,17 @@ static void pgb_reserved_va(const char *image_name,= abi_ulong guest_loaddr, /* Reserve the memory on the host. */ assert(guest_base !=3D 0); test =3D g2h_untagged(0); - addr =3D mmap(test, reserved_va, PROT_NONE, flags, -1, 0); + addr =3D mmap(test, max_reserved_va + 1, PROT_NONE, flags, -1, 0); if (addr =3D=3D MAP_FAILED || addr !=3D test) { error_report("Unable to reserve 0x%lx bytes of virtual address " "space at %p (%s) for use as guest address space (che= ck your " "virtual memory ulimit setting, min_mmap_addr or rese= rve less " - "using -R option)", reserved_va, test, strerror(errno= )); + "using -R option)", max_reserved_va + 1, test, strerr= or(errno)); exit(EXIT_FAILURE); } =20 qemu_log_mask(CPU_LOG_PAGE, "%s: base @ %p for %lu bytes\n", - __func__, addr, reserved_va); + __func__, addr, max_reserved_va + 1); } =20 void probe_guest_base(const char *image_name, abi_ulong guest_loaddr, @@ -2773,7 +2773,7 @@ void probe_guest_base(const char *image_name, abi_ulo= ng guest_loaddr, =20 if (have_guest_base) { pgb_have_guest_base(image_name, guest_loaddr, guest_hiaddr, align); - } else if (reserved_va) { + } else if (max_reserved_va) { pgb_reserved_va(image_name, guest_loaddr, guest_hiaddr, align); } else if (guest_loaddr) { pgb_static(image_name, guest_loaddr, guest_hiaddr, align); diff --git a/linux-user/main.c b/linux-user/main.c index 5fcaddffc2..f5731a1157 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -107,18 +107,16 @@ static const char *last_log_filename; # if HOST_LONG_BITS > TARGET_VIRT_ADDR_SPACE_BITS # if TARGET_VIRT_ADDR_SPACE_BITS =3D=3D 32 && \ (TARGET_LONG_BITS =3D=3D 32 || defined(TARGET_ABI32)) -/* There are a number of places where we assign reserved_va to a variable - of type abi_ulong and expect it to fit. Avoid the last page. */ -# define MAX_RESERVED_VA(CPU) (0xfffffffful & TARGET_PAGE_MASK) +# define MAX_RESERVED_VA(CPU) 0xfffffffful # else -# define MAX_RESERVED_VA(CPU) (1ul << TARGET_VIRT_ADDR_SPACE_BITS) +# define MAX_RESERVED_VA(CPU) ((1ul << TARGET_VIRT_ADDR_SPACE_BITS) - 1) # endif # else -# define MAX_RESERVED_VA(CPU) 0 +# define MAX_RESERVED_VA(CPU) (-1ul) # endif #endif =20 -unsigned long reserved_va; +unsigned long max_reserved_va; =20 static void usage(int exitcode); =20 @@ -369,7 +367,8 @@ static void handle_arg_reserved_va(const char *arg) { char *p; int shift =3D 0; - reserved_va =3D strtoul(arg, &p, 0); + + max_reserved_va =3D strtoul(arg, &p, 0); switch (*p) { case 'k': case 'K': @@ -383,10 +382,10 @@ static void handle_arg_reserved_va(const char *arg) break; } if (shift) { - unsigned long unshifted =3D reserved_va; + unsigned long unshifted =3D max_reserved_va; p++; - reserved_va <<=3D shift; - if (reserved_va >> shift !=3D unshifted) { + max_reserved_va <<=3D shift; + if (max_reserved_va >> shift !=3D unshifted) { fprintf(stderr, "Reserved virtual address too big\n"); exit(EXIT_FAILURE); } @@ -395,16 +394,17 @@ static void handle_arg_reserved_va(const char *arg) fprintf(stderr, "Unrecognised -R size suffix '%s'\n", p); exit(EXIT_FAILURE); } - if (reserved_va =3D=3D 0) { + if (max_reserved_va =3D=3D 0) { fprintf(stderr, "Invalid -R size value 0\n"); exit(EXIT_FAILURE); } /* Must be aligned with the host page size as it is used with mmap. */ - if (reserved_va & qemu_host_page_mask) { + if (max_reserved_va & qemu_host_page_mask) { fprintf(stderr, "Invalid -R size value %lu: must be aligned mod %l= u\n", - reserved_va, qemu_host_page_size); + max_reserved_va, qemu_host_page_size); exit(EXIT_FAILURE); } + max_reserved_va--; } =20 static void handle_arg_singlestep(const char *arg) @@ -787,17 +787,13 @@ int main(int argc, char **argv, char **envp) * not by default. */ local_max_va =3D MAX_RESERVED_VA(cpu); - if (reserved_va !=3D 0) { - if (local_max_va && reserved_va > local_max_va) { + if (max_reserved_va !=3D 0) { + if (max_reserved_va > local_max_va) { fprintf(stderr, "Reserved virtual address too big\n"); exit(EXIT_FAILURE); } } else if (HOST_LONG_BITS =3D=3D 64 && TARGET_VIRT_ADDR_SPACE_BITS <= =3D 32) { - /* - * reserved_va must be aligned with the host page size - * as it is used with mmap() - */ - reserved_va =3D local_max_va & qemu_host_page_mask; + max_reserved_va =3D local_max_va; } =20 { diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 28135c9e6a..547be8dff6 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -274,16 +274,16 @@ static abi_ulong mmap_find_vma_reserved(abi_ulong sta= rt, abi_ulong size, int prot; bool looped =3D false; =20 - if (size > reserved_va) { + if (size > max_reserved_va) { return (abi_ulong)-1; } =20 /* Note that start and size have already been aligned by mmap_find_vma= . */ =20 end_addr =3D start + size; - if (start > reserved_va - size) { + if (start > max_reserved_va + 1 - size) { /* Start at the top of the address space. */ - end_addr =3D ((reserved_va - size) & -align) + size; + end_addr =3D ((max_reserved_va + 1 - size) & -align) + size; looped =3D true; } =20 @@ -297,7 +297,7 @@ static abi_ulong mmap_find_vma_reserved(abi_ulong start= , abi_ulong size, return (abi_ulong)-1; } /* Re-start at the top of the address space. */ - addr =3D end_addr =3D ((reserved_va - size) & -align) + size; + addr =3D end_addr =3D ((max_reserved_va + 1 - size) & -align) = + size; looped =3D true; } else { prot =3D page_get_flags(addr); @@ -339,7 +339,7 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size= , abi_ulong align) =20 size =3D HOST_PAGE_ALIGN(size); =20 - if (reserved_va) { + if (max_reserved_va) { return mmap_find_vma_reserved(start, size, align); } =20 @@ -755,7 +755,7 @@ int target_munmap(abi_ulong start, abi_ulong len) ret =3D 0; /* unmap what we can */ if (real_start < real_end) { - if (reserved_va) { + if (max_reserved_va) { mmap_reserve(real_start, real_end - real_start); } else { ret =3D munmap(g2h_untagged(real_start), real_end - real_start= ); @@ -791,7 +791,7 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, host_addr =3D mremap(g2h_untagged(old_addr), old_size, new_size, flags, g2h_untagged(new_addr)); =20 - if (reserved_va && host_addr !=3D MAP_FAILED) { + if (max_reserved_va && host_addr !=3D MAP_FAILED) { /* If new and old addresses overlap then the above mremap will already have failed with EINVAL. */ mmap_reserve(old_addr, old_size); @@ -808,13 +808,13 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong = old_size, host_addr =3D mremap(g2h_untagged(old_addr), old_size, new_siz= e, flags | MREMAP_FIXED, g2h_untagged(mmap_start)); - if (reserved_va) { + if (max_reserved_va) { mmap_reserve(old_addr, old_size); } } } else { int prot =3D 0; - if (reserved_va && old_size < new_size) { + if (max_reserved_va && old_size < new_size) { abi_ulong addr; for (addr =3D old_addr + old_size; addr < old_addr + new_size; @@ -834,7 +834,7 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, new_size, old_size, flags); errno =3D ENOMEM; host_addr =3D MAP_FAILED; - } else if (reserved_va && old_size > new_size) { + } else if (max_reserved_va && old_size > new_size) { mmap_reserve(old_addr + old_size, old_size - new_size); } } diff --git a/linux-user/signal.c b/linux-user/signal.c index 098f3a787d..f40b0a616a 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -808,7 +808,7 @@ static void host_signal_handler(int host_sig, siginfo_t= *info, void *puc) =20 /* * Convert forcefully to guest address space: addresses outside - * reserved_va are still valid to report via SEGV_MAPERR. + * max_reserved_va are still valid to report via SEGV_MAPERR. */ guest_addr =3D h2g_nocheck(host_addr); =20 @@ -827,7 +827,7 @@ static void host_signal_handler(int host_sig, siginfo_t= *info, void *puc) } =20 /* - * With reserved_va, the whole address space is PROT_NONE, + * With max_reserved_va, the whole address space is PROT_N= ONE, * which means that we may get ACCERR when we want MAPERR. */ if (page_get_flags(guest_addr) & PAGE_VALID) { diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 5182ed0c91..b9cd0d3e33 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -264,7 +264,7 @@ static void arm_cpu_reset_hold(Object *obj) } } /* - * Enable 48-bit address space (TODO: take reserved_va into accoun= t). + * Enable 48-bit address space (TODO: take max_reserved_va into ac= count). * Enable TBI0 but not TBI1. * Note that this must match useronly_clean_ptr. */ --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068856; cv=none; d=zohomail.com; s=zohoarc; b=HPYLkw01nRHJ7T6iEgnDjbcwdca1m+Zbgj8saNz9t7evcS7D7M+hGUo0d6AA1PXZK63DV2uwpraJ382IOr4oZWeSmtO4mFS2OmK7JTIdAN3xw9LrUMTbHid287B6N+LmmngtqQK+B8ISkpah8pWKZpebtH9Nlx1/hWyVKVtBFJ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068856; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=d/d0OBIClNgz9uS/ri2TTMH+bBSoAaI+6QK8Ud7Uf5M=; b=I9Vf1ujy7yiGtZUW1jHfbFfHkjkB0Opf2PqSkLUWh+chfvtXXb1zD38OMfMM9mvpWSRz5eUs1hcLAP9TBJw3s0wWpkQO9QMP9tpTcZpDP1umIkq9FTVG7vPFFDpb2T1gYQMzbJj5u/vSelAXhJ4ddPtMJJirV/l5LJiItjNR70w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 167806885608120.697097879368698; Sun, 5 Mar 2023 18:14:16 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Lo-0003PH-Kb; Sun, 05 Mar 2023 21:13:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lj-0003Ew-Tn for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:15 -0500 Received: from mail-pj1-x1044.google.com ([2607:f8b0:4864:20::1044]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Lh-00061i-Fi for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:15 -0500 Received: by mail-pj1-x1044.google.com with SMTP id x20-20020a17090a8a9400b00233ba727724so9830030pjn.1 for ; Sun, 05 Mar 2023 18:13:13 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068792; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=d/d0OBIClNgz9uS/ri2TTMH+bBSoAaI+6QK8Ud7Uf5M=; b=igcpnZtghlU0m6W6J66lr/2xsUcTj5Mx4VbBdRW5FAL5G+2c24lhFYX3kYyQXEhZy7 jbWXYY2Qp5U0YLY4ug4RHGs6ZsLq1oDuoUNmlOjE1Ro8llPTlwSlcCKGkQBleYz0oIz4 Bib+45i3pwFc5hLNa1FLWqrQkHN10p3FQ27nBTCyvw6r5AR1a3wtddxC5QcGz9uGwYhZ B9joQaOKUbVfH6cn+LM9nd/xluMv3vQJMQVbwrcwBCzEQ8qphuUyLWyKAIdabpDHvXV8 ouinMDwKjOCeRHe/N30xfvoiv/7+pTMJlc47NctV6gGQE7A/8BdubspJXRTDhzYfZgQc XPlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068792; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d/d0OBIClNgz9uS/ri2TTMH+bBSoAaI+6QK8Ud7Uf5M=; b=h8BTCO6jNCahmLEcp0G/YIlbcAk8TvqL73E4B24udFW2k1BUD6ELDDwcaKDi5uetl3 s6+9PaVUsIBhBjKsI9aGgesEWCnNrMTE2mSL1OXB/qY7OI1dNkueJo2RL7ldXkfj+AIU e4zQXOI5Z3tJMP+sJNQtElWrCWNjwVEdXYK0S8IpKe3jm3bOWhhU0f1eIbvyc1MaOa8w 4qw6leo0g2alkHlV9jw3SSMCGRNQG8x2n7aLS8/D2shIejMw8GBmwE/CcA6Fxd5/hSGR HYP9hlQXKTDzgar6GXUKC34Us560PAAfPXS5mlu7m6DpMXn7mbI+RGFqWFMLkajjcOfL Hj3Q== X-Gm-Message-State: AO0yUKUgPvS4lFzdgfBi/652DnwIa4MvpFcoBHIU3KFnRLXjPOn33FhH Ei2DELdr7DXpvl6Pe/udqb06C1rFxKiXMfSvjcUFxQtO X-Google-Smtp-Source: AK7set+wXTnBwF5lfiv969iXGlHJsITGdedtw250NzlBSqSrjprzyuVNC5QvsGKq8hayL0gA1Y3K2w== X-Received: by 2002:a05:6a20:7349:b0:cc:9b29:f5ff with SMTP id v9-20020a056a20734900b000cc9b29f5ffmr9228819pzc.35.1678068792106; Sun, 05 Mar 2023 18:13:12 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 4/9] accel/tcg: Pass last not end to page_set_flags Date: Sun, 5 Mar 2023 18:13:02 -0800 Message-Id: <20230306021307.1879483-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::1044; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1044.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068857112100001 Content-Type: text/plain; charset="utf-8" Pass the address of the last byte to be changed, rather than the first address past the last byte. This avoids overflow when the last page of the address space is involved. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1528 Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Joel Stanley Tested-by:NinadPalsule > --- include/exec/cpu-all.h | 2 +- accel/tcg/user-exec.c | 16 +++++++--------- bsd-user/mmap.c | 6 +++--- linux-user/elfload.c | 11 ++++++----- linux-user/mmap.c | 16 ++++++++-------- linux-user/syscall.c | 4 ++-- 6 files changed, 27 insertions(+), 28 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 7ef6b9a94d..748764459c 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -285,7 +285,7 @@ typedef int (*walk_memory_regions_fn)(void *, target_ul= ong, int walk_memory_regions(void *, walk_memory_regions_fn); =20 int page_get_flags(target_ulong address); -void page_set_flags(target_ulong start, target_ulong end, int flags); +void page_set_flags(target_ulong start, target_ulong last, int flags); void page_reset_target_data(target_ulong start, target_ulong end); int page_check_range(target_ulong start, target_ulong len, int flags); =20 diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 7b37fd229e..035f8096b2 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -480,24 +480,22 @@ static bool pageflags_set_clear(target_ulong start, t= arget_ulong last, * The flag PAGE_WRITE_ORG is positioned automatically depending * on PAGE_WRITE. The mmap_lock should already be held. */ -void page_set_flags(target_ulong start, target_ulong end, int flags) +void page_set_flags(target_ulong start, target_ulong last, int flags) { - target_ulong last; bool reset =3D false; bool inval_tb =3D false; =20 /* This function should never be called with addresses outside the guest address space. If this assert fires, it probably indicates a missing call to h2g_valid. */ - assert(start < end); - assert(end - 1 <=3D GUEST_ADDR_MAX); + assert(start <=3D last); + assert(last <=3D GUEST_ADDR_MAX); /* Only set PAGE_ANON with new mappings. */ assert(!(flags & PAGE_ANON) || (flags & PAGE_RESET)); assert_memory_lock(); =20 - start =3D start & TARGET_PAGE_MASK; - end =3D TARGET_PAGE_ALIGN(end); - last =3D end - 1; + start &=3D TARGET_PAGE_MASK; + last |=3D ~TARGET_PAGE_MASK; =20 if (!(flags & PAGE_VALID)) { flags =3D 0; @@ -510,7 +508,7 @@ void page_set_flags(target_ulong start, target_ulong en= d, int flags) } =20 if (!flags || reset) { - page_reset_target_data(start, end); + page_reset_target_data(start, last + 1); inval_tb |=3D pageflags_unset(start, last); } if (flags) { @@ -518,7 +516,7 @@ void page_set_flags(target_ulong start, target_ulong en= d, int flags) ~(reset ? 0 : PAGE_STICKY)); } if (inval_tb) { - tb_invalidate_phys_range(start, end); + tb_invalidate_phys_range(start, last + 1); } } =20 diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c index e9a330d599..301fc63817 100644 --- a/bsd-user/mmap.c +++ b/bsd-user/mmap.c @@ -118,7 +118,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= prot) if (ret !=3D 0) goto error; } - page_set_flags(start, start + len, prot | PAGE_VALID); + page_set_flags(start, start + len - 1, prot | PAGE_VALID); mmap_unlock(); return 0; error: @@ -656,7 +656,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t prot, } } the_end1: - page_set_flags(start, start + len, prot | PAGE_VALID); + page_set_flags(start, start + len - 1, prot | PAGE_VALID); the_end: #ifdef DEBUG_MMAP printf("ret=3D0x" TARGET_ABI_FMT_lx "\n", start); @@ -767,7 +767,7 @@ int target_munmap(abi_ulong start, abi_ulong len) } =20 if (ret =3D=3D 0) { - page_set_flags(start, start + len, 0); + page_set_flags(start, start + len - 1, 0); } mmap_unlock(); return ret; diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 104c13ec77..a3431d8d62 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -212,7 +212,7 @@ static bool init_guest_commpage(void) exit(EXIT_FAILURE); } page_set_flags(TARGET_VSYSCALL_PAGE, - TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE, + TARGET_VSYSCALL_PAGE | ~TARGET_PAGE_MASK, PAGE_EXEC | PAGE_VALID); return true; } @@ -443,7 +443,7 @@ static bool init_guest_commpage(void) exit(EXIT_FAILURE); } =20 - page_set_flags(commpage, commpage + qemu_host_page_size, + page_set_flags(commpage, commpage | ~qemu_host_page_mask, PAGE_READ | PAGE_EXEC | PAGE_VALID); return true; } @@ -1315,7 +1315,7 @@ static bool init_guest_commpage(void) exit(EXIT_FAILURE); } =20 - page_set_flags(LO_COMMPAGE, LO_COMMPAGE + TARGET_PAGE_SIZE, + page_set_flags(LO_COMMPAGE, LO_COMMPAGE | ~TARGET_PAGE_MASK, PAGE_READ | PAGE_EXEC | PAGE_VALID); return true; } @@ -1727,7 +1727,7 @@ static bool init_guest_commpage(void) * and implement syscalls. Here, simply mark the page executable. * Special case the entry points during translation (see do_page_zero). */ - page_set_flags(LO_COMMPAGE, LO_COMMPAGE + TARGET_PAGE_SIZE, + page_set_flags(LO_COMMPAGE, LO_COMMPAGE | ~TARGET_PAGE_MASK, PAGE_EXEC | PAGE_VALID); return true; } @@ -2199,7 +2199,8 @@ static void zero_bss(abi_ulong elf_bss, abi_ulong las= t_bss, int prot) =20 /* Ensure that the bss page(s) are valid */ if ((page_get_flags(last_bss-1) & prot) !=3D prot) { - page_set_flags(elf_bss & TARGET_PAGE_MASK, last_bss, prot | PAGE_V= ALID); + page_set_flags(elf_bss & TARGET_PAGE_MASK, last_bss - 1, + prot | PAGE_VALID); } =20 if (host_start < host_map_start) { diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 547be8dff6..9cf85f4090 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -181,7 +181,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= target_prot) } } =20 - page_set_flags(start, start + len, page_flags); + page_set_flags(start, start + len - 1, page_flags); ret =3D 0; =20 error: @@ -640,15 +640,15 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, = int target_prot, } page_flags |=3D PAGE_RESET; if (passthrough_start =3D=3D passthrough_end) { - page_set_flags(start, start + len, page_flags); + page_set_flags(start, start + len - 1, page_flags); } else { if (start < passthrough_start) { - page_set_flags(start, passthrough_start, page_flags); + page_set_flags(start, passthrough_start - 1, page_flags); } - page_set_flags(passthrough_start, passthrough_end, + page_set_flags(passthrough_start, passthrough_end - 1, page_flags | PAGE_PASSTHROUGH); if (passthrough_end < start + len) { - page_set_flags(passthrough_end, start + len, page_flags); + page_set_flags(passthrough_end, start + len - 1, page_flags); } } the_end: @@ -763,7 +763,7 @@ int target_munmap(abi_ulong start, abi_ulong len) } =20 if (ret =3D=3D 0) { - page_set_flags(start, start + len, 0); + page_set_flags(start, start + len - 1, 0); } mmap_unlock(); return ret; @@ -849,8 +849,8 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, } else { new_addr =3D h2g(host_addr); prot =3D page_get_flags(old_addr); - page_set_flags(old_addr, old_addr + old_size, 0); - page_set_flags(new_addr, new_addr + new_size, + page_set_flags(old_addr, old_addr + old_size - 1, 0); + page_set_flags(new_addr, new_addr + new_size - 1, prot | PAGE_VALID | PAGE_RESET); } mmap_unlock(); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index a6c426d73c..78e14ee875 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4583,7 +4583,7 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_en= v, } raddr=3Dh2g((unsigned long)host_raddr); =20 - page_set_flags(raddr, raddr + shm_info.shm_segsz, + page_set_flags(raddr, raddr + shm_info.shm_segsz - 1, PAGE_VALID | PAGE_RESET | PAGE_READ | (shmflg & SHM_RDONLY ? 0 : PAGE_WRITE)); =20 @@ -4613,7 +4613,7 @@ static inline abi_long do_shmdt(abi_ulong shmaddr) for (i =3D 0; i < N_SHM_REGIONS; ++i) { if (shm_regions[i].in_use && shm_regions[i].start =3D=3D shmaddr) { shm_regions[i].in_use =3D false; - page_set_flags(shmaddr, shmaddr + shm_regions[i].size, 0); + page_set_flags(shmaddr, shmaddr + shm_regions[i].size - 1, 0); break; } } --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068834; cv=none; d=zohomail.com; s=zohoarc; b=D8GdB0nGI/8aPNDih/0fkGamARa8xzEcYGioqHg8EK0PBJJvnpwYFcHBAH9PM/uLbtlrybCNZQh0f5j76yOXAcS1fmEbd1NG003cqCRPhisplKN7abVMKSN+gOWmuIIvE6lZ/Sg5BBdtDaIo6SRGe8tMoUCOYrqRSa3AUt8M1Eo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068834; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Klh00VTjYiHdsz8hSod/ulyCtvR28jPMZcquCoiGcz8=; b=XH0iU/LnJzYreo6GC4ljLSin01zDaGITn3KEDtsOp/fhctnZbuapjNA5LvuKwR0sZElZHPXJjDfNzb+8ZOpHad0KEmNY9l4h14LySR/DUDNkPPCpnrgnTNKut8oP3JHD3oYvxhLeZmAoxSpiiHMITTOqWTNpUMfYa0lb1YZUzm4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068834854686.6487620329933; Sun, 5 Mar 2023 18:13:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Lk-0003FK-GB; Sun, 05 Mar 2023 21:13:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lj-0003Ev-Gj for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:15 -0500 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Lh-00060k-QH for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:15 -0500 Received: by mail-pj1-x1029.google.com with SMTP id h17-20020a17090aea9100b0023739b10792so7532210pjz.1 for ; Sun, 05 Mar 2023 18:13:13 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068793; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Klh00VTjYiHdsz8hSod/ulyCtvR28jPMZcquCoiGcz8=; b=yoDol88z3w+ojWU/TgShyN70KXJFbeFuw+heV/K8nLPT02DLWPPnaHZIGkwmSlllTl o02nzbjWnudxtJ6Q4BUTIQoRLvZJkIuwCQOsUINKYOBxxQpMKAZJ89m+K3NtyVeOC/eL /fSFNd3KSJw+/OrFBZ5Wro/uG5GBMGLeNOfmKP1D4Z6y0hjLmUWgrsa8M+pmUIyLaR9o WmYA+IpkOZBJzlOF+9hf8xE0vHo2OM0iHThZ6ZLvAWIC0ZsdQJ+ELJPMllqqr2ZsMGs/ fkaz7sCgrYRkJs4/22/t85Bnih78XoEKNM4DutuCQxS3V9dZhazj1sinsMmC1qhWd3BS zq5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068793; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Klh00VTjYiHdsz8hSod/ulyCtvR28jPMZcquCoiGcz8=; b=0ditqXp9mYwRuZY4TmBkM0yv7jdHCRaewnA+1kYJSS98t/IwMutHVbBX4qWbQ9nSPx ICR+g488FoXKxHqWfygLzt4l/teAvpW11HA0BPgHM3Bcw4FN0o34INErEZ2BhP0zqQ/O v4+/fsBwxhcrKh5mbTDzfTut/zCABa/YDuypyVPDTGRannk3yOKSTHw92yscjX53pI3D jckOg92iqgEThrgVZEhRjpEx+mbUEI94FUMAQw6+JyZzZ7UwG/98/9+DxktdrzDsee25 Di1VnHOY7gsp5UzP4/q3SNebhaK5sOXWFLDr59lanO9NId73mWSCLP0b/Wc/UW4ruYNQ MqcQ== X-Gm-Message-State: AO0yUKWnX6wlSKTB8C5H2EG/h910oKlFAfo2XkASFrmjHuMfmR2JbWLg jPfK29I0ln88O1OsP9YSMCFzljf1f3pi+MX/OWD3+Q== X-Google-Smtp-Source: AK7set9KJr9fujDKmRvHE5QLpTWXsgdvDmQI8bMgRTQ0OaGymHCXYKu2mq8yNfvfR27wdbmNj9vV7A== X-Received: by 2002:a17:903:492:b0:19e:773b:2215 with SMTP id jj18-20020a170903049200b0019e773b2215mr9317480plb.36.1678068792995; Sun, 05 Mar 2023 18:13:12 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 5/9] accel/tcg: Pass last not end to page_reset_target_data Date: Sun, 5 Mar 2023 18:13:03 -0800 Message-Id: <20230306021307.1879483-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068837051100005 Content-Type: text/plain; charset="utf-8" Pass the address of the last byte to be changed, rather than the first address past the last byte. This avoids overflow when the last page of the address space is involved. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Joel Stanley Tested-by:NinadPalsule > --- include/exec/cpu-all.h | 2 +- accel/tcg/user-exec.c | 11 +++++------ linux-user/mmap.c | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 748764459c..a8cb4c905d 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -286,7 +286,7 @@ int walk_memory_regions(void *, walk_memory_regions_fn); =20 int page_get_flags(target_ulong address); void page_set_flags(target_ulong start, target_ulong last, int flags); -void page_reset_target_data(target_ulong start, target_ulong end); +void page_reset_target_data(target_ulong start, target_ulong last); int page_check_range(target_ulong start, target_ulong len, int flags); =20 /** diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 035f8096b2..20b6fc2f6e 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -508,7 +508,7 @@ void page_set_flags(target_ulong start, target_ulong la= st, int flags) } =20 if (!flags || reset) { - page_reset_target_data(start, last + 1); + page_reset_target_data(start, last); inval_tb |=3D pageflags_unset(start, last); } if (flags) { @@ -814,15 +814,14 @@ typedef struct TargetPageDataNode { =20 static IntervalTreeRoot targetdata_root; =20 -void page_reset_target_data(target_ulong start, target_ulong end) +void page_reset_target_data(target_ulong start, target_ulong last) { IntervalTreeNode *n, *next; - target_ulong last; =20 assert_memory_lock(); =20 - start =3D start & TARGET_PAGE_MASK; - last =3D TARGET_PAGE_ALIGN(end) - 1; + start &=3D TARGET_PAGE_MASK; + last |=3D ~TARGET_PAGE_MASK; =20 for (n =3D interval_tree_iter_first(&targetdata_root, start, last), next =3D n ? interval_tree_iter_next(n, start, last) : NULL; @@ -885,7 +884,7 @@ void *page_get_target_data(target_ulong address) return t->data[(page - region) >> TARGET_PAGE_BITS]; } #else -void page_reset_target_data(target_ulong start, target_ulong end) { } +void page_reset_target_data(target_ulong start, target_ulong last) { } #endif /* TARGET_PAGE_DATA_SIZE */ =20 /* The softmmu versions of these helpers are in cputlb.c. */ diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 9cf85f4090..c153277afb 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -946,7 +946,7 @@ abi_long target_madvise(abi_ulong start, abi_ulong len_= in, int advice) if (can_passthrough_madvise(start, end)) { ret =3D get_errno(madvise(g2h_untagged(start), len, advice)); if ((advice =3D=3D MADV_DONTNEED) && (ret =3D=3D 0)) { - page_reset_target_data(start, start + len); + page_reset_target_data(start, start + len - 1); } } } --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068873; cv=none; d=zohomail.com; s=zohoarc; b=OA2KEGQZkFFdkFGPZz91bYMLjjqykZg9ljuhoerc/t/RZegdMromXLL09uXbL+YDX4tBuhcIJdK1oPhnHMwlt2Fbsqx+Z6uTi+eP2Jlmm0n0E4d4X2FXkl/Mz6Jzy4r0fcp3zJoTGdvHjTzJqm9eWETE385/iTzXENxCITo5kGo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068873; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=E6BOJx4r1pYVT6Z+5FzgOYkiXq4HsL5PEr5po56LIKU=; b=bOAWLzPlbxH5ySFOumsx/Msevv0CcrKGZcOoE9N9ytIaiVgLAeGNtZJGhbx2d3rpKCyckfQ41ElFaTYlt6KG6oEt1WO4ddfLSLvs+UbgWsPg3eDqmseRpucoMHnqCu/3hgaRDOVgJj7Dp3TkSOAds6eAm3yzj4PRBIl83MSRDWM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068873126484.61914250211794; Sun, 5 Mar 2023 18:14:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Lm-0003KL-1o; Sun, 05 Mar 2023 21:13:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lk-0003FQ-Lj for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:16 -0500 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Li-0005zN-Ot for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:16 -0500 Received: by mail-pj1-x1030.google.com with SMTP id m8-20020a17090a4d8800b002377bced051so11776391pjh.0 for ; Sun, 05 Mar 2023 18:13:14 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068794; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=E6BOJx4r1pYVT6Z+5FzgOYkiXq4HsL5PEr5po56LIKU=; b=TEoGNawG74Fb/VR3i5ZHWnjlMBzlwP/7llGFD3QLD/3Dk23+mmHIzPcZpFQo9RQpea VbB655ZbOHm85akL0OI1HW/G1CeibN6dUzEqDRT3OeIO39/7VJFauyETzrsi+mx7SVxz csVxkm/cSSGh/TJyypwZnnB9DxeUg6cXmoLnuvJW8flD8rtZyzmLcd1v0rpxFB+Rg2wA C5BsVeqMtJS+cdm6pPQQJZN9mfrGagc5BdRfOJPKVVk0Kc3cjTAr0taEZZX2yhxuCyC5 v1MizcA9nRP9qMOw4WtWTxGiP4uqYFu9edwXWw4I/dvV3rFOrL5sygSrAZcFw9DJIbk2 KW7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068794; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=E6BOJx4r1pYVT6Z+5FzgOYkiXq4HsL5PEr5po56LIKU=; b=KcuqKy71z8RW5KSJWWDGx1WEKniDdQQ3wFW3+dPjMLJ74sFxdg5YE25wZjSi2sZ3Nb JaxHmFkHsR33SfYcDWTkgPCBOXCkP4wPbENJlx/ihW4UmQdyMXZi0UFl4tY6SegOarnA uEPQiC9cSwH9WmN0ZpfnglxkBx8CzC5BihplCXEsHeQ0t77sq4sXyqlRUjbQZPXmDt+p 4dKU52ho+Aw+GWYctSR4P7ph7X8QiD2WBn7D1zIdMaejIYUcV1Ts11VB9za35/nWEy9W XskvDTuxepmCkzET/G6gZVFIZuGD0c78t/lKlB4qK/m7UA3ENXDujPwoQM34Fzp6S4fJ jx+w== X-Gm-Message-State: AO0yUKVcyiMJ60lRcliWgItR/2FfWzH/9LiHofqDbr4Bs3icM85L1bls LDevJ4YISYm1LyORxHfiXW0AvNo+6lXQ3v9aOfOmmw== X-Google-Smtp-Source: AK7set9r4jzRfwoe0G5C7oX/rUzmACNJSt2icrT9wyX4ZWrNkbOVcXf40slXSrOzk4V2gOKm9MC13g== X-Received: by 2002:a05:6a20:7d9d:b0:cd:91bc:a9af with SMTP id v29-20020a056a207d9d00b000cd91bca9afmr10380897pzj.58.1678068793980; Sun, 05 Mar 2023 18:13:13 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 6/9] accel/tcg: Pass last not end to PAGE_FOR_EACH_TB Date: Sun, 5 Mar 2023 18:13:04 -0800 Message-Id: <20230306021307.1879483-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068875066100007 Content-Type: text/plain; charset="utf-8" Pass the address of the last byte to be changed, rather than the first address past the last byte. This avoids overflow when the last page of the address space is involved. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Joel Stanley Tested-by:NinadPalsule > --- accel/tcg/tb-maint.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c index efefa08ee1..745912e60a 100644 --- a/accel/tcg/tb-maint.c +++ b/accel/tcg/tb-maint.c @@ -125,29 +125,29 @@ static void tb_remove(TranslationBlock *tb) } =20 /* TODO: For now, still shared with translate-all.c for system mode. */ -#define PAGE_FOR_EACH_TB(start, end, pagedesc, T, N) \ - for (T =3D foreach_tb_first(start, end), \ - N =3D foreach_tb_next(T, start, end); \ +#define PAGE_FOR_EACH_TB(start, last, pagedesc, T, N) \ + for (T =3D foreach_tb_first(start, last), \ + N =3D foreach_tb_next(T, start, last); \ T !=3D NULL; \ - T =3D N, N =3D foreach_tb_next(N, start, end)) + T =3D N, N =3D foreach_tb_next(N, start, last)) =20 typedef TranslationBlock *PageForEachNext; =20 static PageForEachNext foreach_tb_first(tb_page_addr_t start, - tb_page_addr_t end) + tb_page_addr_t last) { - IntervalTreeNode *n =3D interval_tree_iter_first(&tb_root, start, end = - 1); + IntervalTreeNode *n =3D interval_tree_iter_first(&tb_root, start, last= ); return n ? container_of(n, TranslationBlock, itree) : NULL; } =20 static PageForEachNext foreach_tb_next(PageForEachNext tb, tb_page_addr_t start, - tb_page_addr_t end) + tb_page_addr_t last) { IntervalTreeNode *n; =20 if (tb) { - n =3D interval_tree_iter_next(&tb->itree, start, end - 1); + n =3D interval_tree_iter_next(&tb->itree, start, last); if (n) { return container_of(n, TranslationBlock, itree); } @@ -318,7 +318,7 @@ struct page_collection { }; =20 typedef int PageForEachNext; -#define PAGE_FOR_EACH_TB(start, end, pagedesc, tb, n) \ +#define PAGE_FOR_EACH_TB(start, last, pagedesc, tb, n) \ TB_FOR_EACH_TAGGED((pagedesc)->first_tb, tb, n, page_next) =20 #ifdef CONFIG_DEBUG_TCG @@ -993,10 +993,11 @@ void tb_invalidate_phys_range(tb_page_addr_t start, t= b_page_addr_t end) { TranslationBlock *tb; PageForEachNext n; + tb_page_addr_t last =3D end - 1; =20 assert_memory_lock(); =20 - PAGE_FOR_EACH_TB(start, end, unused, tb, n) { + PAGE_FOR_EACH_TB(start, last, unused, tb, n) { tb_phys_invalidate__locked(tb); } } @@ -1028,6 +1029,7 @@ bool tb_invalidate_phys_page_unwind(tb_page_addr_t ad= dr, uintptr_t pc) bool current_tb_modified; TranslationBlock *tb; PageForEachNext n; + tb_page_addr_t last; =20 /* * Without precise smc semantics, or when outside of a TB, @@ -1044,10 +1046,11 @@ bool tb_invalidate_phys_page_unwind(tb_page_addr_t = addr, uintptr_t pc) assert_memory_lock(); current_tb =3D tcg_tb_lookup(pc); =20 + last =3D addr | ~TARGET_PAGE_MASK; addr &=3D TARGET_PAGE_MASK; current_tb_modified =3D false; =20 - PAGE_FOR_EACH_TB(addr, addr + TARGET_PAGE_SIZE, unused, tb, n) { + PAGE_FOR_EACH_TB(addr, last, unused, tb, n) { if (current_tb =3D=3D tb && (tb_cflags(current_tb) & CF_COUNT_MASK) !=3D 1) { /* @@ -1089,12 +1092,13 @@ tb_invalidate_phys_page_range__locked(struct page_c= ollection *pages, bool current_tb_modified =3D false; TranslationBlock *current_tb =3D retaddr ? tcg_tb_lookup(retaddr) : NU= LL; #endif /* TARGET_HAS_PRECISE_SMC */ + tb_page_addr_t last G_GNUC_UNUSED =3D end - 1; =20 /* * We remove all the TBs in the range [start, end[. * XXX: see if in some cases it could be faster to invalidate all the = code */ - PAGE_FOR_EACH_TB(start, end, p, tb, n) { + PAGE_FOR_EACH_TB(start, last, p, tb, n) { /* NOTE: this is subtle as a TB may span two physical pages */ if (n =3D=3D 0) { /* NOTE: tb_end may be after the end of the page, but --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068838; cv=none; d=zohomail.com; s=zohoarc; b=BnI52HJ7nfltRzHPdU+/7vRGOsqXhJCGFyJacvd6cz32apwcgwZPVw204pyU/dqwNY3TQdZ9E0kAlwCzIIrvpHe4q4+0WXE4LTALgtkKSDS3lIQun4Ok/L4C5Uny6oaFVcpeK2oW/m8bVL4aN5fpUlEONtQU6vu9o7mGhSbbOyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068838; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RvcMLtMZSPv7P6lANhDUocXLVd0nBQQsNtPV18yr4k4=; b=cnvLvmt5/P5FmldiYqD0QhiYT7vstfkyK+PLMpbYkBk2gkru+6lIVd/+sZBG8Df0IurbTtDtMAK6ogaBsjLqwtx/165ywLJi8u2dgcDSCdLwXt+UoiXNuD6Hgh/nX59N5rENHZUxzKMdseOC9fyp/C6jkBDeUn3OJdqEDuScYxQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068838819369.7808788823131; Sun, 5 Mar 2023 18:13:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Ln-0003NQ-9V; Sun, 05 Mar 2023 21:13:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Ll-0003JB-Nw for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:17 -0500 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Lk-00062J-5k for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:17 -0500 Received: by mail-pj1-x102c.google.com with SMTP id bo22so8302567pjb.4 for ; Sun, 05 Mar 2023 18:13:15 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068795; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=RvcMLtMZSPv7P6lANhDUocXLVd0nBQQsNtPV18yr4k4=; b=wh52Ylg3bwxtArx3aZ6tB+nDnP/KRGtwZkYcDqVIlM7iuD+Ck2gECuAbFMlrKaUfV6 GA42Lbt825aKn2rcDyIxrM7Xdr1X1nhm+wtV4uCaJK1LbkJZVjGJfIyN9UdP1sdkqVVT 7Pn6Z0foUnY0/Kcn+gyYsUyplemWr2Z/ZiSoZgZ7dl1yMuES6DLi03n1C47Q73D3EPmM 5xkfcPymF25VQL1KVV/anPOZ+Okflod3vGdEP+KDqAcJOCvXX3/pE7NgfSppp/zaIDQ9 UFJ/ZvmL7VA8B2YjIoAy/D0EKlhWnl0ts10OK+oFmkEOLme4a9XGf9RdeEqjamWAtHoV CN3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068795; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RvcMLtMZSPv7P6lANhDUocXLVd0nBQQsNtPV18yr4k4=; b=gfrpmabsASTpW4IQrx+eVRiXod6lrh253nphwP2LlnkI2zDxfjtG/5VVHqx0YI3Er0 iROUGml1PzO6oizFL/imKvcRw43QQo0E5MRMjmmAkfVQYJ1VrliuZ2jUJVB3VVtzQlMn fF4o4i56mm/JIP7LEftkNuaXYj/c7HEleHhtVYiYVd/VY2WIq0N3zukxaxRSNswQTPl3 dMteToRbhBRY0fbor6RznrIxN4ovS1hVcSW/1KguK3TlAESI9x4pXmKI1Fcfd+Ksu56d kvw2H6hKFOvXUsggt6obEezK9PsZnYvn8fi4x4Xrl7MpjA2p0aQk69LeVqjaq34M90BE C5qw== X-Gm-Message-State: AO0yUKXLEcOeeovPcFRZK4UhEC/grWMWmMMxWeGm0yplDQiRzj2cPoaS d0gAuAEL352Hr6rGuzIWWd7d9qaSej6yQTMljHnteA== X-Google-Smtp-Source: AK7set+ItVq41oWNXnZgJQitMTuTbyu9BYjfV+zHnIoufIMbSlWwVI8HhvmEa6FvImy7Px/3B80GTw== X-Received: by 2002:a05:6a20:5483:b0:cd:47dc:82b5 with SMTP id i3-20020a056a20548300b000cd47dc82b5mr13278691pzk.21.1678068794870; Sun, 05 Mar 2023 18:13:14 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 7/9] accel/tcg: Pass last not end to page_collection_lock Date: Sun, 5 Mar 2023 18:13:05 -0800 Message-Id: <20230306021307.1879483-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068840964100003 Content-Type: text/plain; charset="utf-8" Pass the address of the last byte to be changed, rather than the first address past the last byte. This avoids overflow when the last page of the address space is involved. Fixes a bug in the loop comparision where "<=3D end" would lock one more page than required. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Joel Stanley Tested-by:NinadPalsule > --- accel/tcg/tb-maint.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c index 745912e60a..c4e15c5591 100644 --- a/accel/tcg/tb-maint.c +++ b/accel/tcg/tb-maint.c @@ -509,20 +509,20 @@ static gint tb_page_addr_cmp(gconstpointer ap, gconst= pointer bp, gpointer udata) } =20 /* - * Lock a range of pages ([@start,@end[) as well as the pages of all + * Lock a range of pages ([@start,@last]) as well as the pages of all * intersecting TBs. * Locking order: acquire locks in ascending order of page index. */ static struct page_collection *page_collection_lock(tb_page_addr_t start, - tb_page_addr_t end) + tb_page_addr_t last) { struct page_collection *set =3D g_malloc(sizeof(*set)); tb_page_addr_t index; PageDesc *pd; =20 start >>=3D TARGET_PAGE_BITS; - end >>=3D TARGET_PAGE_BITS; - g_assert(start <=3D end); + last >>=3D TARGET_PAGE_BITS; + g_assert(start <=3D last); =20 set->tree =3D g_tree_new_full(tb_page_addr_cmp, NULL, NULL, page_entry_destroy); @@ -532,7 +532,7 @@ static struct page_collection *page_collection_lock(tb_= page_addr_t start, retry: g_tree_foreach(set->tree, page_entry_lock, NULL); =20 - for (index =3D start; index <=3D end; index++) { + for (index =3D start; index <=3D last; index++) { TranslationBlock *tb; PageForEachNext n; =20 @@ -1152,7 +1152,7 @@ tb_invalidate_phys_page_range__locked(struct page_col= lection *pages, void tb_invalidate_phys_page(tb_page_addr_t addr) { struct page_collection *pages; - tb_page_addr_t start, end; + tb_page_addr_t start, last; PageDesc *p; =20 p =3D page_find(addr >> TARGET_PAGE_BITS); @@ -1161,9 +1161,9 @@ void tb_invalidate_phys_page(tb_page_addr_t addr) } =20 start =3D addr & TARGET_PAGE_MASK; - end =3D start + TARGET_PAGE_SIZE; - pages =3D page_collection_lock(start, end); - tb_invalidate_phys_page_range__locked(pages, p, start, end, 0); + last =3D addr | ~TARGET_PAGE_MASK; + pages =3D page_collection_lock(start, last); + tb_invalidate_phys_page_range__locked(pages, p, start, last + 1, 0); page_collection_unlock(pages); } =20 @@ -1179,7 +1179,7 @@ void tb_invalidate_phys_range(tb_page_addr_t start, t= b_page_addr_t end) struct page_collection *pages; tb_page_addr_t next; =20 - pages =3D page_collection_lock(start, end); + pages =3D page_collection_lock(start, end - 1); for (next =3D (start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; start < end; start =3D next, next +=3D TARGET_PAGE_SIZE) { @@ -1224,7 +1224,7 @@ void tb_invalidate_phys_range_fast(ram_addr_t ram_add= r, { struct page_collection *pages; =20 - pages =3D page_collection_lock(ram_addr, ram_addr + size); + pages =3D page_collection_lock(ram_addr, ram_addr + size - 1); tb_invalidate_phys_page_fast__locked(pages, ram_addr, size, retaddr); page_collection_unlock(pages); } --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068884; cv=none; d=zohomail.com; s=zohoarc; b=Frb+95Pir/gBcF8zyFKWZG3RetJzz5lkr2FJZj3EnZjeYFi7J5m1xCcRtFbk0MkiI2ENz3VN9ZS9E1b8mfrxGy1IcVrmP5Gvai2pNQOgTlmAnF+Z88OHGtDzlNblukkgc5XNnoPdDhVBgHQ/q2J1Weg0/LDmiG3fiJHjmAY3/XA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068884; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=hueqYlY00i1W4vP3ESdohw7VNMjowjLFHkyPNqqchh8=; b=jqs0P/EEcJdz1Zwr2MKewAno8jWq20kdXXfP+8DZkzMjeLAzT2zQyemrsh81FqXZUDdnfeEdmj5qtw/Mqdsnk4ZyqT0j2avwSmXPX92m1FmHmH0U+1FAl8RVfC8Y3RLlPEQ+yso2xl1adpj7/gU6K/ke3T16OvaJFb/rfbP0J48= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068884001298.5993432783382; Sun, 5 Mar 2023 18:14:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Lp-0003PU-8X; Sun, 05 Mar 2023 21:13:21 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Lm-0003My-Tg for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:18 -0500 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Ll-00062c-5a for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:18 -0500 Received: by mail-pj1-x102e.google.com with SMTP id cp7-20020a17090afb8700b0023756229427so11733897pjb.1 for ; Sun, 05 Mar 2023 18:13:16 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068796; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=hueqYlY00i1W4vP3ESdohw7VNMjowjLFHkyPNqqchh8=; b=L7sEcQ+g15DfEM5vfV2YcrIPLAB7rLnVn+yC5NOreQ3KoxvRVvvrL2hCIiIw3OV674 ecsR2Wu8KYut9J09F1kLtLEEBot/7FcycLpSqmEkRBEi4GiL4BbrEQZGamxVVjNBEg6n zkEfuNNkA0whES8D5VB9gk6wyR4Ti6pppdqHs9T+TWoTTe2NiP9mgigKuId/G95T8hFX nkoWYBDaNXGwlEa1LII08CWCLTPAE775YY6KIJTkYWYf1lJpUAa8W+bkRAHSoclhbWe3 ctQo1AXxHRp/I+nv3YMztoruB3Je4QTOUeIuoIb2rkbmVs+5slXnY2CN7Fv2VvEOXAC/ XQ3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068796; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hueqYlY00i1W4vP3ESdohw7VNMjowjLFHkyPNqqchh8=; b=PIq47nVlaqCjmMmiljGGLUMtYc3mVIflK02+abeYXxmqAshohEXxRiDOefFsu1xglt ZGM//QKZjM8vljzQnrUA9IFe52malsl0r6aaTKCfgWIJkjrodwlbNRfPahTGCR1GPSY2 g+D/vuqAFQVLde/WnRBr1FCezAQ0ZfmSZW8E3tnX6AU5X5dEKHGVHErL/mnlYwGVxhcS LWlnlfuuBKEhffgg6YrpEy4g5VeACCLb9o2mhv54hG/mW93d2OiwlmAFX9fV/QFPTKJI Lpwf6TTeM96VmOtZZ45bQKAKpnC8aflHrWR+U2HHbDqWeUN+yfBg4VRjEjJcskVwooIc l7UQ== X-Gm-Message-State: AO0yUKUAkydmJlTpvRAS0drPDrpB1LNS0AtUDnFjl8/rIVA8sjI4FbHW PQJWbxyetNXBOiSsIOuZyNzCKSiVBq22K9ago0g48A== X-Google-Smtp-Source: AK7set8QKhjpcrlh7mu+1x0A6FPi/um2ILowedUGh62+XN6jQISGRNhPc6sShFjzqm7vsMNCj3+7yg== X-Received: by 2002:a05:6a20:12d4:b0:cc:beae:c2c2 with SMTP id v20-20020a056a2012d400b000ccbeaec2c2mr11047746pzg.1.1678068795739; Sun, 05 Mar 2023 18:13:15 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 8/9] accel/tcg: Pass last not end to tb_invalidate_phys_page_range__locked Date: Sun, 5 Mar 2023 18:13:06 -0800 Message-Id: <20230306021307.1879483-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068885098100005 Content-Type: text/plain; charset="utf-8" Pass the address of the last byte to be changed, rather than the first address past the last byte. This avoids overflow when the last page of the address space is involved. Properly truncate tb_last to the end of the page; the comment about tb_end being past the end of the page being ok is not correct, considering overflow. Signed-off-by: Richard Henderson Tested-by: Joel Stanley Tested-by:NinadPalsule > --- accel/tcg/tb-maint.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c index c4e15c5591..a93c4c3ef7 100644 --- a/accel/tcg/tb-maint.c +++ b/accel/tcg/tb-maint.c @@ -1082,35 +1082,33 @@ bool tb_invalidate_phys_page_unwind(tb_page_addr_t = addr, uintptr_t pc) static void tb_invalidate_phys_page_range__locked(struct page_collection *pages, PageDesc *p, tb_page_addr_t start, - tb_page_addr_t end, + tb_page_addr_t last, uintptr_t retaddr) { TranslationBlock *tb; - tb_page_addr_t tb_start, tb_end; PageForEachNext n; #ifdef TARGET_HAS_PRECISE_SMC bool current_tb_modified =3D false; TranslationBlock *current_tb =3D retaddr ? tcg_tb_lookup(retaddr) : NU= LL; #endif /* TARGET_HAS_PRECISE_SMC */ - tb_page_addr_t last G_GNUC_UNUSED =3D end - 1; =20 /* - * We remove all the TBs in the range [start, end[. + * We remove all the TBs in the range [start, last]. * XXX: see if in some cases it could be faster to invalidate all the = code */ PAGE_FOR_EACH_TB(start, last, p, tb, n) { + tb_page_addr_t tb_start, tb_last; + /* NOTE: this is subtle as a TB may span two physical pages */ + tb_start =3D tb_page_addr0(tb); + tb_last =3D tb_start + tb->size - 1; if (n =3D=3D 0) { - /* NOTE: tb_end may be after the end of the page, but - it is not a problem */ - tb_start =3D tb_page_addr0(tb); - tb_end =3D tb_start + tb->size; + tb_last =3D MIN(tb_last, tb_start | ~TARGET_PAGE_MASK); } else { tb_start =3D tb_page_addr1(tb); - tb_end =3D tb_start + ((tb_page_addr0(tb) + tb->size) - & ~TARGET_PAGE_MASK); + tb_last =3D tb_start + (tb_last & ~TARGET_PAGE_MASK); } - if (!(tb_end <=3D start || tb_start >=3D end)) { + if (!(tb_last < start || tb_start > last)) { #ifdef TARGET_HAS_PRECISE_SMC if (current_tb =3D=3D tb && (tb_cflags(current_tb) & CF_COUNT_MASK) !=3D 1) { @@ -1163,7 +1161,7 @@ void tb_invalidate_phys_page(tb_page_addr_t addr) start =3D addr & TARGET_PAGE_MASK; last =3D addr | ~TARGET_PAGE_MASK; pages =3D page_collection_lock(start, last); - tb_invalidate_phys_page_range__locked(pages, p, start, last + 1, 0); + tb_invalidate_phys_page_range__locked(pages, p, start, last, 0); page_collection_unlock(pages); } =20 @@ -1190,7 +1188,7 @@ void tb_invalidate_phys_range(tb_page_addr_t start, t= b_page_addr_t end) continue; } assert_page_locked(pd); - tb_invalidate_phys_page_range__locked(pages, pd, start, bound, 0); + tb_invalidate_phys_page_range__locked(pages, pd, start, bound - 1,= 0); } page_collection_unlock(pages); } @@ -1210,7 +1208,7 @@ static void tb_invalidate_phys_page_fast__locked(stru= ct page_collection *pages, } =20 assert_page_locked(p); - tb_invalidate_phys_page_range__locked(pages, p, start, start + len, ra= ); + tb_invalidate_phys_page_range__locked(pages, p, start, start + len - 1= , ra); } =20 /* --=20 2.34.1 From nobody Sat May 4 14:42:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1678068897; cv=none; d=zohomail.com; s=zohoarc; b=f49ZjhRQQA8wqGzgNcVd/C5Vob1J0MTZYmc4XXKaXbCZh6o/nDv7Zf6lza1l+QCyZKNthXimwBVe1tzGJBPue+XBxDFDP609diUTEqjm1qHbIM2yVSXO2xz/+sOO4ceirlL8BgXaiWVCGL5MxgcR1TA6NS9UdYAVRY205FQ7a9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678068897; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QVanyJTWx9kYUSCDwvXPA8IbvB2BsZd8rvitNx43raw=; b=nY3XQXDVCPPA2GbnT3OtrTEKQYWFXFz6fZm9qCYucXm9xSKAbDS59eK32Za7Aes4TQH2FsJorFTP+m/yqeLoZYqSWTmzDCMeX1olf6KDoKJf4io6brrPuPKhKCJQog3JiT8BRPTzCg9CWEyi1ci6wwlx6PW7jb+LTLC2ZOzvEC0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1678068897709403.3287705950447; Sun, 5 Mar 2023 18:14:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pZ0Lq-0003RK-0k; Sun, 05 Mar 2023 21:13:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pZ0Ln-0003Nh-QG for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:19 -0500 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pZ0Ll-00062m-RL for qemu-devel@nongnu.org; Sun, 05 Mar 2023 21:13:19 -0500 Received: by mail-pj1-x102c.google.com with SMTP id ce8-20020a17090aff0800b0023a61cff2c6so6513085pjb.0 for ; Sun, 05 Mar 2023 18:13:17 -0800 (PST) Received: from stoup.. ([2602:ae:154a:9f01:87cc:49bb:2900:c08b]) by smtp.gmail.com with ESMTPSA id d18-20020a630e12000000b005030136314dsm5048434pgl.71.2023.03.05.18.13.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Mar 2023 18:13:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1678068796; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=QVanyJTWx9kYUSCDwvXPA8IbvB2BsZd8rvitNx43raw=; b=ayvQl+8YGbvYwzu2VfbWJMzKY8re4mA2CxS2K3aBpu72UB+sqLcOYucprBaDy5ys4H kmLv9nZoKvU3GV4bk5S6rbtM9tflB16OlU+3GgC7gPbNMVEUxsvl1Tsbew7g6JtYhY5a R8YRWJDsvb76J3sw4bZaYeauBSwG7qZEYgM3Zn3RhC/KsyujDfGhfqxTzSyGjPK1tQ5O v3cxxr2j/mwKOXf15QWyw4hH7o3PsQ2gmawAUY54DqzII3sIXEEyScu29zIRPK5kf+ma i6n+2hIKCTpx4YuflWG8sxfLXdTGEt0rJx+rywYP4c2cUlEGKo+fW+zbQNKCuCgkNUuw N2/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678068796; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QVanyJTWx9kYUSCDwvXPA8IbvB2BsZd8rvitNx43raw=; b=NeYKWKsI39uXSv+g2EzRD0ft3tO0caQbkKuk2dq21P+clC7lpTuYNWJdcHzmr3skvi 9kiIvEy5q2uzoLgI7yuFGksiwDNanZMNSmw1iCLzYTQJmO2EBdHMya0Qcpg1sBkS77iX n1VOUk4B6/oIEXensCPYvFbJEL7OE528YFsZrCyY7fAGYlVk2nODGr10GFhDA+PEqnO4 D5dEUNgCxsiOYzYtwHbr0Jdm5Ps5/VmVVcEqLfE9+EsUgj8POPGpDQXA5Bs/Qp/XAsfA sxbbLXFYrYktoEBJiRj+ZPhrid3VWWjFT5YMhJnqUVNljuqXVBE93qybRxYk3Ags8VhE Ybgw== X-Gm-Message-State: AO0yUKUePve9jWExzCDhewZjRXQjZuBHEOwsZZ7bgUq6D1S/yQHHIKwI 7Zk6oTj2FnCFV4/CW3V+DI31/noUfoPrkZi8tdxwpg== X-Google-Smtp-Source: AK7set/bsDRz/09sB/qg+oGkEdNT+SF2X9cjh6EDw7GrWHiRKLGJzy5p1t7CeSHHXEI7/miUnPIMVw== X-Received: by 2002:a05:6a20:a021:b0:ad:def6:af3 with SMTP id p33-20020a056a20a02100b000addef60af3mr8494129pzj.57.1678068796563; Sun, 05 Mar 2023 18:13:16 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 9/9] accel/tcg: Pass last not end to tb_invalidate_phys_range Date: Sun, 5 Mar 2023 18:13:07 -0800 Message-Id: <20230306021307.1879483-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306021307.1879483-1-richard.henderson@linaro.org> References: <20230306021307.1879483-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1678068899235100001 Content-Type: text/plain; charset="utf-8" Pass the address of the last byte to be changed, rather than the first address past the last byte. This avoids overflow when the last page of the address space is involved. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Joel Stanley Tested-by:NinadPalsule > --- include/exec/exec-all.h | 2 +- accel/tcg/tb-maint.c | 31 ++++++++++++++++--------------- accel/tcg/translate-all.c | 2 +- accel/tcg/user-exec.c | 2 +- softmmu/physmem.c | 2 +- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index e09254333d..58d37276d9 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -679,7 +679,7 @@ void tb_invalidate_phys_addr(AddressSpace *as, hwaddr a= ddr, MemTxAttrs attrs); #endif void tb_flush(CPUState *cpu); void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr); -void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end); +void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t last); void tb_set_jmp_target(TranslationBlock *tb, int n, uintptr_t addr); =20 /* GETPC is the true target of the return instruction that we'll execute. = */ diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c index a93c4c3ef7..19f88fd048 100644 --- a/accel/tcg/tb-maint.c +++ b/accel/tcg/tb-maint.c @@ -989,11 +989,10 @@ TranslationBlock *tb_link_page(TranslationBlock *tb, = tb_page_addr_t phys_pc, * Called with mmap_lock held for user-mode emulation. * NOTE: this function must not be called while a TB is running. */ -void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end) +void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t last) { TranslationBlock *tb; PageForEachNext n; - tb_page_addr_t last =3D end - 1; =20 assert_memory_lock(); =20 @@ -1009,11 +1008,11 @@ void tb_invalidate_phys_range(tb_page_addr_t start,= tb_page_addr_t end) */ void tb_invalidate_phys_page(tb_page_addr_t addr) { - tb_page_addr_t start, end; + tb_page_addr_t start, last; =20 start =3D addr & TARGET_PAGE_MASK; - end =3D start + TARGET_PAGE_SIZE; - tb_invalidate_phys_range(start, end); + last =3D addr | ~TARGET_PAGE_MASK; + tb_invalidate_phys_range(start, last); } =20 /* @@ -1167,28 +1166,30 @@ void tb_invalidate_phys_page(tb_page_addr_t addr) =20 /* * Invalidate all TBs which intersect with the target physical address ran= ge - * [start;end[. NOTE: start and end may refer to *different* physical page= s. + * [start;last]. NOTE: start and end may refer to *different* physical pag= es. * 'is_cpu_write_access' should be true if called from a real cpu write * access: the virtual CPU will exit the current TB if code is modified in= side * this TB. */ -void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t end) +void tb_invalidate_phys_range(tb_page_addr_t start, tb_page_addr_t last) { struct page_collection *pages; - tb_page_addr_t next; + tb_page_addr_t index, index_last; =20 - pages =3D page_collection_lock(start, end - 1); - for (next =3D (start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; - start < end; - start =3D next, next +=3D TARGET_PAGE_SIZE) { - PageDesc *pd =3D page_find(start >> TARGET_PAGE_BITS); - tb_page_addr_t bound =3D MIN(next, end); + pages =3D page_collection_lock(start, last); + + index_last =3D last >> TARGET_PAGE_BITS; + for (index =3D start >> TARGET_PAGE_BITS; index <=3D index_last; index= ++) { + PageDesc *pd =3D page_find(index); + tb_page_addr_t bound; =20 if (pd =3D=3D NULL) { continue; } assert_page_locked(pd); - tb_invalidate_phys_page_range__locked(pages, pd, start, bound - 1,= 0); + bound =3D (index << TARGET_PAGE_BITS) | ~TARGET_PAGE_MASK; + bound =3D MIN(bound, last); + tb_invalidate_phys_page_range__locked(pages, pd, start, bound, 0); } page_collection_unlock(pages); } diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index 4b5abc0f44..4500d78a16 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -570,7 +570,7 @@ void tb_check_watchpoint(CPUState *cpu, uintptr_t retad= dr) cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags); addr =3D get_page_addr_code(env, pc); if (addr !=3D -1) { - tb_invalidate_phys_range(addr, addr + 1); + tb_invalidate_phys_range(addr, addr); } } } diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 20b6fc2f6e..a7e0c3e2f4 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -516,7 +516,7 @@ void page_set_flags(target_ulong start, target_ulong la= st, int flags) ~(reset ? 0 : PAGE_STICKY)); } if (inval_tb) { - tb_invalidate_phys_range(start, last + 1); + tb_invalidate_phys_range(start, last); } } =20 diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 47143edb4f..abebf5b963 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -2521,7 +2521,7 @@ static void invalidate_and_set_dirty(MemoryRegion *mr= , hwaddr addr, } if (dirty_log_mask & (1 << DIRTY_MEMORY_CODE)) { assert(tcg_enabled()); - tb_invalidate_phys_range(addr, addr + length); + tb_invalidate_phys_range(addr, addr + length - 1); dirty_log_mask &=3D ~(1 << DIRTY_MEMORY_CODE); } cpu_physical_memory_set_dirty_range(addr, length, dirty_log_mask); --=20 2.34.1