From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379684; cv=none; d=zohomail.com; s=zohoarc; b=j478RTrGVUoNTL2ne2VCUUy9A7V/KJzkV6bV/jii5Fs8fn1ftwdLsor4AvK6UobGwNt42OQDXgSOVtfvp8/mr28myRnZoB99J6MFjgwPdoP+JCsLKsqcnfe0om0zlXZKkG+RB+xFaht0m7RAvepApgKVLemSOOBN/HK4PSv9jwc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379684; h=Content-Transfer-Encoding:Cc: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=ezt78uRJNt9dlPYbFqEBkb94Ry5XrNgYfWMwesnOHOU=; b=GO1JOmlv+pZ579oBK0CsBjqK7BhWSeAZ/AMyII0Q58uyakY0pEDd570tYK87H4rCJNykWjnL32UBy4NV9hSNUyXZVDEtlu4NFIgB4QSANnfO/j8fQMadmQWJ9vR7GzJEWT4h03VuK9WVq+hIb4DlyFmPJNgwIPASily0BILs3Kc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379684295244.12615568970853; Wed, 3 Feb 2021 11:14:44 -0800 (PST) Received: from localhost ([::1]:50054 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nbv-0000Z9-4F for importer@patchew.org; Wed, 03 Feb 2021 14:14:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NO9-0007BH-6C for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:30 -0500 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:41672) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NNy-0001W8-7h for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:26 -0500 Received: by mail-pg1-x530.google.com with SMTP id i7so375042pgc.8 for ; Wed, 03 Feb 2021 11:00:17 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ezt78uRJNt9dlPYbFqEBkb94Ry5XrNgYfWMwesnOHOU=; b=ZwjJOSsgfNUcvkGcMTK4wSrc5fbLAIfTuHmJAczE6jQEkhmsB0cZdIdYNVuRWP/jKS g40yF5oMvIyDQqc3pmpi1hzQXoxU4dEIUzo6XhmZatVaSZYb9eUayjQiGKZS5wnjEk2z 4kK4o4eL74jb+BE3S55JTPmF064IDugvLH80BddfYjeW3LG3piT4OB+WYlZJ9PRuLCIy KapVtiih1W5l3J4vZVYzEikAU+HMif4CcRab+YQYCg4UO8KPCFZBnMXpmeA9vW+dBTEP Kdq6CQYSZjqKb2ZkWhYI+5HKw4qmhsqin2KQAVC4Kw7wZDHh9NnaRskNo6Nw3ALSI9Wy ZZrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ezt78uRJNt9dlPYbFqEBkb94Ry5XrNgYfWMwesnOHOU=; b=FlT5OsQKvN/MelZTaec55+MqnaFapmwxq7dPTn1iQpQlvm5+wjEIq0fSusm/5GIGQL 2HZ3j3d27ygD5Npj3oY90LIjU/O96wGYpWZVQ5CK7LJttQh0aCvwrocvtXDFtIDy0Jxx KhT25+Hi98hEnEdnI2qPgVAOQ1NhhrpofjTKN6tRjYYC7niHuPFLA/oSCjOfv2ZzHVO/ XNgwREAIr1NvyZIsX3bs4lDj6L24/M6YGW3W/964p2XqUA9CNjRt8vGb5iW/xy6LEvHq 5KgLm7ReExLtYEe1Q7OPmjLFa2iEZc8KzxM/0XmgqMqHCKMc0/4ow/S/NAo0VN8pkE7q 0Pvg== X-Gm-Message-State: AOAM533SViSXO4g3+pvwdxU0kuPosfnNZmPcP2+V/BTyn0yrTQz3teZB qc3T4h8FTwYzk44UMQAYoj+2yrgoZBHLu/FS X-Google-Smtp-Source: ABdhPJygWXsdCDkHGEVILUSLsHx7tIqB7ZeMBMTAGiMCA4kH3ucFmGdL7wuJbCafGoIpkuh8FX1frA== X-Received: by 2002:a05:6a00:2bb:b029:1be:aeea:abf4 with SMTP id q27-20020a056a0002bbb02901beaeeaabf4mr4286328pfs.63.1612378816756; Wed, 03 Feb 2021 11:00:16 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 01/31] tcg: Introduce target-specific page data for user-only Date: Wed, 3 Feb 2021 08:59:40 -1000 Message-Id: <20210203190010.759771-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This data can be allocated by page_alloc_target_data() and released by page_set_flags(start, end, prot | PAGE_RESET). This data will be used to hold tag memory for AArch64 MTE. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu-all.h | 42 +++++++++++++++++++++++++++++++++------ accel/tcg/translate-all.c | 28 ++++++++++++++++++++++++++ linux-user/mmap.c | 4 +++- linux-user/syscall.c | 4 ++-- 4 files changed, 69 insertions(+), 9 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 4b5408c341..99a09ee137 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -264,15 +264,21 @@ extern intptr_t qemu_host_page_mask; #define PAGE_EXEC 0x0004 #define PAGE_BITS (PAGE_READ | PAGE_WRITE | PAGE_EXEC) #define PAGE_VALID 0x0008 -/* original state of the write flag (used when tracking self-modifying - code */ +/* + * Original state of the write flag (used when tracking self-modifying cod= e) + */ #define PAGE_WRITE_ORG 0x0010 -/* Invalidate the TLB entry immediately, helpful for s390x - * Low-Address-Protection. Used with PAGE_WRITE in tlb_set_page_with_attrs= () */ -#define PAGE_WRITE_INV 0x0040 +/* + * Invalidate the TLB entry immediately, helpful for s390x + * Low-Address-Protection. Used with PAGE_WRITE in tlb_set_page_with_attrs= () + */ +#define PAGE_WRITE_INV 0x0020 +/* For use with page_set_flags: page is being replaced; target_data cleare= d. */ +#define PAGE_RESET 0x0040 + #if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY) /* FIXME: Code that sets/uses this is broken and needs to go away. */ -#define PAGE_RESERVED 0x0020 +#define PAGE_RESERVED 0x0100 #endif /* Target-specific bits that will be used via page_get_flags(). */ #define PAGE_TARGET_1 0x0080 @@ -287,6 +293,30 @@ int walk_memory_regions(void *, walk_memory_regions_fn= ); int page_get_flags(target_ulong address); void page_set_flags(target_ulong start, target_ulong end, int flags); int page_check_range(target_ulong start, target_ulong len, int flags); + +/** + * page_alloc_target_data(address, size) + * @address: guest virtual address + * @size: size of data to allocate + * + * Allocate @size bytes of out-of-band data to associate with the + * guest page at @address. If the page is not mapped, NULL will + * be returned. If there is existing data associated with @address, + * no new memory will be allocated. + * + * The memory will be freed when the guest page is deallocated, + * e.g. with the munmap system call. + */ +void *page_alloc_target_data(target_ulong address, size_t size); + +/** + * page_get_target_data(address) + * @address: guest virtual address + * + * Return any out-of-bound memory assocated with the guest page + * at @address, as per page_alloc_target_data. + */ +void *page_get_target_data(target_ulong address); #endif =20 CPUArchState *cpu_copy(CPUArchState *env); diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index 81d4c83f22..bba9c8e0b3 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -114,6 +114,7 @@ typedef struct PageDesc { unsigned int code_write_count; #else unsigned long flags; + void *target_data; #endif #ifndef CONFIG_USER_ONLY QemuSpin lock; @@ -2740,6 +2741,7 @@ int page_get_flags(target_ulong address) void page_set_flags(target_ulong start, target_ulong end, int flags) { target_ulong addr, len; + bool reset_target_data; =20 /* This function should never be called with addresses outside the guest address space. If this assert fires, it probably indicates @@ -2754,6 +2756,8 @@ void page_set_flags(target_ulong start, target_ulong = end, int flags) if (flags & PAGE_WRITE) { flags |=3D PAGE_WRITE_ORG; } + reset_target_data =3D !(flags & PAGE_VALID) || (flags & PAGE_RESET); + flags &=3D ~PAGE_RESET; =20 for (addr =3D start, len =3D end - start; len !=3D 0; @@ -2767,10 +2771,34 @@ void page_set_flags(target_ulong start, target_ulon= g end, int flags) p->first_tb) { tb_invalidate_phys_page(addr, 0); } + if (reset_target_data && p->target_data) { + g_free(p->target_data); + p->target_data =3D NULL; + } p->flags =3D flags; } } =20 +void *page_get_target_data(target_ulong address) +{ + PageDesc *p =3D page_find(address >> TARGET_PAGE_BITS); + return p ? p->target_data : NULL; +} + +void *page_alloc_target_data(target_ulong address, size_t size) +{ + PageDesc *p =3D page_find(address >> TARGET_PAGE_BITS); + void *ret =3D NULL; + + if (p->flags & PAGE_VALID) { + ret =3D p->target_data; + if (!ret) { + p->target_data =3D ret =3D g_malloc0(size); + } + } + return ret; +} + int page_check_range(target_ulong start, target_ulong len, int flags) { PageDesc *p; diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 810653c503..c693505b60 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -599,6 +599,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t target_prot, } } the_end1: + page_flags |=3D PAGE_RESET; page_set_flags(start, start + len, page_flags); the_end: trace_target_mmap_complete(start); @@ -792,7 +793,8 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, 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, prot | PAGE_VALID); + page_set_flags(new_addr, new_addr + new_size, + prot | PAGE_VALID | PAGE_RESET); } tb_invalidate_phys_range(new_addr, new_addr + new_size); mmap_unlock(); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 34760779c8..6001022e96 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4632,8 +4632,8 @@ 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_VALID | PAGE_READ | - ((shmflg & SHM_RDONLY)? 0 : PAGE_WRITE)); + PAGE_VALID | PAGE_RESET | PAGE_READ | + (shmflg & SHM_RDONLY ? 0 : PAGE_WRITE)); =20 for (i =3D 0; i < N_SHM_REGIONS; i++) { if (!shm_regions[i].in_use) { --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379599; cv=none; d=zohomail.com; s=zohoarc; b=mb+UE/HHzchGQhU9Y2cC7JUnsgoRLJH0wDYueEgNlpV7U3nvTx4armxI1jSB7R2jZW2EE5gIPMcKYr/P5KnKBmHSKiSJd2VMYPzMbwNxqaJVeBX5u+ciozNlHEAVA7wiXMWRzTIGgr7hcSr+tDGtMILXr/rcJnY6UkBxJ+NcrT0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379599; h=Content-Transfer-Encoding:Cc: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=Kyzjq96nH0KWrOiii6echH6ofV70lplGMBMMhcVo2Uo=; b=YEA2/aHFaNvqaBmfm7mSsQmBJfd48n+o30lVv2qOchYzZF94wosrGhn+XFP+a6ZSq0iJv9vH8LGWJ53hDWsZH7CECABOLhkKkv4+nLh7jscdbZ2oTSHyI7O4P4T0Vwqwu/NiYLzeUiBeVFldZO2YKOfnpognHum1EkRycX+Atv0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379599870211.07456548142522; Wed, 3 Feb 2021 11:13:19 -0800 (PST) Received: from localhost ([::1]:47616 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NaY-00080C-Rk for importer@patchew.org; Wed, 03 Feb 2021 14:13:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37568) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOJ-0007ER-3o for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:39 -0500 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:38522) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NO0-0001Wy-9o for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:35 -0500 Received: by mail-pj1-x1029.google.com with SMTP id l18so240895pji.3 for ; Wed, 03 Feb 2021 11:00:19 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Kyzjq96nH0KWrOiii6echH6ofV70lplGMBMMhcVo2Uo=; b=F1CpBz6KI8pwYOdtsjrzYcnoFUgg6t6MPUbKQ37abf29plDfhp5Ia/GX5cs0qA//dA 3N0wtxcry/4ZS8oP9TuNzIFnTfMQonvee2WpyQ/XBdvDLA/81beZqcP45SpWqAdBX5/J xNQh8gi8cGdjBLOzxVKiTBtQ91cP7g/BdsWQmRtU7LyJXn/w6HzB89pqP7xX9AxVR1go AxJxXP+KNHMWjObKeaYVHjhOrsILHx86Hysz4ncDKyN9tXnef2CzmpYdPiSRMsCeZgtI QIdNtJNgXb+2m9mnd3OF5qS0qqRD5PIAQIzQtvkTnA3GFSWOtqslFoa2MIejmPJmY5Tk P+Jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kyzjq96nH0KWrOiii6echH6ofV70lplGMBMMhcVo2Uo=; b=nvyY0f3WCbx3lWkltZdZnpIoitLcAdg4efwtkDPcGPi/IUZ3hqZ/H7QMWfY7zmcRfj CPvQApls0rk7j2txUqT7CzDdCttNGWahMI+nD9tuJHF6DngbSl+8++b6mqtx7BXwD5uk pBqNItSoYkllWv7tuHa2v/fwRHRWUt68O0gC3ushSgrgnyyxs3RBuzeAJCCH34gIrJTb +EwmtLB5ib962z/p09Rg2sU1ErPboF4MCyJ+aZdJ7XHOa5hz2Lt3F160lqaMk2F5vUMn TYXcxOv3qw7wl7R406G1zVRqTJBtOA/NJojgGld4zA6+GMGbuCw62QExz7Nk40pCgDuT HwLA== X-Gm-Message-State: AOAM5311u6I/7RJcjHVFh4Ru8cXhU6i+DtNNHAPb42z2h3JV2uqqyOx8 /19tkpMRcnWGhSssk1ELZXhLhgLU9DIuc5pO X-Google-Smtp-Source: ABdhPJwzi21rq1Ox8a5PAeAhT9E3texglbeKrHnLId8Pez9C22NdeuKfcV+w7THrz6lfOvWOrVDEjA== X-Received: by 2002:a17:90a:fa09:: with SMTP id cm9mr4235955pjb.160.1612378818964; Wed, 03 Feb 2021 11:00:18 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 02/31] linux-user: Introduce PAGE_ANON Date: Wed, 3 Feb 2021 08:59:41 -1000 Message-Id: <20210203190010.759771-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Record whether the backing page is anonymous, or if it has file backing. This will allow us to get close to the Linux AArch64 ABI for MTE, which allows tag memory only on ram-backed VMAs. The real ABI allows tag memory on files, when those files are on ram-backed filesystems, such as tmpfs. We will not be able to implement that in QEMU linux-user. Thankfully, anonymous memory for malloc arenas is the primary consumer of this feature, so this restricted version should still be of use. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu-all.h | 2 ++ linux-user/mmap.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 99a09ee137..c23c77589b 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -275,6 +275,8 @@ extern intptr_t qemu_host_page_mask; #define PAGE_WRITE_INV 0x0020 /* For use with page_set_flags: page is being replaced; target_data cleare= d. */ #define PAGE_RESET 0x0040 +/* For linux-user, indicates that the page is MAP_ANON. */ +#define PAGE_ANON 0x0080 =20 #if defined(CONFIG_BSD) && defined(CONFIG_USER_ONLY) /* FIXME: Code that sets/uses this is broken and needs to go away. */ diff --git a/linux-user/mmap.c b/linux-user/mmap.c index c693505b60..7fb4c628e1 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -599,6 +599,9 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t target_prot, } } the_end1: + if (flags & MAP_ANONYMOUS) { + page_flags |=3D PAGE_ANON; + } page_flags |=3D PAGE_RESET; page_set_flags(start, start + len, page_flags); the_end: --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379042; cv=none; d=zohomail.com; s=zohoarc; b=J2r2eESdN/XDujYIgLPAUp+ryySRgcZXUHaUCL+gS61g0f2lscP2J9ia0RMybYWMtCyrCy778+XdtuMpHWh2VrhCPZQkSFcfFcklwLiCAQIqByJuvfIaSPXQm3nVzdKAZ1fe1SaZ/yqONZCqp0aoI0mu+V/W0p3H8xxm9dugLjU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379042; h=Content-Transfer-Encoding:Cc: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=DceYI7nDpGrVro6uaTXIjIpKu8QfbL7pTtHCfGP3Jms=; b=jxEpPoavC/N3Ysondw82MUAjW76xLGiTwzXzi01+ZGrPySsa1n/21w4HoHrtK4++9ZdKlyvLwimSBHactnOZsCFNcea4uM/CSFoNeF+vIzMnHsWe4Z7S84gsrrZ9LtPgLjxtjL1Rf2CvIjM69v2nIAI5NkpmXsgSQof/oylgv4Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379042330635.3871463205368; Wed, 3 Feb 2021 11:04:02 -0800 (PST) Received: from localhost ([::1]:58108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NRZ-0000T6-3n for importer@patchew.org; Wed, 03 Feb 2021 14:04:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOK-0007FY-WD for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:41 -0500 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:45391) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NO6-0001Xj-VP for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:40 -0500 Received: by mail-pl1-x632.google.com with SMTP id b8so362274plh.12 for ; Wed, 03 Feb 2021 11:00:21 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DceYI7nDpGrVro6uaTXIjIpKu8QfbL7pTtHCfGP3Jms=; b=GcUrX1bYOYhl4MvrWAHmDA7Eg15uktSIInOMHA5T0nXlEYaKWeo44/gJN1tSn/QMOj y7IDpDCgu01UfgDoIdgvwQIWxz3tv1/Et+MiFPMiqhDd3xsWwah2o3hvntuNdpmUX8Mr P/HdLoSWPiBz/MQGPTHat+1tUh6WwgPlds8kh1k4xNQuMn1YfY4xiMg1DsBXNBIF5zPV jr0Ll0Zf9ewIdkiwSF61xiT6f/b/ImPWO1gx021Cj20LWxKyJ6pzb7AxEcXenj8987rr iUNXGhhEttmqhIrSKB1dBX0nALMZ6EjvXypwTTQw4znYeAi0I9T7dfrrsnlBp8DA61E8 z63A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DceYI7nDpGrVro6uaTXIjIpKu8QfbL7pTtHCfGP3Jms=; b=B3VH117B6t/6cg8+keYHn2Xf7oa62+vtxcbwRpZJNclOhrPcVhEdejAWMq5jq59TFs uKfAMk2gLcXsQ0ZGN0OvYz0tTEeGzugbMBSp/SRU69iPj/uwPRHAmxFMebqRHXAven/O VGEQVLyuS7c4tuK9HkegzISauubUtf0iAPH/ZmJRWAXwZwDg8C7JhIwovQiCRf8Cbeto 3uyojXyNXlmmQI0lpRfmKdUKaK5jej58oZRKqhJ7Qy73Gafrnf0uTxB1Iigw8wcZyyJ+ /ufVIGG8QXCYLYfahlKUjMmV968/J5Lg2jKzxxsP2sW+bCJIpJlzxTQwoScSGthulJIA 2pxA== X-Gm-Message-State: AOAM531FIeo7v2yCzzkWnhB67epnPjheHRuXwNIDJeL+WpUIHtg3MZvT 0aqKcaSjshUK8yAPh+HirXJ3PJrdcaNgzywy X-Google-Smtp-Source: ABdhPJwZDNFh3jli4X44pv5oIeJDtUmUDC9w6JEMIIsbMoadIUwqu+TYPvzXjUq/U1C9C5kNday3Zw== X-Received: by 2002:a17:90a:7143:: with SMTP id g3mr4571351pjs.196.1612378820687; Wed, 03 Feb 2021 11:00:20 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 03/31] exec: Use uintptr_t for guest_base Date: Wed, 3 Feb 2021 08:59:42 -1000 Message-Id: <20210203190010.759771-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This is more descriptive than 'unsigned long'. No functional change, since these match on all linux+bsd hosts. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- include/exec/cpu-all.h | 2 +- bsd-user/main.c | 4 ++-- linux-user/elfload.c | 4 ++-- linux-user/main.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index c23c77589b..c52180e8e6 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -158,7 +158,7 @@ static inline void tswap64s(uint64_t *s) /* On some host systems the guest address space is reserved on the host. * This allows the guest address space to be offset to a convenient locati= on. */ -extern unsigned long guest_base; +extern uintptr_t guest_base; extern bool have_guest_base; extern unsigned long reserved_va; =20 diff --git a/bsd-user/main.c b/bsd-user/main.c index 65163e1396..c09d74d788 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -41,7 +41,7 @@ =20 int singlestep; unsigned long mmap_min_addr; -unsigned long guest_base; +uintptr_t guest_base; bool have_guest_base; unsigned long reserved_va; =20 @@ -965,7 +965,7 @@ int main(int argc, char **argv) g_free(target_environ); =20 if (qemu_loglevel_mask(CPU_LOG_PAGE)) { - qemu_log("guest_base 0x%lx\n", guest_base); + qemu_log("guest_base %p\n", (void *)guest_base); log_page_dump("binary load"); =20 qemu_log("start_brk 0x" TARGET_ABI_FMT_lx "\n", info->start_brk); diff --git a/linux-user/elfload.c b/linux-user/elfload.c index a64050713f..29f07bb234 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2135,9 +2135,9 @@ static void pgb_have_guest_base(const char *image_nam= e, abi_ulong guest_loaddr, void *addr, *test; =20 if (!QEMU_IS_ALIGNED(guest_base, align)) { - fprintf(stderr, "Requested guest base 0x%lx does not satisfy " + fprintf(stderr, "Requested guest base %p does not satisfy " "host minimum alignment (0x%lx)\n", - guest_base, align); + (void *)guest_base, align); exit(EXIT_FAILURE); } =20 diff --git a/linux-user/main.c b/linux-user/main.c index bb4e55e8fc..55aac56d70 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -58,7 +58,7 @@ static const char *cpu_model; static const char *cpu_type; static const char *seed_optarg; unsigned long mmap_min_addr; -unsigned long guest_base; +uintptr_t guest_base; bool have_guest_base; =20 /* @@ -819,7 +819,7 @@ int main(int argc, char **argv, char **envp) g_free(target_environ); =20 if (qemu_loglevel_mask(CPU_LOG_PAGE)) { - qemu_log("guest_base 0x%lx\n", guest_base); + qemu_log("guest_base %p\n", (void *)guest_base); log_page_dump("binary load"); =20 qemu_log("start_brk 0x" TARGET_ABI_FMT_lx "\n", info->start_brk); --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380329; cv=none; d=zohomail.com; s=zohoarc; b=Fqcc6FFxlulIZ660e282bUu32kIQWAMfhkvzx+rbrzBlIxYsEz/BL0kFaE6FXp4h8ablf6M2bP6IpomrtU/zLGlKuidvVZ6XV/mUxWpDBlUqKru24WjJSqhmmY8sh0tXutst1G5I8eOi6oqGf8CUmpygeTBQTdWv2LpnRiQ8Yno= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380329; h=Content-Transfer-Encoding:Cc: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=rTJCLYbpyElUYj7N6H7CWtvtauF0jl3ZjvvIOqLSVtE=; b=bJT7V+Oma5ZJUsqwnssITaksi4KoqCPDjlPc0bsDLWo0cHzFIFAzD/RaQoz9x7sSc9o8Ey824oMe56zL0KwOjacNPmohKQMaTj36vn5z0pavibVbHAncFyO6hoaX8U/V4rNtXhcZqmWZpFR4AYP9F27TkYhjCyPAc0vTrJweh8Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380329831864.661906477357; Wed, 3 Feb 2021 11:25:29 -0800 (PST) Received: from localhost ([::1]:41542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NmI-0000VY-KF for importer@patchew.org; Wed, 03 Feb 2021 14:25:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37650) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOM-0007HN-85 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:42 -0500 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:36198) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NO8-0001Xs-0b for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:41 -0500 Received: by mail-pg1-x52b.google.com with SMTP id c132so393746pga.3 for ; Wed, 03 Feb 2021 11:00:23 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rTJCLYbpyElUYj7N6H7CWtvtauF0jl3ZjvvIOqLSVtE=; b=Rih5WxioQvillJyGLi9Kv1x13x4S3l6j3fwoNV/X87/NtsYTrfY6i00RoeQSOXiKXs En2S9KdyLbqJ8D5onwOG5VOyMSSDw8YIqbSozyC4mFFcr3yN3H4YEqBff470qPzGVTCM 0QhlUwtTs6ietDD4P4ElcvS4TsvtfkxwyCxZS14oEM9jCMgSU+fPd0sZRhNnp2lFE9dG Yd8tJmUktYMOe/cYxToEsQrqSpEP47AM7KiBfXfzP2w+slXpC6PlEqigdc1Sa7aKwAyG IHdpbWupg2wClSJd2Z0NXgwLn2tkF/G6RtP348Qh0s8+YeahtLUhOFxhYjRYErdHA9gi 1oMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rTJCLYbpyElUYj7N6H7CWtvtauF0jl3ZjvvIOqLSVtE=; b=IlXwOfn7+CrgvOnafkY3J1oPOn25SoU+6QguxRw9dV3IWqMslfJHy/96PhBLETMLEU /a6qL0kLYpZIQ4434iWx4IsLdhw152jqXnMNgjaoWXJ9n67o5uU7wg42V25Pkvr5Oh01 wqXwQxVQqmIQQ6PSXDyCZHL6ysZU39Z35yME2oZilyiJTt2Sl9MDhDb4btZu+aJK5HmD /rf0wYOJGqUqMpkqO1maODh1yfKK8NCURo/PNNLvW5UuGMl3Gf3oedruw0G7MGy9JSjy EEcinx5BLuSaysC5gGXexMgAt5BrMjVP/JCYl4eYTUSWLU60ZdiFXTx2RjPxFjzTiFvv zs/Q== X-Gm-Message-State: AOAM533KKOhFUaev5y3dT8bfpJesA1V26a0JzyfJvP5PNHWkSnm1i9Sq D9cq9X4SEGO4erMDhM/TirV5vlE1twg/2hUe X-Google-Smtp-Source: ABdhPJw9hJGTmAVUswMWDRDkjmu8uKtos4YirJnVZ1xkOXExrdmeNNbsPCfwchDKPQYm6qUWm0DmEA== X-Received: by 2002:a62:190d:0:b029:1bd:e11c:4eff with SMTP id 13-20020a62190d0000b02901bde11c4effmr4496067pfz.22.1612378822419; Wed, 03 Feb 2021 11:00:22 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 04/31] exec: Use uintptr_t in cpu_ldst.h Date: Wed, 3 Feb 2021 08:59:43 -1000 Message-Id: <20210203190010.759771-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This is more descriptive than 'unsigned long'. No functional change, since these match on all linux+bsd hosts. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu_ldst.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index ef54cb7e1f..3f9063aade 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -70,14 +70,14 @@ typedef uint64_t abi_ptr; #endif =20 /* All direct uses of g2h and h2g need to go away for usermode softmmu. */ -#define g2h(x) ((void *)((unsigned long)(abi_ptr)(x) + guest_base)) +#define g2h(x) ((void *)((uintptr_t)(abi_ptr)(x) + guest_base)) =20 #if HOST_LONG_BITS <=3D TARGET_VIRT_ADDR_SPACE_BITS #define guest_addr_valid(x) (1) #else #define guest_addr_valid(x) ((x) <=3D GUEST_ADDR_MAX) #endif -#define h2g_valid(x) guest_addr_valid((unsigned long)(x) - guest_base) +#define h2g_valid(x) guest_addr_valid((uintptr_t)(x) - guest_base) =20 static inline int guest_range_valid(unsigned long start, unsigned long len) { @@ -85,7 +85,7 @@ static inline int guest_range_valid(unsigned long start, = unsigned long len) } =20 #define h2g_nocheck(x) ({ \ - unsigned long __ret =3D (unsigned long)(x) - guest_base; \ + uintptr_t __ret =3D (uintptr_t)(x) - guest_base; \ (abi_ptr)__ret; \ }) =20 --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380067; cv=none; d=zohomail.com; s=zohoarc; b=Ek+OqhBID5JwSy0qyfLnCfNXFjp6B66QxsMnYOEzHAZlF8scspWJxYDs4Yl2Jsh4XT0I7cIRqljGnCcxGTZ7h6AbQ99bTuG37tn63ZveV+1M14br9xvsKUDRlQ72DoEPWsNhoYs4YBRUfqMebHVmv09PQSxMhnJLyqkR7LZwHow= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380067; h=Content-Transfer-Encoding:Cc: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=xhhF4cnD2bQGGauP5wAsskp8GPwXgWKUSZeMzfZve48=; b=BaumerfUDLg+Jrx+XONDuY02xOxNx5zpRudV6Mb4KVYG+WvaGbGT0Ja88fBHkDemyXCGfDnYi670pYQ+bT5Ym7TEOJjB+b3qhageZ9JyJ21w3v1QnlZnmTbIAxlLnYYvxi9lKOreVVjzsgUbNz9YtBnlDb091O8TDOY7KX/m2BQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380067249199.56126751998113; Wed, 3 Feb 2021 11:21:07 -0800 (PST) Received: from localhost ([::1]:59866 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Ni4-0004jh-8V for importer@patchew.org; Wed, 03 Feb 2021 14:21:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37604) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOK-0007FX-V8 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:41 -0500 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:36200) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NO8-0001Y2-Os for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:40 -0500 Received: by mail-pg1-x52d.google.com with SMTP id c132so393813pga.3 for ; Wed, 03 Feb 2021 11:00:25 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xhhF4cnD2bQGGauP5wAsskp8GPwXgWKUSZeMzfZve48=; b=Dn4NrvSlD5Wc8XuliQ0uS/M5JLx5yDp8v/YOLQdzU2aXobGqP57XatSTTy9rpRhlK/ WGGsSj/YsKvnmIEnTN09yb/OFmaG07FUXwkvtAIKaf2zIxmoETJt4hdMpsvLKWXnAB7J CEDXd4JEszREQDX9j/olQddUEArLw6L5c5+Hj4+yrieISWxAfxIH9LZVIkQdbNQU6hUF NEC6z7LcN/jqxRvDKI2U4B0VUj77fKL6Ug9A/roX9RIT01BmjHEcU+YX0rc36iPUWcyt /AGkoUKWCVVszsyBenPXlnKCEC887GYHiZT/06FQQ3SWOLHuoONQy0eOs5HqWoF0lHZv 7lig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xhhF4cnD2bQGGauP5wAsskp8GPwXgWKUSZeMzfZve48=; b=W2OEHrr7irmZHYKlaDe8JT6Y71WpZnSEYKAjzwU1LMk0igjsl8c8LBlvF8b4HBQdBB 33irbIFVwaHdPo0SWEQxItbnZ3dzVwFcgRwWqKb9rLchEL1sBYEjDpbnGqjrAxJgvzFH hCyT8wAhi3j8JkJvwNKNH0n2lpogDf5PplKH6jlKxH9m5Mud/J/sq1o5Qk5zp6lGW8QJ 8Jr7UhC0zVL/FYTKXkD9hCekXA2ctIVzRWn2JhRbNXOhwfybIO0CddlBfS23p6ULdBW/ UnM6pBc+UKf2QOiJnWOmijA2lDNO8sVqBq0mSpECcbpaWEhkwbkSZrDDkd9tPBvCbiML wsDg== X-Gm-Message-State: AOAM533L71vLtcQRsKGh3Edo8uSOmJqVeqWzkyaAVZko8mh+ICd3Lh8G shli6ohzPZrlz/spKLiZtialixCLqa1DUJdD X-Google-Smtp-Source: ABdhPJz0YjafOfpAoba7aWrz5ErC9sYAbn3GhwjCbtgXYLIicGpbMzFV6e6xM6UWbSwdY5IUHnz1JQ== X-Received: by 2002:aa7:9d0c:0:b029:1bd:1e1f:8885 with SMTP id k12-20020aa79d0c0000b02901bd1e1f8885mr4468954pfp.48.1612378824321; Wed, 03 Feb 2021 11:00:24 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 05/31] exec: Improve types for guest_addr_valid Date: Wed, 3 Feb 2021 08:59:44 -1000 Message-Id: <20210203190010.759771-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Return bool not int; pass abi_ulong not 'unsigned long'. All callers use abi_ulong already, so the change in type has no effect. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu_ldst.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index 3f9063aade..5e8878ee9b 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -79,7 +79,7 @@ typedef uint64_t abi_ptr; #endif #define h2g_valid(x) guest_addr_valid((uintptr_t)(x) - guest_base) =20 -static inline int guest_range_valid(unsigned long start, unsigned long len) +static inline bool guest_range_valid(abi_ulong start, abi_ulong len) { return len - 1 <=3D GUEST_ADDR_MAX && start <=3D GUEST_ADDR_MAX - len = + 1; } --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379924; cv=none; d=zohomail.com; s=zohoarc; b=X0UiGsYjWAa2PSEBV232rLLgWa0Y+npW/ywk0FSETq05s9ndQyjzHi+2i6Df/eqRJwXDgRI4VX00aawWCL/weqpkGd3Pgr7Mg/s1CXQRGNF1mJ5GJbUUD7sV/v8KJ8CM/N2Fq51xR9x0JKWtYjGd9DV3najBN2sIpGOYtboP/uY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379924; h=Content-Transfer-Encoding:Cc: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=yAOD8rB2c9GoNvNcKMZwjdplIAr1RvdqOJ4SbnIjxU0=; b=XKoZg8Czea/BlnRDkDer69V7aWO0CV+B/wrc0NhVFpxVEEeaZajjZupamrU8yOIhKLTp/wmktin9GLY6mHxOctsBwdY2cG7inxiWRh4WLclmtmOPVcrAQXintT1yb5rjQMZKJLDt67QwooK8vRsEsN2FBFH6FzdTHbZMPjFViVI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379924805661.955343593053; Wed, 3 Feb 2021 11:18:44 -0800 (PST) Received: from localhost ([::1]:56340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nfn-0003IX-Mb for importer@patchew.org; Wed, 03 Feb 2021 14:18:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOL-0007FZ-1L for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:41 -0500 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:56207) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NO8-0001Y9-Q4 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:40 -0500 Received: by mail-pj1-x102d.google.com with SMTP id s24so221451pjp.5 for ; Wed, 03 Feb 2021 11:00:27 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yAOD8rB2c9GoNvNcKMZwjdplIAr1RvdqOJ4SbnIjxU0=; b=XqG6wHWXj2zbXFyi07GXn8kljDPIB7SODWlzuojWV2tkEsNqUnOCNcwbv05skV0ORh kHLKA1xYnBBeDfFoNNkVW1iivJpGgHbUx6aD16A+17fw21y7/2QzMHN+iClSd2L/Ol+J c472h8YWr7GX7ishxIanPD8baEQ7JDUdIMenmBE94dZmAz1qRj4jAE2U+x46dzgK91Hx mAPUICY5Ydh4g/VLxBi6KV8zqdrJDK8rPX2QS830RBql4gvZS4Z8IVGioheYxDCk+ICl bQcizvgypCXD8WI9LI6rz87vT1z8ekCj2dgxTAYRuU2okPi1t+OabsqpiCDgbBackg9J Qoyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yAOD8rB2c9GoNvNcKMZwjdplIAr1RvdqOJ4SbnIjxU0=; b=tzEI3RKSGit48bxFcVoqDunWhodfV3L+9IIUjSk50rUgV5bpdWgt5aB4SAmcziebil zxZqZk/vWj1DWOvCVnc5C0oNDV8+mLL2n67m74etg6O5u3S3rMczR/J0l82/jjShLagf t7uRPd9AXjgRpIu44MOr9DasTuV9iyME1DcqatAoXbl7c/kMz4D4PbOoHXXLuGtznLrA FxJ/G47q4b7mUQMfn9vLUOT42rwtrpI2t5ODIbC4CPIodfJ/VhwposSbPwoayaIk4nS4 ToFTYHOIV00ka7iJewNQmmTCXFte1+YM1hKviriWcdbJ8HIlE3qa8fGnm5VjUKnoJV5o G0nw== X-Gm-Message-State: AOAM532wzkspbD7dQjMg6qJp5FdRY2mb3BdR7fAMKw41Tqi2YIpA87bo znLz6CL6BAHnqGEor3hviN6U/050SjS5euwP X-Google-Smtp-Source: ABdhPJwuJvYpenr2XkA045H7AFH9hrm85WdcAI4rL3GSCWMGmVRFztwYiqIReKnBbOong53V0Sag0Q== X-Received: by 2002:a17:90a:fe11:: with SMTP id ck17mr4401886pjb.152.1612378826771; Wed, 03 Feb 2021 11:00:26 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 06/31] linux-user: Check for overflow in access_ok Date: Wed, 3 Feb 2021 08:59:45 -1000 Message-Id: <20210203190010.759771-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Verify that addr + size - 1 does not wrap around. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/qemu.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 17aa992165..441ba6a78b 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -491,12 +491,19 @@ extern unsigned long guest_stack_size; #define VERIFY_READ 0 #define VERIFY_WRITE 1 /* implies read access */ =20 -static inline int access_ok(int type, abi_ulong addr, abi_ulong size) +static inline bool access_ok(int type, abi_ulong addr, abi_ulong size) { - return guest_addr_valid(addr) && - (size =3D=3D 0 || guest_addr_valid(addr + size - 1)) && - page_check_range((target_ulong)addr, size, - (type =3D=3D VERIFY_READ) ? PAGE_READ : (PAGE_= READ | PAGE_WRITE)) =3D=3D 0; + if (!guest_addr_valid(addr)) { + return false; + } + if (size !=3D 0 && + (addr + size - 1 < addr || + !guest_addr_valid(addr + size - 1))) { + return false; + } + return page_check_range((target_ulong)addr, size, + (type =3D=3D VERIFY_READ) ? PAGE_READ : + (PAGE_READ | PAGE_WRITE)) =3D=3D 0; } =20 /* NOTE __get_user and __put_user use host pointers and don't check access. --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380417; cv=none; d=zohomail.com; s=zohoarc; b=CLaBa+y/1CTxs/qOxd0JYoZK2B1tvr6J66OHJBGuQtyyxTR2jgErvGkNadoo8U5bO6DLC78WhNLp4OJ3jphAQECA1ktASewn9hgJJE2O124DrkYowdSo05Dy12ZyY34KN8TlbNqME9Yvgb1qRigqFo8jTnIFuz35/ImDScLMS2s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380417; h=Content-Transfer-Encoding:Cc: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=VyGOgXRVYXE4KsV9afYsCBAI5eV0Qm7bovPtD8hErTQ=; b=Ucwq+6PEtHG+M5DW0WY18Yx5j9wdHdOcsG9e0VbWdn9+NZDLtvk2KyKtiZkRJ4hXrpei7PtNQy99E7PY0pIbZRZSyb0fbYOWe6rrglUTtUQGPbssUFytSzfbwOleG5g6lqzm5nWMfeRt+OacGY8lxIsc5i4uBXfrvqcXdEqEbUc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380417510909.5908063362391; Wed, 3 Feb 2021 11:26:57 -0800 (PST) Received: from localhost ([::1]:45544 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nnk-0002DC-DY for importer@patchew.org; Wed, 03 Feb 2021 14:26:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37702) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NON-0007JR-Pc for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:43 -0500 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:34666) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOD-0001YO-42 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:43 -0500 Received: by mail-pj1-x102c.google.com with SMTP id my11so3795640pjb.1 for ; Wed, 03 Feb 2021 11:00:29 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VyGOgXRVYXE4KsV9afYsCBAI5eV0Qm7bovPtD8hErTQ=; b=bckRd6Jntpm8j9phal4Wv/hlW8xv7NccfSHl2zp6pd4x/pB0UZBdENRTyqBRSI+ZXo 9+3wKfrTrutDC35eRD62nfV0bGyELB2vmcgcqyAcsK0vUWolWqcGgTNI/zoEcLh7dWJb TaXih1jLxmjf6LAkUFZqPfbh5fdWwI90hfqp6XZL1qslkFI4eSKkySTKlUVW8d2tkmVy L4I4GY7dfcZ/7Frz7ZisKmEa+gmzBf6NEkxrqMQ+8lktZ1yBecPDWzleYgpTM1bX6Owq EmX2takP5qrW4WNksabmJmRbaF5LaCPv1ojQx0+g/TDYLiDZgoSdNH0n75Q3qY6fZ+lH wB3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VyGOgXRVYXE4KsV9afYsCBAI5eV0Qm7bovPtD8hErTQ=; b=TxJzTKCAw7VY6ayB6X2pQ94J4xCTyG8OdLyPq4EOUSzjPj0kWBLSDs4ehr8lamjSp6 aIohUksbsLVHGe9nepaH7B1SLHaA3XmQAPlGsPsI4/kAcFfCRhX/6E5n87wbvovHscJx Y+tqzwKsX/Z1adIXcFyxqSw+/28KK/mMS/K5/6xGvVZ5SHn0FnpmRx715GYv0PI0XtBR UxmDQJiCTta3s1HlI8LHcgKYnLNA3/yISdGX3GXmxKiC1SwMT7+Q4F5N3ebBcPn/Q8FE 6wLav5svb1b2lV+7xJ8YLu2bvu1LA3O3vPC4VlBC2NKr/5BS8KJiL6MEAc/evD8CLNpO sUDw== X-Gm-Message-State: AOAM531ZrGRLrOA4iEc8pZvhFDq+vfawOg0JE9P5GHMbFaOT0o6v9ddF kcgEOu0tNeiZwzLqWZUhv803gk0iIL2F9mRu X-Google-Smtp-Source: ABdhPJz7VLvJ9lfjLsDmBWR6Wr5p6p4UxlXI4nsWlLhv4iGf56VNS8XQ09MeQQoGkVx9zwEIpMtn2g== X-Received: by 2002:a17:90a:5209:: with SMTP id v9mr4553068pjh.8.1612378828804; Wed, 03 Feb 2021 11:00:28 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 07/31] linux-user: Tidy VERIFY_READ/VERIFY_WRITE Date: Wed, 3 Feb 2021 08:59:46 -1000 Message-Id: <20210203190010.759771-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These constants are only ever used with access_ok, and friends. Rather than translating them to PAGE_* bits, let them equal the PAGE_* bits to begin. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/qemu.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 441ba6a78b..9251337daf 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -488,8 +488,8 @@ extern unsigned long guest_stack_size; =20 /* user access */ =20 -#define VERIFY_READ 0 -#define VERIFY_WRITE 1 /* implies read access */ +#define VERIFY_READ PAGE_READ +#define VERIFY_WRITE (PAGE_READ | PAGE_WRITE) =20 static inline bool access_ok(int type, abi_ulong addr, abi_ulong size) { @@ -501,9 +501,7 @@ static inline bool access_ok(int type, abi_ulong addr, = abi_ulong size) !guest_addr_valid(addr + size - 1))) { return false; } - return page_check_range((target_ulong)addr, size, - (type =3D=3D VERIFY_READ) ? PAGE_READ : - (PAGE_READ | PAGE_WRITE)) =3D=3D 0; + return page_check_range((target_ulong)addr, size, type) =3D=3D 0; } =20 /* NOTE __get_user and __put_user use host pointers and don't check access. --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380206; cv=none; d=zohomail.com; s=zohoarc; b=R37KoAuS5r4FmIKQjunf1L2uNePs9j0nF0Dyq/z6HbDEon25V/vodfvfkm3ooSTuss/ZvhQ3fU0kiGjUqbnU9fzhNXt0Tym+z4lbOg6LpXtZX06b0e/4oWlpxSMKGmHPuWlVLAvElIgriW3fU6VGzKPc6vHBVmaIwklIk6OFJoM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380206; h=Content-Transfer-Encoding:Cc: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=Yq9neRE5uhExlneFuBSgGmaVVsCJdyYjAvE1n9KBmpg=; b=OOYtUz9cTQNkmF73kd7giTqUSm6IxkCo9FrUQ79UUGSw536ZREUc+vdolAGrhi8uSwDTd4c4pzTQwxtlFNYKhxCq8k9rtuxLoa8fKvncLgs155eHSWc5t51j6fkgXR47WrvxfZuIWHPW2FZphb8ZX3RiHnWKwq3M51v8UIS43DU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380206170846.3640728696544; Wed, 3 Feb 2021 11:23:26 -0800 (PST) Received: from localhost ([::1]:36816 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NkL-0006y2-2W for importer@patchew.org; Wed, 03 Feb 2021 14:23:25 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37688) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NON-0007Ix-B0 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:43 -0500 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:39485) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOD-0001Yc-4r for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:43 -0500 Received: by mail-pl1-x62e.google.com with SMTP id b17so379894plz.6 for ; Wed, 03 Feb 2021 11:00:31 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Yq9neRE5uhExlneFuBSgGmaVVsCJdyYjAvE1n9KBmpg=; b=lBxeyrV8U8jCYnP/Lm3TopyWot5KL0pnqKrNf2G2NQhkoOnp6OWBiW/5ZDqF9JVIj4 qjvo2g5vd4w3qBewxNhKw+VIRFnCchJnNg2vpR9NDRSzghvJ4dySI2SZC2nwklaP4VRL sy7R2258B+ifesy1R5PHeGkZdnYSrXloqPzv13sv+eZD0lQJfnCUntjefdBsl6OdYoRM 88YfUv1ylfyrY6PYmCz7Xl9oddDxs2BDWTmq63u0YTKJiqOBMcYdNlBi10Ihp5LNYtSY 0yawN1Tsa8z87rebMjL+SPOJAVdC/ZOPZUSXC/bMnycDyATF5sDjFuWW6M45f0sDh3HS Y+ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Yq9neRE5uhExlneFuBSgGmaVVsCJdyYjAvE1n9KBmpg=; b=FhpdNA2sLwL0ooLrYPmUupS8c8Gt2wd+p1Z1+ETDPB/lR1I6v5J1wqhSp8qXi56qg2 qC43EdtUGSb5awGviIVUkp6MqAVvuvR7f1xOcS9GI3CS+yzoNH+k75msgdMWGeSpCRtk LxiSzrPtVex3ilmI6PhcOmHvWfKec+XUeZMLAFnE3KxXmZlRj9mbJ7MyN/Q7UKGDse0d MHLPssyeJlHfT7WJhxe1A4CznBF2TrOmAU0pUQJWxLiIybZMGb8McFeu3JXzyTObgXb3 0FSMmkSVJ8xFrbxJS3lIP9/1cW2UWD0JjPoiXd3RWSEsQMLarMurJnD8r/2LPdcWMKhy nBmQ== X-Gm-Message-State: AOAM533OQyLuJo/xX3zhiFNJeHs6h3UHhcx9xRZ0Xxkl/3zyBlaax04I L0mRsjD5ajNjCq1lmFOqY5H4w+WP4TuGG2+T X-Google-Smtp-Source: ABdhPJymI5o+21Da+VuL192jHZzuEnI9rSublMuvOenDXLszCUU2ga5HOm637BCRstvCPndh6lZ+Ag== X-Received: by 2002:a17:90a:65c4:: with SMTP id i4mr4333803pjs.132.1612378831130; Wed, 03 Feb 2021 11:00:31 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 08/31] bsd-user: Tidy VERIFY_READ/VERIFY_WRITE Date: Wed, 3 Feb 2021 08:59:47 -1000 Message-Id: <20210203190010.759771-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::62e; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62e.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org, Warner Losh Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These constants are only ever used with access_ok, and friends. Rather than translating them to PAGE_* bits, let them equal the PAGE_* bits to begin. Reviewed-by: Warner Losh Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- bsd-user/qemu.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h index f8bb1e5459..4076adabd0 100644 --- a/bsd-user/qemu.h +++ b/bsd-user/qemu.h @@ -218,13 +218,12 @@ extern unsigned long x86_stack_size; =20 /* user access */ =20 -#define VERIFY_READ 0 -#define VERIFY_WRITE 1 /* implies read access */ +#define VERIFY_READ PAGE_READ +#define VERIFY_WRITE (PAGE_READ | PAGE_WRITE) =20 -static inline int access_ok(int type, abi_ulong addr, abi_ulong size) +static inline bool access_ok(int type, abi_ulong addr, abi_ulong size) { - return page_check_range((target_ulong)addr, size, - (type =3D=3D VERIFY_READ) ? PAGE_READ : (PAGE_= READ | PAGE_WRITE)) =3D=3D 0; + return page_check_range((target_ulong)addr, size, type) =3D=3D 0; } =20 /* NOTE __get_user and __put_user use host pointers and don't check access= . */ --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379282; cv=none; d=zohomail.com; s=zohoarc; b=eswWwy5m368IwxfypCdkPbFSCw8E/TsXEC/LltWKxiycInbtZ1yiMNUidTCGM3vVxxh4GB5/6wqzpzxIDnZ7y6PX7ISWVjiUaoaPAVQBaVOEGMj4TaNboJ0Ayqy+jdOTAEsvUtV6t4bFtU/mKUMxrEv0q8KblQUhr9wlryTs7dM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379282; h=Content-Transfer-Encoding:Cc: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=bAoMyMlDDlghVnqeNID447NiBs2PzgjWNFYjdCi+4Lo=; b=bT5d7oFDji7zJhnwm0F822GBPW+9lAKtVQdshtPyM8Z7mDxYH9gUhQFy7qV+67O00VdH0j1qX24iKynJqfkCCDIuPbnOr2MEebkI1xrBc8VVByyHP69eVylCEFXAa5FawLfN2tRN1acG6cJNGz3S2OxMmt1VEfEdQMnkkjBZtGM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379282071949.7631786924062; Wed, 3 Feb 2021 11:08:02 -0800 (PST) Received: from localhost ([::1]:37324 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NVQ-0003gT-Js for importer@patchew.org; Wed, 03 Feb 2021 14:08:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NON-0007JH-Ke for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:43 -0500 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:52042) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOF-0001Z3-2I for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:43 -0500 Received: by mail-pj1-x102b.google.com with SMTP id a20so235012pjs.1 for ; Wed, 03 Feb 2021 11:00:33 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bAoMyMlDDlghVnqeNID447NiBs2PzgjWNFYjdCi+4Lo=; b=v9GoRtutR3idBBXtfxTizd1A4cp0GGn00gTm2PA31jYYWTUZgAfwlPmtI9VD2jFGTC s2kp7kkjbYvTWeljhoQduJ+r+Kbbos+BLNjft6lIYWYrZmAfpthfrhsJn5Vnq1eEcr2W tsHRqJM5D2sLgAZp5AQr7dsFf2JebIvaA0FbtEDHn38R1fUQhe2gEEf/uTWh1UAs/67Y lI5dW6cRUGqPrH0zfydeALs8a/JnLC30bsP9nPjCdQHC035DZtaUMoUdtHogzEIVKdv5 fZr1suxFvQ86+1LM8GHX8KawmriRIrEKEu4NTiVBWTAmfq3ORyl6K7ZSSp8TdMdYN5OV hupg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bAoMyMlDDlghVnqeNID447NiBs2PzgjWNFYjdCi+4Lo=; b=rdx+Kvt5YyVr9ZBlE7KOTTCbYFOdxtzOKJaCJcy7JENx5v2GoIn8zbOIDVBdXSOTxI itg4iLGikR6KYBGIH37aYIjU0DVZOlodaXIsWnxkMvx4nBtye4Essy0aJCO2WMU2F0dT vWRoPw/TO5I2tc1KAS3SdgMj55UAUpD3WOcl6/CFC8UUXHiUn3jKTjhgBzonLCjM6frt fVJ0JPMGGQmGguYYiFji5khjCMuqd4PagwjhtRDBdTBKZeM9XZo5YMmGsUETnbpRR5SL +lYKsLF8R4HTJO+tUHhZmNUdoD+GNNiOi+IqI/aUrN5txfvIu7QD4xI1eAsup/zUX25E yQXw== X-Gm-Message-State: AOAM533Do6oK2MUPkWgbZFtYP1zUCiP2hU+JUEuw5XRFbNjUha2S4b1N aOPguGG4YdYwko6zJq4/fbwQVSwV9LE+gomt X-Google-Smtp-Source: ABdhPJzOhrL9qCTvowqFC18MxhboRcJ22GsnR8oTAEYjqXjK7tCQnvsM5fJd5fWbbK3SDhAnBzqvHw== X-Received: by 2002:a17:90a:5601:: with SMTP id r1mr4390757pjf.236.1612378833161; Wed, 03 Feb 2021 11:00:33 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 09/31] linux-user: Do not use guest_addr_valid for h2g_valid Date: Wed, 3 Feb 2021 08:59:48 -1000 Message-Id: <20210203190010.759771-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This is the only use of guest_addr_valid that does not begin with a guest address, but a host address being transformed to a guest address. We will shortly adjust guest_addr_valid to handle guest memory tags, and the host address should not be subjected to that. Move h2g_valid adjacent to the other h2g macros. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu_ldst.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index 5e8878ee9b..4e6ef3d542 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -77,13 +77,16 @@ typedef uint64_t abi_ptr; #else #define guest_addr_valid(x) ((x) <=3D GUEST_ADDR_MAX) #endif -#define h2g_valid(x) guest_addr_valid((uintptr_t)(x) - guest_base) =20 static inline bool guest_range_valid(abi_ulong start, abi_ulong len) { return len - 1 <=3D GUEST_ADDR_MAX && start <=3D GUEST_ADDR_MAX - len = + 1; } =20 +#define h2g_valid(x) \ + (HOST_LONG_BITS <=3D TARGET_VIRT_ADDR_SPACE_BITS || \ + (uintptr_t)(x) - guest_base <=3D GUEST_ADDR_MAX) + #define h2g_nocheck(x) ({ \ uintptr_t __ret =3D (uintptr_t)(x) - guest_base; \ (abi_ptr)__ret; \ --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379313; cv=none; d=zohomail.com; s=zohoarc; b=lshBysqVdsdASt1+Vc3RPH1I3u0D/R3S0/CRrCj2HyOiBSKxOxIZ6vwivDaZsaBSvZU9HOdF8GYuAZgzWKN6A0cNvwTMRlizKPJd9Fv40mBu6E14bQknp0L16A76o6aC3y13MYI/K2k6K89aLAchZULyllYPVTu9igaUP3T6XYQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379313; h=Content-Transfer-Encoding:Cc: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=EkdpbP6ZnSTqdRa/S1vfX9RZ5a2dDCb/MaRsUJualVo=; b=BGdirOGjRfLMqfpW0+criphXeb0kwSvqF4ksch/tW9YtxpBaIM6BZUx0ovCBV6euCbtJBk5ybBHxvvxjdYIyGoi/8W98wfSfv42/znEnLhXjXT3oS94W8HGF3vScMYPaQ/Sblxy/br1Lr7F+IvgfSelZYfcwV0NTBSrRh4EkaQI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379313805796.5251052589305; Wed, 3 Feb 2021 11:08:33 -0800 (PST) Received: from localhost ([::1]:38796 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NVw-0004J6-Dq for importer@patchew.org; Wed, 03 Feb 2021 14:08:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37752) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOQ-0007LD-FX for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:47 -0500 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:35336) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOI-0001ZC-SB for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:46 -0500 Received: by mail-pj1-x102d.google.com with SMTP id e9so248904pjj.0 for ; Wed, 03 Feb 2021 11:00:35 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EkdpbP6ZnSTqdRa/S1vfX9RZ5a2dDCb/MaRsUJualVo=; b=cfs6F6dclOVA/7vKUzDqj1TRDzL9GxXsIHtiF+nvq2eWW6urRS94RYJdI0Gu2K3cri l0rk0tHbgeCxohxe64LJxh4FNjoTT1VUsybdQVIi/cM2lbiPXdwwb+JYTu3La8xx0XGe YRrMhLWWRK4GwuTXqaouOrccUh7PFRqSkSeO1t0REHNb3Jh+yvYBwYqfpOhILkqgvlTt NWLmyx0wzabhXqDfpdx8KQ8j1We89OxFODyx0ZaWajcK5ELRRHcU64uuAa64TTkyRIMh lwLcBZ48NYALbWx9ogFsoY1AaLMdkk+vVfSv4Pj9LV5Ft7UlsqyYNKKYMjBqxDgoY90W hklQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EkdpbP6ZnSTqdRa/S1vfX9RZ5a2dDCb/MaRsUJualVo=; b=lnbhLTeIDq47lX66trFp6TnMOXEPZe/8nPTvxHtZahd/QUZNSo45XYKHHboRGQABHF EmIYb0gI65zmC1SLkBYt7cBGLM118/yUt0AKAxHYNr8/l5oQs2ack/J3D7hOnCR64Lzy LPBPB5V6LNB3F6c8jeDwzniuSm4JJWCExQkJRLkGx6pGWk8tYIMvd9zxYsqMTS3lICba YBnLxkMaB8iA8k6thQUiCrE4oP/SDAXo3PifpLYXLGOoJYpmewi9xlXan0fTgOxLaB5K 2xuv/hWxyUXg1NwYdR3pvRk2L3wXhkqL5CMNn+BtvU6CJ2Gw0s8IwuW+jRNdaSHJpBvf qAzg== X-Gm-Message-State: AOAM531z/n/wiUrtmIgVge1c8sTpXmvEsZ4ipuJo91HqeqTFJpeciTBO zSKotaIJwxgwWzR0WRvbeSULqs94ltlnYlVn X-Google-Smtp-Source: ABdhPJxeIUTtCe+VUmgTmQm6UhvBMdrMYgKwxw/hK4LMnmgNPePHr+tw448yxWjBkBwIYkOTLUZbZQ== X-Received: by 2002:a17:90a:4088:: with SMTP id l8mr4490214pjg.106.1612378835122; Wed, 03 Feb 2021 11:00:35 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 10/31] linux-user: Fix guest_addr_valid vs reserved_va Date: Wed, 3 Feb 2021 08:59:49 -1000 Message-Id: <20210203190010.759771-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" We must always use GUEST_ADDR_MAX, because even 32-bit hosts can use -R to restrict the memory address of the guest. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu_ldst.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index 4e6ef3d542..e62f4fba00 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -72,11 +72,10 @@ typedef uint64_t abi_ptr; /* All direct uses of g2h and h2g need to go away for usermode softmmu. */ #define g2h(x) ((void *)((uintptr_t)(abi_ptr)(x) + guest_base)) =20 -#if HOST_LONG_BITS <=3D TARGET_VIRT_ADDR_SPACE_BITS -#define guest_addr_valid(x) (1) -#else -#define guest_addr_valid(x) ((x) <=3D GUEST_ADDR_MAX) -#endif +static inline bool guest_addr_valid(abi_ulong x) +{ + return x <=3D GUEST_ADDR_MAX; +} =20 static inline bool guest_range_valid(abi_ulong start, abi_ulong len) { --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379595; cv=none; d=zohomail.com; s=zohoarc; b=CLUG99m3XhnGpSY0sW9K1MvuVrpX37pMLEmLrlbqV43U0y+DQ+mwiF9I1pW8DBINQY1YvV7yjxD8i0+63EtoqxV1T6DHQYQRkaK7U7QwYjC1IBUmEZA89b5RZQBuAqlLjW4lwdS1DycCA6PueSY6Mn7Cib7dVAn0urZzmw2/scc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379595; h=Content-Transfer-Encoding:Cc: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=vzS7YDdAcF7U4pxIlp6JJD53EW8Zqfir+/pxfdOUhEg=; b=f9+NdbX3NkjAoYdwBsc/lVJrNhNvs9UXmqQ0I87dns1xScV/RU2DXFl5/yZnVM9e/o6DPi59qNqsu5M7qN05FvBfi9txiXUChuQyEyQMwEVwOOPhL+fUBSw8Cr36977NPwFLZBn9JUtyb3Sys0BEKB9B5qlQ553CrsR75WN6sWA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379595084113.41025148525841; Wed, 3 Feb 2021 11:13:15 -0800 (PST) Received: from localhost ([::1]:47464 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NaT-0007wO-OO for importer@patchew.org; Wed, 03 Feb 2021 14:13:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOU-0007NF-Ex for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:52 -0500 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:33963) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOI-0001ZX-Sh for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:49 -0500 Received: by mail-pf1-x42c.google.com with SMTP id m6so439890pfk.1 for ; Wed, 03 Feb 2021 11:00:37 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vzS7YDdAcF7U4pxIlp6JJD53EW8Zqfir+/pxfdOUhEg=; b=iErAgUEcRrsEXkLk+inPBZ0Ai2FNNvfG0tmcoaGVxP+ablTNytzE355JBKsaZzWZkz pb8o5TQxvGUCjK7id9VQQpH+rQ48eDDgsHYeSD5ROvBA8v7dY6Gs+7q7kxLoEz+xO97D QHL5wn5qt6lmiV1wTHN6FtptqJ6lNIaw0C5ZmqRsXzkrHhug1nDrvY9gKNYscDO3NLfG 9Hweor1cPa9eQ1OODpVuyZVPzWQRhoQ67f1MG0zijDWzt5puikkecMUD6RH7dRms26X6 QyqqSpwm48JviUrocq0KzrtND17ClHjP47IUNonelEL8Kr3KvHKZli/5HSSb7Wo8kLqd tbRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vzS7YDdAcF7U4pxIlp6JJD53EW8Zqfir+/pxfdOUhEg=; b=T6vXwcdXMTEz+6A0CkalgdgiLYRODIRRcfGeFykt2TH7zrcuheLMptKmPP2raxYDG2 YJ5hNvbP901twXnEiOIuC75podnwYl3k/Rh0KABvzJikqS399gv8QTStAkFYXx2mF7v6 J/guI0Gep8chencRVGNW/covlK+gbsStqwhBtudOQWgiTtRJCO0r/HJsLMFBjv3hDQ/K ItdkcSwH4BooWwTIxUSEs9mQXvU/SwzqxvUDDe9DqNPvBt0JAiS+np/BR+433u5E+u2h d2RHlOIFnkc7X/01SoHsLV6gRCS83JASbcRwXHl17m/6e9yiswsPOKM4qaRODGCI8E5I c7Nw== X-Gm-Message-State: AOAM532qYYB34pfAoTRYs7qbPcTI69Bm/32e3dLArmTv1y6A6AkbC8f4 NpoPshhhAN/oJ46i8W1o0vxyQWlZy2B6sfwx X-Google-Smtp-Source: ABdhPJzMcKWIMO6Pu85Cm8mtYooEdV1WxqFnOCHynuyyD9gT8mLaBMacAoW88L40T2CkCD1c6UI3Yw== X-Received: by 2002:a65:6715:: with SMTP id u21mr1986515pgf.312.1612378837054; Wed, 03 Feb 2021 11:00:37 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 11/31] exec: Introduce cpu_untagged_addr Date: Wed, 3 Feb 2021 08:59:50 -1000 Message-Id: <20210203190010.759771-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Provide an identity fallback for target that do not use tagged addresses. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- include/exec/cpu_ldst.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index e62f4fba00..d9dc1de414 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -69,6 +69,13 @@ typedef uint64_t abi_ptr; #define TARGET_ABI_FMT_ptr "%"PRIx64 #endif =20 +#ifndef TARGET_TAGGED_ADDRESSES +static inline abi_ptr cpu_untagged_addr(CPUState *cs, abi_ptr x) +{ + return x; +} +#endif + /* All direct uses of g2h and h2g need to go away for usermode softmmu. */ #define g2h(x) ((void *)((uintptr_t)(abi_ptr)(x) + guest_base)) =20 --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380892; cv=none; d=zohomail.com; s=zohoarc; b=NWeecs7YPJOnbf53Sb4JtXobRQLYwZwrw7QMQIuR6OEU8lvyBJTBkkip0gMR2kmX6OWkg9ICzJFkVkGiNfbXJYWPu36ldMy+alOI48oCHQ6kxpkLM938RH74SbJjlTv6kyASsXxYhU6qq6vtBmPvFwYIvJjJZRd6NtIkXGejwno= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380892; h=Content-Transfer-Encoding:Cc: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=43yleJyBfWbxiuIpD1DaW7BP+EtKqYDu+1VgKCNhhTg=; b=Z9ZUrUfuPu4OIoR9jOEe/33oqCwmsMwMUZ3Mii8gigQH8WQWNh9odfhaAXPayrHz9jtYY8WCLG3dDdbRPGsEUM+bPsm2iVnE6+ObHs20mmVc06dfGv9sg4eacEFGyV97uaF+b4PPmc1rZ23YC7YSav8zqok33S9h6VS3N6B2RaU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161238089218732.467995704925556; Wed, 3 Feb 2021 11:34:52 -0800 (PST) Received: from localhost ([::1]:35814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NvO-0001iw-4j for importer@patchew.org; Wed, 03 Feb 2021 14:34:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37886) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOW-0007Nf-LI for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:52 -0500 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:33406) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOL-0001af-1G for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:51 -0500 Received: by mail-pj1-x1034.google.com with SMTP id lw17so3803042pjb.0 for ; Wed, 03 Feb 2021 11:00:40 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=43yleJyBfWbxiuIpD1DaW7BP+EtKqYDu+1VgKCNhhTg=; b=OMp6WZ6G9mzum6Z0aE0ebVMbVz9FHyWA3K1xuQn+A8nSh2drJJdKoU/QR4DLUl42B4 RuVEL0olwNSkhn+zevEhXttVeJXIF9hM6Js0B/W1zI1fW6Mq3HMPH9csgGeltwPyUX0K QIiuoi2g0Q9M/nBRPGbiROWaI64Sg9uXbr2jMWjwmB/OewQsNCIEE7YJUqkqLWsxS8Fr mqUfcgZ7Lr40jpYt16oKuRWVRMLVOzpouFaiH6ufv80oCxdwXVZrXWmykAlx2hyxS5iH kqLSbf74pIzb6Nqn/M3GUpjhjcVQt87O9iepceY9H+rEvhTWBKjqtfIKmEgS4eEgmK2H aB3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=43yleJyBfWbxiuIpD1DaW7BP+EtKqYDu+1VgKCNhhTg=; b=sG8+H8h7vWLBbUgnd/bP3/V8kdzJZnptx4gCd8wEQs+zuThBIUWiX6iiVaW7leN/CE IrCuJ1H+EaBBpNo6QB6DYydSOc/q91oDcnfp4YEBxMTJpiz6sIWJzM5lfA1i/brC55x1 /JBqiccwjXrI15vSpa7pNxn/d2MNn2UQJXQhCqqcXI/wrG5MHlnVFCPARASFsr7+mfBQ h8EN2WvxvnOaiQYGbIH38KFVbaItVsSEgPgrjJb14mS5CvxqA/W48FTO5+zGr1966oqw vvlPllnyrdRquS8oNEz+Vl6oLSdP4lzAPVpXcBTWkryZRcFhMer4zURJYFnLEz1i2A+4 EiKw== X-Gm-Message-State: AOAM532opvJzp71xgjV4rQvfCRbNT+fVjc9KmO8pT203AZt5fXp+H9IR KALtJ+5vIEXSy+2jS9YPSXXR/S6kb+02IGQj X-Google-Smtp-Source: ABdhPJxDjqzdpRDbGXeoUehAcGKKEvsCKL1AZYswopKKJNtXRD1X6wA+ijxU9TmtwTh29frQu0a0eg== X-Received: by 2002:a17:902:d64d:b029:de:8aaa:d6ba with SMTP id y13-20020a170902d64db02900de8aaad6bamr4503580plh.0.1612378839073; Wed, 03 Feb 2021 11:00:39 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 12/31] exec: Use cpu_untagged_addr in g2h; split out g2h_untagged Date: Wed, 3 Feb 2021 08:59:51 -1000 Message-Id: <20210203190010.759771-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use g2h_untagged in contexts that have no cpu, e.g. the binary loaders that operate before the primary cpu is created. As a collolary, target_mmap and friends must use untagged addresses, since they are used by the loaders. Use g2h_untagged on values returned from target_mmap, as the kernel never applies a tag itself. Use g2h_untagged on all pc values. The only current user of tags, aarch64, removes tags from code addresses upon branch, so "pc" is always untagged. Use g2h with the cpu context on hand whereever possible. Use g2h_untagged in lock_user, which will be updated soon. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- include/exec/cpu_ldst.h | 12 +++++- include/exec/exec-all.h | 2 +- linux-user/qemu.h | 6 +-- accel/tcg/translate-all.c | 4 +- accel/tcg/user-exec.c | 48 ++++++++++++------------ linux-user/elfload.c | 12 +++--- linux-user/flatload.c | 2 +- linux-user/hppa/cpu_loop.c | 31 ++++++++-------- linux-user/i386/cpu_loop.c | 4 +- linux-user/mmap.c | 45 +++++++++++----------- linux-user/ppc/signal.c | 4 +- linux-user/syscall.c | 72 +++++++++++++++++++----------------- target/arm/helper-a64.c | 4 +- target/hppa/op_helper.c | 2 +- target/i386/tcg/mem_helper.c | 2 +- target/s390x/mem_helper.c | 4 +- 16 files changed, 135 insertions(+), 119 deletions(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index d9dc1de414..c54069e3cd 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -77,7 +77,15 @@ static inline abi_ptr cpu_untagged_addr(CPUState *cs, ab= i_ptr x) #endif =20 /* All direct uses of g2h and h2g need to go away for usermode softmmu. */ -#define g2h(x) ((void *)((uintptr_t)(abi_ptr)(x) + guest_base)) +static inline void *g2h_untagged(abi_ptr x) +{ + return (void *)((uintptr_t)(x) + guest_base); +} + +static inline void *g2h(CPUState *cs, abi_ptr x) +{ + return g2h_untagged(cpu_untagged_addr(cs, x)); +} =20 static inline bool guest_addr_valid(abi_ulong x) { @@ -448,7 +456,7 @@ static inline int cpu_ldsw_code(CPUArchState *env, abi_= ptr addr) static inline void *tlb_vaddr_to_host(CPUArchState *env, abi_ptr addr, MMUAccessType access_type, int mmu_i= dx) { - return g2h(addr); + return g2h(env_cpu(env), addr); } #else void *tlb_vaddr_to_host(CPUArchState *env, abi_ptr addr, diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 125000bcf7..cf6741ce3b 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -616,7 +616,7 @@ static inline tb_page_addr_t get_page_addr_code_hostp(C= PUArchState *env, void **hostp) { if (hostp) { - *hostp =3D g2h(addr); + *hostp =3D g2h_untagged(addr); } return addr; } diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 9251337daf..9fbc5edc4b 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -652,7 +652,7 @@ static inline void *lock_user(int type, abi_ulong guest= _addr, long len, int copy return addr; } #else - return g2h(guest_addr); + return g2h_untagged(guest_addr); #endif } =20 @@ -666,10 +666,10 @@ static inline void unlock_user(void *host_ptr, abi_ul= ong guest_addr, #ifdef DEBUG_REMAP if (!host_ptr) return; - if (host_ptr =3D=3D g2h(guest_addr)) + if (host_ptr =3D=3D g2h_untagged(guest_addr)) return; if (len > 0) - memcpy(g2h(guest_addr), host_ptr, len); + memcpy(g2h_untagged(guest_addr), host_ptr, len); g_free(host_ptr); #endif } diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index bba9c8e0b3..2c34adccce 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -1762,7 +1762,7 @@ static inline void tb_page_add(PageDesc *p, Translati= onBlock *tb, prot |=3D p2->flags; p2->flags &=3D ~PAGE_WRITE; } - mprotect(g2h(page_addr), qemu_host_page_size, + mprotect(g2h_untagged(page_addr), qemu_host_page_size, (prot & PAGE_BITS) & ~PAGE_WRITE); if (DEBUG_TB_INVALIDATE_GATE) { printf("protecting code page: 0x" TB_PAGE_ADDR_FMT "\n", page_= addr); @@ -2912,7 +2912,7 @@ int page_unprotect(target_ulong address, uintptr_t pc) } #endif } - mprotect((void *)g2h(host_start), qemu_host_page_size, + mprotect((void *)g2h_untagged(host_start), qemu_host_page_size, prot & PAGE_BITS); } mmap_unlock(); diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 1215b55ca0..a2a353920c 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -232,7 +232,7 @@ int probe_access_flags(CPUArchState *env, target_ulong = addr, int flags; =20 flags =3D probe_access_internal(env, addr, 0, access_type, nonfault, r= a); - *phost =3D flags ? NULL : g2h(addr); + *phost =3D flags ? NULL : g2h(env_cpu(env), addr); return flags; } =20 @@ -245,7 +245,7 @@ void *probe_access(CPUArchState *env, target_ulong addr= , int size, flags =3D probe_access_internal(env, addr, size, access_type, false, r= a); g_assert(flags =3D=3D 0); =20 - return size ? g2h(addr) : NULL; + return size ? g2h(env_cpu(env), addr) : NULL; } =20 #if defined(__i386__) @@ -840,7 +840,7 @@ uint32_t cpu_ldub_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_UB, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldub_p(g2h(ptr)); + ret =3D ldub_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -851,7 +851,7 @@ int cpu_ldsb_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_SB, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldsb_p(g2h(ptr)); + ret =3D ldsb_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -862,7 +862,7 @@ uint32_t cpu_lduw_be_data(CPUArchState *env, abi_ptr pt= r) uint16_t meminfo =3D trace_mem_get_info(MO_BEUW, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D lduw_be_p(g2h(ptr)); + ret =3D lduw_be_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -873,7 +873,7 @@ int cpu_ldsw_be_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_BESW, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldsw_be_p(g2h(ptr)); + ret =3D ldsw_be_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -884,7 +884,7 @@ uint32_t cpu_ldl_be_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_BEUL, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldl_be_p(g2h(ptr)); + ret =3D ldl_be_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -895,7 +895,7 @@ uint64_t cpu_ldq_be_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_BEQ, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldq_be_p(g2h(ptr)); + ret =3D ldq_be_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -906,7 +906,7 @@ uint32_t cpu_lduw_le_data(CPUArchState *env, abi_ptr pt= r) uint16_t meminfo =3D trace_mem_get_info(MO_LEUW, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D lduw_le_p(g2h(ptr)); + ret =3D lduw_le_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -917,7 +917,7 @@ int cpu_ldsw_le_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_LESW, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldsw_le_p(g2h(ptr)); + ret =3D ldsw_le_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -928,7 +928,7 @@ uint32_t cpu_ldl_le_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_LEUL, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldl_le_p(g2h(ptr)); + ret =3D ldl_le_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -939,7 +939,7 @@ uint64_t cpu_ldq_le_data(CPUArchState *env, abi_ptr ptr) uint16_t meminfo =3D trace_mem_get_info(MO_LEQ, MMU_USER_IDX, false); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - ret =3D ldq_le_p(g2h(ptr)); + ret =3D ldq_le_p(g2h(env_cpu(env), ptr)); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); return ret; } @@ -1049,7 +1049,7 @@ void cpu_stb_data(CPUArchState *env, abi_ptr ptr, uin= t32_t val) uint16_t meminfo =3D trace_mem_get_info(MO_UB, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stb_p(g2h(ptr), val); + stb_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1058,7 +1058,7 @@ void cpu_stw_be_data(CPUArchState *env, abi_ptr ptr, = uint32_t val) uint16_t meminfo =3D trace_mem_get_info(MO_BEUW, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stw_be_p(g2h(ptr), val); + stw_be_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1067,7 +1067,7 @@ void cpu_stl_be_data(CPUArchState *env, abi_ptr ptr, = uint32_t val) uint16_t meminfo =3D trace_mem_get_info(MO_BEUL, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stl_be_p(g2h(ptr), val); + stl_be_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1076,7 +1076,7 @@ void cpu_stq_be_data(CPUArchState *env, abi_ptr ptr, = uint64_t val) uint16_t meminfo =3D trace_mem_get_info(MO_BEQ, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stq_be_p(g2h(ptr), val); + stq_be_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1085,7 +1085,7 @@ void cpu_stw_le_data(CPUArchState *env, abi_ptr ptr, = uint32_t val) uint16_t meminfo =3D trace_mem_get_info(MO_LEUW, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stw_le_p(g2h(ptr), val); + stw_le_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1094,7 +1094,7 @@ void cpu_stl_le_data(CPUArchState *env, abi_ptr ptr, = uint32_t val) uint16_t meminfo =3D trace_mem_get_info(MO_LEUL, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stl_le_p(g2h(ptr), val); + stl_le_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1103,7 +1103,7 @@ void cpu_stq_le_data(CPUArchState *env, abi_ptr ptr, = uint64_t val) uint16_t meminfo =3D trace_mem_get_info(MO_LEQ, MMU_USER_IDX, true); =20 trace_guest_mem_before_exec(env_cpu(env), ptr, meminfo); - stq_le_p(g2h(ptr), val); + stq_le_p(g2h(env_cpu(env), ptr), val); qemu_plugin_vcpu_mem_cb(env_cpu(env), ptr, meminfo); } =20 @@ -1168,7 +1168,7 @@ uint32_t cpu_ldub_code(CPUArchState *env, abi_ptr ptr) uint32_t ret; =20 set_helper_retaddr(1); - ret =3D ldub_p(g2h(ptr)); + ret =3D ldub_p(g2h_untagged(ptr)); clear_helper_retaddr(); return ret; } @@ -1178,7 +1178,7 @@ uint32_t cpu_lduw_code(CPUArchState *env, abi_ptr ptr) uint32_t ret; =20 set_helper_retaddr(1); - ret =3D lduw_p(g2h(ptr)); + ret =3D lduw_p(g2h_untagged(ptr)); clear_helper_retaddr(); return ret; } @@ -1188,7 +1188,7 @@ uint32_t cpu_ldl_code(CPUArchState *env, abi_ptr ptr) uint32_t ret; =20 set_helper_retaddr(1); - ret =3D ldl_p(g2h(ptr)); + ret =3D ldl_p(g2h_untagged(ptr)); clear_helper_retaddr(); return ret; } @@ -1198,7 +1198,7 @@ uint64_t cpu_ldq_code(CPUArchState *env, abi_ptr ptr) uint64_t ret; =20 set_helper_retaddr(1); - ret =3D ldq_p(g2h(ptr)); + ret =3D ldq_p(g2h_untagged(ptr)); clear_helper_retaddr(); return ret; } @@ -1211,7 +1211,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, tar= get_ulong addr, if (unlikely(addr & (size - 1))) { cpu_loop_exit_atomic(env_cpu(env), retaddr); } - void *ret =3D g2h(addr); + void *ret =3D g2h(env_cpu(env), addr); set_helper_retaddr(retaddr); return ret; } diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 29f07bb234..f542841ba2 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -389,7 +389,7 @@ enum { =20 static bool init_guest_commpage(void) { - void *want =3D g2h(ARM_COMMPAGE & -qemu_host_page_size); + void *want =3D g2h_untagged(ARM_COMMPAGE & -qemu_host_page_size); void *addr =3D mmap(want, qemu_host_page_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); =20 @@ -402,7 +402,7 @@ static bool init_guest_commpage(void) } =20 /* Set kernel helper versions; rest of page is 0. */ - __put_user(5, (uint32_t *)g2h(0xffff0ffcu)); + __put_user(5, (uint32_t *)g2h_untagged(0xffff0ffcu)); =20 if (mprotect(addr, qemu_host_page_size, PROT_READ)) { perror("Protecting guest commpage"); @@ -1872,8 +1872,8 @@ static void zero_bss(abi_ulong elf_bss, abi_ulong las= t_bss, int prot) here is still actually needed. For now, continue with it, but merge it with the "normal" mmap that would allocate the bss. */ =20 - host_start =3D (uintptr_t) g2h(elf_bss); - host_end =3D (uintptr_t) g2h(last_bss); + host_start =3D (uintptr_t) g2h_untagged(elf_bss); + host_end =3D (uintptr_t) g2h_untagged(last_bss); host_map_start =3D REAL_HOST_PAGE_ALIGN(host_start); =20 if (host_map_start < host_end) { @@ -2171,7 +2171,7 @@ static void pgb_have_guest_base(const char *image_nam= e, abi_ulong guest_loaddr, } =20 /* Reserve the address space for the binary, or reserved_va. */ - test =3D g2h(guest_loaddr); + test =3D g2h_untagged(guest_loaddr); addr =3D mmap(test, guest_hiaddr - guest_loaddr, PROT_NONE, flags, -1,= 0); if (test !=3D addr) { pgb_fail_in_use(image_name); @@ -2393,7 +2393,7 @@ static void pgb_reserved_va(const char *image_name, a= bi_ulong guest_loaddr, =20 /* Reserve the memory on the host. */ assert(guest_base !=3D 0); - test =3D g2h(0); + test =3D g2h_untagged(0); addr =3D mmap(test, reserved_va, 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 " diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 14d2999d15..3e5594cf89 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -668,7 +668,7 @@ static int load_flat_file(struct linux_binprm * bprm, } =20 /* zero the BSS. */ - memset(g2h(datapos + data_len), 0, bss_len); + memset(g2h_untagged(datapos + data_len), 0, bss_len); =20 return 0; } diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c index d7e1ec7722..944511bbe4 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -23,6 +23,7 @@ =20 static abi_ulong hppa_lws(CPUHPPAState *env) { + CPUState *cs =3D env_cpu(env); uint32_t which =3D env->gr[20]; abi_ulong addr =3D env->gr[26]; abi_ulong old =3D env->gr[25]; @@ -39,7 +40,7 @@ static abi_ulong hppa_lws(CPUHPPAState *env) } old =3D tswap32(old); new =3D tswap32(new); - ret =3D qatomic_cmpxchg((uint32_t *)g2h(addr), old, new); + ret =3D qatomic_cmpxchg((uint32_t *)g2h(cs, addr), old, new); ret =3D tswap32(ret); break; =20 @@ -58,38 +59,38 @@ static abi_ulong hppa_lws(CPUHPPAState *env) can be host-endian as well. */ switch (size) { case 0: - old =3D *(uint8_t *)g2h(old); - new =3D *(uint8_t *)g2h(new); - ret =3D qatomic_cmpxchg((uint8_t *)g2h(addr), old, new); + old =3D *(uint8_t *)g2h(cs, old); + new =3D *(uint8_t *)g2h(cs, new); + ret =3D qatomic_cmpxchg((uint8_t *)g2h(cs, addr), old, new); ret =3D ret !=3D old; break; case 1: - old =3D *(uint16_t *)g2h(old); - new =3D *(uint16_t *)g2h(new); - ret =3D qatomic_cmpxchg((uint16_t *)g2h(addr), old, new); + old =3D *(uint16_t *)g2h(cs, old); + new =3D *(uint16_t *)g2h(cs, new); + ret =3D qatomic_cmpxchg((uint16_t *)g2h(cs, addr), old, new); ret =3D ret !=3D old; break; case 2: - old =3D *(uint32_t *)g2h(old); - new =3D *(uint32_t *)g2h(new); - ret =3D qatomic_cmpxchg((uint32_t *)g2h(addr), old, new); + old =3D *(uint32_t *)g2h(cs, old); + new =3D *(uint32_t *)g2h(cs, new); + ret =3D qatomic_cmpxchg((uint32_t *)g2h(cs, addr), old, new); ret =3D ret !=3D old; break; case 3: { uint64_t o64, n64, r64; - o64 =3D *(uint64_t *)g2h(old); - n64 =3D *(uint64_t *)g2h(new); + o64 =3D *(uint64_t *)g2h(cs, old); + n64 =3D *(uint64_t *)g2h(cs, new); #ifdef CONFIG_ATOMIC64 - r64 =3D qatomic_cmpxchg__nocheck((uint64_t *)g2h(addr), + r64 =3D qatomic_cmpxchg__nocheck((uint64_t *)g2h(cs, addr), o64, n64); ret =3D r64 !=3D o64; #else start_exclusive(); - r64 =3D *(uint64_t *)g2h(addr); + r64 =3D *(uint64_t *)g2h(cs, addr); ret =3D 1; if (r64 =3D=3D o64) { - *(uint64_t *)g2h(addr) =3D n64; + *(uint64_t *)g2h(cs, addr) =3D n64; ret =3D 0; } end_exclusive(); diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index 70cde417e6..19c8a18cd3 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -379,7 +379,7 @@ void target_cpu_copy_regs(CPUArchState *env, struct tar= get_pt_regs *regs) env->idt.base =3D target_mmap(0, sizeof(uint64_t) * (env->idt.limit + = 1), PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); - idt_table =3D g2h(env->idt.base); + idt_table =3D g2h_untagged(env->idt.base); set_idt(0, 0); set_idt(1, 0); set_idt(2, 0); @@ -409,7 +409,7 @@ void target_cpu_copy_regs(CPUArchState *env, struct tar= get_pt_regs *regs) PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); env->gdt.limit =3D sizeof(uint64_t) * TARGET_GDT_ENTRIES - 1; - gdt_table =3D g2h(env->gdt.base); + gdt_table =3D g2h_untagged(env->gdt.base); #ifdef TARGET_ABI32 write_dt(&gdt_table[__USER_CS >> 3], 0, 0xfffff, DESC_G_MASK | DESC_B_MASK | DESC_P_MASK | DESC_S_MASK | diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 7fb4c628e1..088c50592c 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -141,7 +141,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= target_prot) } end =3D host_end; } - ret =3D mprotect(g2h(host_start), qemu_host_page_size, + ret =3D mprotect(g2h_untagged(host_start), qemu_host_page_size, prot1 & PAGE_BITS); if (ret !=3D 0) { goto error; @@ -153,7 +153,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= target_prot) for (addr =3D end; addr < host_end; addr +=3D TARGET_PAGE_SIZE) { prot1 |=3D page_get_flags(addr); } - ret =3D mprotect(g2h(host_end - qemu_host_page_size), + ret =3D mprotect(g2h_untagged(host_end - qemu_host_page_size), qemu_host_page_size, prot1 & PAGE_BITS); if (ret !=3D 0) { goto error; @@ -163,7 +163,8 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= target_prot) =20 /* handle the pages in the middle */ if (host_start < host_end) { - ret =3D mprotect(g2h(host_start), host_end - host_start, host_prot= ); + ret =3D mprotect(g2h_untagged(host_start), + host_end - host_start, host_prot); if (ret !=3D 0) { goto error; } @@ -186,7 +187,7 @@ static int mmap_frag(abi_ulong real_start, int prot1, prot_new; =20 real_end =3D real_start + qemu_host_page_size; - host_start =3D g2h(real_start); + host_start =3D g2h_untagged(real_start); =20 /* get the protection of the target pages outside the mapping */ prot1 =3D 0; @@ -218,7 +219,7 @@ static int mmap_frag(abi_ulong real_start, mprotect(host_start, qemu_host_page_size, prot1 | PROT_WRITE); =20 /* read the corresponding file data */ - if (pread(fd, g2h(start), end - start, offset) =3D=3D -1) + if (pread(fd, g2h_untagged(start), end - start, offset) =3D=3D -1) return -1; =20 /* put final protection */ @@ -229,7 +230,7 @@ static int mmap_frag(abi_ulong real_start, mprotect(host_start, qemu_host_page_size, prot_new); } if (prot_new & PROT_WRITE) { - memset(g2h(start), 0, end - start); + memset(g2h_untagged(start), 0, end - start); } } return 0; @@ -338,7 +339,7 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size= , abi_ulong align) * - mremap() with MREMAP_FIXED flag * - shmat() with SHM_REMAP flag */ - ptr =3D mmap(g2h(addr), size, PROT_NONE, + ptr =3D mmap(g2h_untagged(addr), size, PROT_NONE, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); =20 /* ENOMEM, if host address space has no memory */ @@ -497,7 +498,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t target_prot, /* Note: we prefer to control the mapping address. It is especially important if qemu_host_page_size > qemu_real_host_page_size */ - p =3D mmap(g2h(start), host_len, host_prot, + p =3D mmap(g2h_untagged(start), host_len, host_prot, flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0); if (p =3D=3D MAP_FAILED) { goto fail; @@ -505,10 +506,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, = int target_prot, /* update start so that it points to the file position at 'offset'= */ host_start =3D (unsigned long)p; if (!(flags & MAP_ANONYMOUS)) { - p =3D mmap(g2h(start), len, host_prot, + p =3D mmap(g2h_untagged(start), len, host_prot, flags | MAP_FIXED, fd, host_offset); if (p =3D=3D MAP_FAILED) { - munmap(g2h(start), host_len); + munmap(g2h_untagged(start), host_len); goto fail; } host_start +=3D offset - host_offset; @@ -548,7 +549,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t target_prot, -1, 0); if (retaddr =3D=3D -1) goto fail; - if (pread(fd, g2h(start), len, offset) =3D=3D -1) + if (pread(fd, g2h_untagged(start), len, offset) =3D=3D -1) goto fail; if (!(host_prot & PROT_WRITE)) { ret =3D target_mprotect(start, len, target_prot); @@ -592,7 +593,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t target_prot, offset1 =3D 0; else offset1 =3D offset + real_start - start; - p =3D mmap(g2h(real_start), real_end - real_start, + p =3D mmap(g2h_untagged(real_start), real_end - real_start, host_prot, flags, fd, offset1); if (p =3D=3D MAP_FAILED) goto fail; @@ -652,7 +653,7 @@ static void mmap_reserve(abi_ulong start, abi_ulong siz= e) real_end -=3D qemu_host_page_size; } if (real_start !=3D real_end) { - mmap(g2h(real_start), real_end - real_start, PROT_NONE, + mmap(g2h_untagged(real_start), real_end - real_start, PROT_NONE, MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0); } @@ -707,7 +708,7 @@ int target_munmap(abi_ulong start, abi_ulong len) if (reserved_va) { mmap_reserve(real_start, real_end - real_start); } else { - ret =3D munmap(g2h(real_start), real_end - real_start); + ret =3D munmap(g2h_untagged(real_start), real_end - real_start= ); } } =20 @@ -736,8 +737,8 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, mmap_lock(); =20 if (flags & MREMAP_FIXED) { - host_addr =3D mremap(g2h(old_addr), old_size, new_size, - flags, g2h(new_addr)); + 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 new and old addresses overlap then the above mremap will @@ -753,8 +754,9 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, errno =3D ENOMEM; host_addr =3D MAP_FAILED; } else { - host_addr =3D mremap(g2h(old_addr), old_size, new_size, - flags | MREMAP_FIXED, g2h(mmap_start)); + host_addr =3D mremap(g2h_untagged(old_addr), old_size, new_siz= e, + flags | MREMAP_FIXED, + g2h_untagged(mmap_start)); if (reserved_va) { mmap_reserve(old_addr, old_size); } @@ -770,14 +772,15 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong = old_size, } } if (prot =3D=3D 0) { - host_addr =3D mremap(g2h(old_addr), old_size, new_size, flags); + host_addr =3D mremap(g2h_untagged(old_addr), + old_size, new_size, flags); =20 if (host_addr !=3D MAP_FAILED) { /* Check if address fits target address space */ if (!guest_range_valid(h2g(host_addr), new_size)) { /* Revert mremap() changes */ - host_addr =3D mremap(g2h(old_addr), new_size, old_size, - flags); + host_addr =3D mremap(g2h_untagged(old_addr), + new_size, old_size, flags); errno =3D ENOMEM; host_addr =3D MAP_FAILED; } else if (reserved_va && old_size > new_size) { diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c index 20a02c197c..b78613f7c8 100644 --- a/linux-user/ppc/signal.c +++ b/linux-user/ppc/signal.c @@ -365,7 +365,7 @@ static void restore_user_regs(CPUPPCState *env, uint64_t v_addr; /* 64-bit needs to recover the pointer to the vectors from the fra= me */ __get_user(v_addr, &frame->v_regs); - v_regs =3D g2h(v_addr); + v_regs =3D g2h(env_cpu(env), v_addr); #else v_regs =3D (ppc_avr_t *)frame->mc_vregs.altivec; #endif @@ -552,7 +552,7 @@ void setup_rt_frame(int sig, struct target_sigaction *k= a, if (get_ppc64_abi(image) < 2) { /* ELFv1 PPC64 function pointers are pointers to OPD entries. */ struct target_func_ptr *handler =3D - (struct target_func_ptr *)g2h(ka->_sa_handler); + (struct target_func_ptr *)g2h(env_cpu(env), ka->_sa_handler); env->nip =3D tswapl(handler->entry); env->gpr[2] =3D tswapl(handler->toc); } else { diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 6001022e96..748893904e 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -907,7 +907,7 @@ abi_long do_brk(abi_ulong new_brk) /* Heap contents are initialized to zero, as for anonymous * mapped pages. */ if (new_brk > target_brk) { - memset(g2h(target_brk), 0, new_brk - target_brk); + memset(g2h_untagged(target_brk), 0, new_brk - target_brk); } target_brk =3D new_brk; DEBUGF_BRK(TARGET_ABI_FMT_lx " (new_brk <=3D brk_page)\n", target_= brk); @@ -933,7 +933,7 @@ abi_long do_brk(abi_ulong new_brk) * come from the remaining part of the previous page: it may * contains garbage data due to a previous heap usage (grown * then shrunken). */ - memset(g2h(target_brk), 0, brk_page - target_brk); + memset(g2h_untagged(target_brk), 0, brk_page - target_brk); =20 target_brk =3D new_brk; brk_page =3D HOST_PAGE_ALIGN(target_brk); @@ -4611,7 +4611,7 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_en= v, mmap_lock(); =20 if (shmaddr) - host_raddr =3D shmat(shmid, (void *)g2h(shmaddr), shmflg); + host_raddr =3D shmat(shmid, (void *)g2h_untagged(shmaddr), shmflg); else { abi_ulong mmap_start; =20 @@ -4622,7 +4622,8 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_en= v, errno =3D ENOMEM; host_raddr =3D (void *)-1; } else - host_raddr =3D shmat(shmid, g2h(mmap_start), shmflg | SHM_REMA= P); + host_raddr =3D shmat(shmid, g2h_untagged(mmap_start), + shmflg | SHM_REMAP); } =20 if (host_raddr =3D=3D (void *)-1) { @@ -4663,7 +4664,7 @@ static inline abi_long do_shmdt(abi_ulong shmaddr) break; } } - rv =3D get_errno(shmdt(g2h(shmaddr))); + rv =3D get_errno(shmdt(g2h_untagged(shmaddr))); =20 mmap_unlock(); =20 @@ -6133,10 +6134,10 @@ static abi_long write_ldt(CPUX86State *env, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); if (env->ldt.base =3D=3D -1) return -TARGET_ENOMEM; - memset(g2h(env->ldt.base), 0, + memset(g2h_untagged(env->ldt.base), 0, TARGET_LDT_ENTRIES * TARGET_LDT_ENTRY_SIZE); env->ldt.limit =3D 0xffff; - ldt_table =3D g2h(env->ldt.base); + ldt_table =3D g2h_untagged(env->ldt.base); } =20 /* NOTE: same code as Linux kernel */ @@ -6204,7 +6205,7 @@ static abi_long do_modify_ldt(CPUX86State *env, int f= unc, abi_ulong ptr, #if defined(TARGET_ABI32) abi_long do_set_thread_area(CPUX86State *env, abi_ulong ptr) { - uint64_t *gdt_table =3D g2h(env->gdt.base); + uint64_t *gdt_table =3D g2h_untagged(env->gdt.base); struct target_modify_ldt_ldt_s ldt_info; struct target_modify_ldt_ldt_s *target_ldt_info; int seg_32bit, contents, read_exec_only, limit_in_pages; @@ -6290,7 +6291,7 @@ install: static abi_long do_get_thread_area(CPUX86State *env, abi_ulong ptr) { struct target_modify_ldt_ldt_s *target_ldt_info; - uint64_t *gdt_table =3D g2h(env->gdt.base); + uint64_t *gdt_table =3D g2h_untagged(env->gdt.base); uint32_t base_addr, limit, flags; int seg_32bit, contents, read_exec_only, limit_in_pages, idx; int seg_not_present, useable, lm; @@ -7585,8 +7586,8 @@ static int do_safe_futex(int *uaddr, int op, int val, tricky. However they're probably useless because guest atomic operations won't work either. */ #if defined(TARGET_NR_futex) -static int do_futex(target_ulong uaddr, int op, int val, target_ulong time= out, - target_ulong uaddr2, int val3) +static int do_futex(CPUState *cpu, target_ulong uaddr, int op, int val, + target_ulong timeout, target_ulong uaddr2, int val3) { struct timespec ts, *pts; int base_op; @@ -7607,11 +7608,14 @@ static int do_futex(target_ulong uaddr, int op, int= val, target_ulong timeout, } else { pts =3D NULL; } - return do_safe_futex(g2h(uaddr), op, tswap32(val), pts, NULL, val3= ); + return do_safe_futex(g2h(cpu, uaddr), + op, tswap32(val), pts, NULL, val3); case FUTEX_WAKE: - return do_safe_futex(g2h(uaddr), op, val, NULL, NULL, 0); + return do_safe_futex(g2h(cpu, uaddr), + op, val, NULL, NULL, 0); case FUTEX_FD: - return do_safe_futex(g2h(uaddr), op, val, NULL, NULL, 0); + return do_safe_futex(g2h(cpu, uaddr), + op, val, NULL, NULL, 0); case FUTEX_REQUEUE: case FUTEX_CMP_REQUEUE: case FUTEX_WAKE_OP: @@ -7621,10 +7625,9 @@ static int do_futex(target_ulong uaddr, int op, int = val, target_ulong timeout, to satisfy the compiler. We do not need to tswap TIMEOUT since it's not compared to guest memory. */ pts =3D (struct timespec *)(uintptr_t) timeout; - return do_safe_futex(g2h(uaddr), op, val, pts, g2h(uaddr2), + return do_safe_futex(g2h(cpu, uaddr), op, val, pts, g2h(cpu, uaddr= 2), (base_op =3D=3D FUTEX_CMP_REQUEUE - ? tswap32(val3) - : val3)); + ? tswap32(val3) : val3)); default: return -TARGET_ENOSYS; } @@ -7632,7 +7635,8 @@ static int do_futex(target_ulong uaddr, int op, int v= al, target_ulong timeout, #endif =20 #if defined(TARGET_NR_futex_time64) -static int do_futex_time64(target_ulong uaddr, int op, int val, target_ulo= ng timeout, +static int do_futex_time64(CPUState *cpu, target_ulong uaddr, int op, + int val, target_ulong timeout, target_ulong uaddr2, int val3) { struct timespec ts, *pts; @@ -7656,11 +7660,12 @@ static int do_futex_time64(target_ulong uaddr, int = op, int val, target_ulong tim } else { pts =3D NULL; } - return do_safe_futex(g2h(uaddr), op, tswap32(val), pts, NULL, val3= ); + return do_safe_futex(g2h(cpu, uaddr), op, + tswap32(val), pts, NULL, val3); case FUTEX_WAKE: - return do_safe_futex(g2h(uaddr), op, val, NULL, NULL, 0); + return do_safe_futex(g2h(cpu, uaddr), op, val, NULL, NULL, 0); case FUTEX_FD: - return do_safe_futex(g2h(uaddr), op, val, NULL, NULL, 0); + return do_safe_futex(g2h(cpu, uaddr), op, val, NULL, NULL, 0); case FUTEX_REQUEUE: case FUTEX_CMP_REQUEUE: case FUTEX_WAKE_OP: @@ -7670,10 +7675,9 @@ static int do_futex_time64(target_ulong uaddr, int o= p, int val, target_ulong tim to satisfy the compiler. We do not need to tswap TIMEOUT since it's not compared to guest memory. */ pts =3D (struct timespec *)(uintptr_t) timeout; - return do_safe_futex(g2h(uaddr), op, val, pts, g2h(uaddr2), + return do_safe_futex(g2h(cpu, uaddr), op, val, pts, g2h(cpu, uaddr= 2), (base_op =3D=3D FUTEX_CMP_REQUEUE - ? tswap32(val3) - : val3)); + ? tswap32(val3) : val3)); default: return -TARGET_ENOSYS; } @@ -7848,7 +7852,7 @@ static int open_self_maps(void *cpu_env, int fd) const char *path; =20 max =3D h2g_valid(max - 1) ? - max : (uintptr_t) g2h(GUEST_ADDR_MAX) + 1; + max : (uintptr_t) g2h_untagged(GUEST_ADDR_MAX) + 1; =20 if (page_check_range(h2g(min), max - min, flags) =3D=3D -1) { continue; @@ -8265,8 +8269,8 @@ static abi_long do_syscall1(void *cpu_env, int num, a= bi_long arg1, =20 if (ts->child_tidptr) { put_user_u32(0, ts->child_tidptr); - do_sys_futex(g2h(ts->child_tidptr), FUTEX_WAKE, INT_MAX, - NULL, NULL, 0); + do_sys_futex(g2h(cpu, ts->child_tidptr), + FUTEX_WAKE, INT_MAX, NULL, NULL, 0); } thread_cpu =3D NULL; g_free(ts); @@ -8631,7 +8635,7 @@ static abi_long do_syscall1(void *cpu_env, int num, a= bi_long arg1, if (!arg5) { ret =3D mount(p, p2, p3, (unsigned long)arg4, NULL); } else { - ret =3D mount(p, p2, p3, (unsigned long)arg4, g2h(arg5)); + ret =3D mount(p, p2, p3, (unsigned long)arg4, g2h(cpu, arg= 5)); } ret =3D get_errno(ret); =20 @@ -9726,15 +9730,15 @@ static abi_long do_syscall1(void *cpu_env, int num,= abi_long arg1, /* ??? msync/mlock/munlock are broken for softmmu. */ #ifdef TARGET_NR_msync case TARGET_NR_msync: - return get_errno(msync(g2h(arg1), arg2, arg3)); + return get_errno(msync(g2h(cpu, arg1), arg2, arg3)); #endif #ifdef TARGET_NR_mlock case TARGET_NR_mlock: - return get_errno(mlock(g2h(arg1), arg2)); + return get_errno(mlock(g2h(cpu, arg1), arg2)); #endif #ifdef TARGET_NR_munlock case TARGET_NR_munlock: - return get_errno(munlock(g2h(arg1), arg2)); + return get_errno(munlock(g2h(cpu, arg1), arg2)); #endif #ifdef TARGET_NR_mlockall case TARGET_NR_mlockall: @@ -12225,7 +12229,7 @@ static abi_long do_syscall1(void *cpu_env, int num,= abi_long arg1, =20 #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) case TARGET_NR_set_tid_address: - return get_errno(set_tid_address((int *)g2h(arg1))); + return get_errno(set_tid_address((int *)g2h(cpu, arg1))); #endif =20 case TARGET_NR_tkill: @@ -12312,11 +12316,11 @@ static abi_long do_syscall1(void *cpu_env, int nu= m, abi_long arg1, #endif #ifdef TARGET_NR_futex case TARGET_NR_futex: - return do_futex(arg1, arg2, arg3, arg4, arg5, arg6); + return do_futex(cpu, arg1, arg2, arg3, arg4, arg5, arg6); #endif #ifdef TARGET_NR_futex_time64 case TARGET_NR_futex_time64: - return do_futex_time64(arg1, arg2, arg3, arg4, arg5, arg6); + return do_futex_time64(cpu, arg1, arg2, arg3, arg4, arg5, arg6); #endif #if defined(TARGET_NR_inotify_init) && defined(__NR_inotify_init) case TARGET_NR_inotify_init: diff --git a/target/arm/helper-a64.c b/target/arm/helper-a64.c index c426c23d2c..66fc62710f 100644 --- a/target/arm/helper-a64.c +++ b/target/arm/helper-a64.c @@ -542,7 +542,7 @@ uint64_t HELPER(paired_cmpxchg64_le)(CPUARMState *env, = uint64_t addr, =20 #ifdef CONFIG_USER_ONLY /* ??? Enforce alignment. */ - uint64_t *haddr =3D g2h(addr); + uint64_t *haddr =3D g2h(env_cpu(env), addr); =20 set_helper_retaddr(ra); o0 =3D ldq_le_p(haddr + 0); @@ -612,7 +612,7 @@ uint64_t HELPER(paired_cmpxchg64_be)(CPUARMState *env, = uint64_t addr, =20 #ifdef CONFIG_USER_ONLY /* ??? Enforce alignment. */ - uint64_t *haddr =3D g2h(addr); + uint64_t *haddr =3D g2h(env_cpu(env), addr); =20 set_helper_retaddr(ra); o1 =3D ldq_be_p(haddr + 0); diff --git a/target/hppa/op_helper.c b/target/hppa/op_helper.c index 7ae31e1a15..96d9391c39 100644 --- a/target/hppa/op_helper.c +++ b/target/hppa/op_helper.c @@ -63,7 +63,7 @@ static void atomic_store_3(CPUHPPAState *env, target_ulon= g addr, uint32_t val, #ifdef CONFIG_USER_ONLY uint32_t old, new, cmp; =20 - uint32_t *haddr =3D g2h(addr - 1); + uint32_t *haddr =3D g2h(env_cpu(env), addr - 1); old =3D *haddr; while (1) { new =3D (old & ~mask) | (val & mask); diff --git a/target/i386/tcg/mem_helper.c b/target/i386/tcg/mem_helper.c index e5cd2de1bf..591f512bff 100644 --- a/target/i386/tcg/mem_helper.c +++ b/target/i386/tcg/mem_helper.c @@ -66,7 +66,7 @@ void helper_cmpxchg8b(CPUX86State *env, target_ulong a0) =20 #ifdef CONFIG_USER_ONLY { - uint64_t *haddr =3D g2h(a0); + uint64_t *haddr =3D g2h(env_cpu(env), a0); cmpv =3D cpu_to_le64(cmpv); newv =3D cpu_to_le64(newv); oldv =3D qatomic_cmpxchg__nocheck(haddr, cmpv, newv); diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c index 1901e9dfc7..25cfede806 100644 --- a/target/s390x/mem_helper.c +++ b/target/s390x/mem_helper.c @@ -1780,7 +1780,7 @@ static uint32_t do_csst(CPUS390XState *env, uint32_t = r3, uint64_t a1, =20 if (parallel) { #ifdef CONFIG_USER_ONLY - uint32_t *haddr =3D g2h(a1); + uint32_t *haddr =3D g2h(env_cpu(env), a1); ov =3D qatomic_cmpxchg__nocheck(haddr, cv, nv); #else TCGMemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mem_= idx); @@ -1804,7 +1804,7 @@ static uint32_t do_csst(CPUS390XState *env, uint32_t = r3, uint64_t a1, if (parallel) { #ifdef CONFIG_ATOMIC64 # ifdef CONFIG_USER_ONLY - uint64_t *haddr =3D g2h(a1); + uint64_t *haddr =3D g2h(env_cpu(env), a1); ov =3D qatomic_cmpxchg__nocheck(haddr, cv, nv); # else TCGMemOpIdx oi =3D make_memop_idx(MO_TEQ | MO_ALIGN, mem_i= dx); --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380570; cv=none; d=zohomail.com; s=zohoarc; b=DUv7iwgf64VpEDTkbbHXpB/pRoOPJkoCtQrebJ3IagvXMFDrOjNnA1ussrd58PUXxdbHVZ151kToxb3RFT/jH/O0fSUI/MP6wnWLbXPj5P/gFqW8p9W4QD5LMrCahCCIwfKI8rbQEiGKW2lsqcSeVutH0u5XBw020n1djHnJyAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380570; h=Content-Transfer-Encoding:Cc: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=/s8XFE9gqNZNWpQb6lsvETqFxexdpDzYtAtiO9bn45A=; b=HQWN90hkzrDbIe3mELXzCGBwwXibimprqFSJhFIk8/Jhv6e1KacKYxTuPulvhjIDRHOZcVnuQMlGsQjdiGfnMLTSI1W1TNuAClnetJcX4stSmVPDlb4ZaQZyKJshhSoILdRj1Ze3+KAVi0ZMhKTibYU05/TIH4xq3p/qi3mS+Z0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16123805701121016.8104058827001; Wed, 3 Feb 2021 11:29:30 -0800 (PST) Received: from localhost ([::1]:53916 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NqC-0005gf-KY for importer@patchew.org; Wed, 03 Feb 2021 14:29:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOR-0007Ll-Rt for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:48 -0500 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:34276) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOM-0001bn-Ca for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:47 -0500 Received: by mail-pg1-x52f.google.com with SMTP id o7so406323pgl.1 for ; Wed, 03 Feb 2021 11:00:41 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/s8XFE9gqNZNWpQb6lsvETqFxexdpDzYtAtiO9bn45A=; b=hxDAeK17mLOOu0eaQLp0OwHC7vJvS6hhi9LGBYVH+DvfPjfz7hEfzZIBjScC5T6PUP yYmo5c21ylBZaih3H+PkhrEZq3Uv0/u53EVLyBUtG02iGc4Cp5oQ1bYzQ9BPZCSabT3Q lQh5/mwS1FGZmmEMxbmrpvDCPCjjiHboFl4IIPkXfkCho1Z6x9kRGcpko6hQgnLMOOC6 cH2uYQH/u5giPa6Jz92RjM9CoTvWVPRx3ElQMwppH6qA7Gzs5cC6CWbqxHvKocF80L0t DP2UYYybhmptY2KxVq2YvPuZCpOtI4hypFXe5KeSnXYuFgEiHYqFDWW74uiUISPGHKac gDiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/s8XFE9gqNZNWpQb6lsvETqFxexdpDzYtAtiO9bn45A=; b=AY8HXBfLO1MEmTOEgegkyfIzy+s5cj/+Auz39ybU0a7ZjJFXENbe0S8ZL7flnt2LEo sB5D6AvUsMK/Qk5OZDxV9bhyKfiW+/d89OUYKGS3OZfLBPQJWx+Gf8z5BEzcQRkYSq/5 iJ6SeqKkM+KN1BrL/mUkAlxM5s5krF583nDd2cVrC11/jglTdES7+apOWCBw4b9txbGV xFbVziifdw4Ok05jNhyHkG1ml4qWwB1XI2theeRNTzlqneST1t9m1nTPJShGo3LuJLFq OWWWoH5HCaIv63wcl6M1H4LuulAZgmJRw/IEYWjvr8+lxWdntRFckAUraHaSE1CJDpyF DjCA== X-Gm-Message-State: AOAM531maLc1t6/EE66/Goohk25cMcScde06qUXiSdurvjz8mysUjG4G CaDxjiMs5JlEij8aN6QqAsR4CsOsQjuFH6ZR X-Google-Smtp-Source: ABdhPJwQ8ImLhIXFmnvxxZ69hgOXln2mD2YpbohExXb7xUViQqUheKWNHA35BozKYkv0JR0UkED/Pg== X-Received: by 2002:a63:c205:: with SMTP id b5mr5114407pgd.281.1612378841023; Wed, 03 Feb 2021 11:00:41 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 13/31] linux-user: Explicitly untag memory management syscalls Date: Wed, 3 Feb 2021 08:59:52 -1000 Message-Id: <20210203190010.759771-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" We define target_mmap et al as untagged, so that they can be used from the binary loaders. Explicitly call cpu_untagged_addr for munmap, mprotect, mremap syscall entry points. Add a few comments for the syscalls that are exempted by the kernel's tagged-address-abi.rst. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- linux-user/syscall.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 748893904e..4451f8e4f0 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -889,6 +889,8 @@ abi_long do_brk(abi_ulong new_brk) abi_long mapped_addr; abi_ulong new_alloc_size; =20 + /* brk pointers are always untagged */ + DEBUGF_BRK("do_brk(" TARGET_ABI_FMT_lx ") -> ", new_brk); =20 if (!new_brk) { @@ -4588,6 +4590,8 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_en= v, int i,ret; abi_ulong shmlba; =20 + /* shmat pointers are always untagged */ + /* find out the length of the shared memory segment */ ret =3D get_errno(shmctl(shmid, IPC_STAT, &shm_info)); if (is_error(ret)) { @@ -4655,6 +4659,8 @@ static inline abi_long do_shmdt(abi_ulong shmaddr) int i; abi_long rv; =20 + /* shmdt pointers are always untagged */ + mmap_lock(); =20 for (i =3D 0; i < N_SHM_REGIONS; ++i) { @@ -9691,6 +9697,7 @@ static abi_long do_syscall1(void *cpu_env, int num, a= bi_long arg1, v5, v6)); } #else + /* mmap pointers are always untagged */ ret =3D get_errno(target_mmap(arg1, arg2, arg3, target_to_host_bitmask(arg4, mmap_flag= s_tbl), arg5, @@ -9709,8 +9716,10 @@ static abi_long do_syscall1(void *cpu_env, int num, = abi_long arg1, return get_errno(ret); #endif case TARGET_NR_munmap: + arg1 =3D cpu_untagged_addr(cpu, arg1); return get_errno(target_munmap(arg1, arg2)); case TARGET_NR_mprotect: + arg1 =3D cpu_untagged_addr(cpu, arg1); { TaskState *ts =3D cpu->opaque; /* Special hack to detect libc making the stack executable. */ @@ -9725,6 +9734,8 @@ static abi_long do_syscall1(void *cpu_env, int num, a= bi_long arg1, return get_errno(target_mprotect(arg1, arg2, arg3)); #ifdef TARGET_NR_mremap case TARGET_NR_mremap: + arg1 =3D cpu_untagged_addr(cpu, arg1); + /* mremap new_addr (arg5) is always untagged */ return get_errno(target_mremap(arg1, arg2, arg3, arg4, arg5)); #endif /* ??? msync/mlock/munlock are broken for softmmu. */ --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380616; cv=none; d=zohomail.com; s=zohoarc; b=LUN+W2terb64uGnW37g71bK38UHdar8UxjkHetL8KbvkJBokoctUYb1u+01Pf2hhRSAI44o9u825IdQ4V7gOy2yfWZ4i4peE1u2C7eWCEt351wGr3aDWJdkg2Sl0jDUctYz/2riSRgzc84koU2mOVD53lLcW7nEy9ZHOUcyWuTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380616; h=Content-Transfer-Encoding:Cc: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=Lsa43KhLD9F5pbGprd2vnecoG5hphPKA1CxFp2hJ7uE=; b=TlxV1aUi4F07clqR0AfAgqlSyoy/NQ46MjMnOzymkffzTbiADsBEhsRajF1oJpLLYE5RQ1cGg2gVPk/6U6YGLTB/u/vnGJm/nnykk03wzLRjICgpCSUkkeUkZgzpIVhERcB1TA6Cnbbt/qavYnR6H13/zwA2Zb5FwJ5V61WpmgQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380616801898.8897280148418; Wed, 3 Feb 2021 11:30:16 -0800 (PST) Received: from localhost ([::1]:55370 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nqx-0006Ht-93 for importer@patchew.org; Wed, 03 Feb 2021 14:30:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOU-0007NH-Ib for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:52 -0500 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]:43719) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOO-0001cv-BX for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:50 -0500 Received: by mail-pl1-x62d.google.com with SMTP id 8so367148plc.10 for ; Wed, 03 Feb 2021 11:00:43 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Lsa43KhLD9F5pbGprd2vnecoG5hphPKA1CxFp2hJ7uE=; b=e1u5ubtb7b72Muf7/Sk1uX6dZA7D6Ben8TYrupvU22XojFLr79cna3+Df02Bk8a8QK p/+sb0+JxHeX/oiRlSY+qui+XvpsqGBv4VnBLQtaPZZtuYlkSctN/fmAyTsKXj1EAWo1 JBvflLROsH9sd8d62a/Wu2PJe+e5nCymSNDo5KdLpCapDLOX2besk//pDUCFWL+4Fupj Vqzkv6UpJWMfQHQLpr/BXV+lk8or9WJvYevSpZoIEqtJwuSdclxBhSa65buJ/4u/mrr3 e84tCzSzODk0d0D0M1M6jIws1CcSqc1sTQwRSL+aYqmTmWEFol0pIM05neeKVDpe6wbs 9b6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Lsa43KhLD9F5pbGprd2vnecoG5hphPKA1CxFp2hJ7uE=; b=IDT4V411FMqMFmV5gaQ6OUy4LGo508+tdaUBraR8Cd1HDO+5DzLMBRzWT4EW8kPjF9 wkfeIyxNZ762znxe1dqCEH1EcSXjIvoaf8y9bDMVthiSI6nrDeMGZtynyb2jfjd2WRTN XWSpOYOYklMADO+lmLrVVdOeEowNj73XIeEFiywQTCmEw8yv1SKZZ1HFmefAJ2/uAnqq lAu8BNU60Nm1pVasiOLZla88dYiV04AFVJZGShhhgozlCTLZ7wp1Jp5RjWStuqBYgjYO f6NcGnnulGbynwb8M5kxzgl/W+l3uAspV+GZcjRJcPrJsRhWBGv27SPwagJ+lRhv0MIb q4LQ== X-Gm-Message-State: AOAM533GJ7itvujiBoLKtCYNXqs6P1F42b+V/KUg09S6vbozBsYZBErh oDR6bSBcXMa7QLJN1+fidCEp6goZ8yRT6pEX X-Google-Smtp-Source: ABdhPJybRE70n0ihk16ewXBEmB3DmGuZFhS5shalwaqbeEIXJ2jVAZnLMnE38EIXjsLtI9sF9GvwKw== X-Received: by 2002:a17:902:ed84:b029:e1:1058:d7ca with SMTP id e4-20020a170902ed84b02900e11058d7camr4480110plj.85.1612378843071; Wed, 03 Feb 2021 11:00:43 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 14/31] linux-user: Use guest_range_valid in access_ok Date: Wed, 3 Feb 2021 08:59:53 -1000 Message-Id: <20210203190010.759771-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" We're currently open-coding the range check in access_ok; use guest_range_valid when size !=3D 0. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- linux-user/qemu.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 9fbc5edc4b..ba122a7903 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -493,12 +493,9 @@ extern unsigned long guest_stack_size; =20 static inline bool access_ok(int type, abi_ulong addr, abi_ulong size) { - if (!guest_addr_valid(addr)) { - return false; - } - if (size !=3D 0 && - (addr + size - 1 < addr || - !guest_addr_valid(addr + size - 1))) { + if (size =3D=3D 0 + ? !guest_addr_valid(addr) + : !guest_range_valid(addr, size)) { return false; } return page_check_range((target_ulong)addr, size, type) =3D=3D 0; --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379592; cv=none; d=zohomail.com; s=zohoarc; b=NL6KGVB5SQO9/MmVVwXppO07dKPR7w+xZStuh4aNyWptv8w7vEUTdnBKGNODhPkK8fzt2bFye+OFg62gUMeezJHjAoHHXlr9xPMPt94RFYTWycdbk5y/ONi7KF8XuVO3Jr7/g8WGvzR2gMekwQNHUAgvtupcavguDwSaOwsE7lg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379592; h=Content-Transfer-Encoding:Cc: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=7hjhE0U9saCfWCVjfPxJo9p8Csb2DErMQl9VR45IGeY=; b=fCRgm+JmexGxnlZEX/EGwpEHOMZ50gqBdiQynUmYFSmiZW5XwJaVuXMqEpQ2h7DK+OitVSqKhgdVIKBtBpdi8Q+uPHiunRQrq7ez6f/NT1dfKHLyuKVgUNZl4wCOgui0foyS+nkeMQx2ZDex9b4Q59Qu6MNr8o/vBgl3BfFM8SI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379592546889.0307839363776; Wed, 3 Feb 2021 11:13:12 -0800 (PST) Received: from localhost ([::1]:47164 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NaR-0007pF-BO for importer@patchew.org; Wed, 03 Feb 2021 14:13:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37944) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOY-0007P6-W2 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:56 -0500 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:52234) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOR-0001fe-E1 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:54 -0500 Received: by mail-pj1-x102a.google.com with SMTP id q72so230806pjq.2 for ; Wed, 03 Feb 2021 11:00:47 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7hjhE0U9saCfWCVjfPxJo9p8Csb2DErMQl9VR45IGeY=; b=Hy+TU37qMan3zms2o7LXzt2i0rogQImDQtzvsyZr/kOlwo3WpJLe8uxXQyzlkgfu1t KukUISrQSNoFxwoeUGre6i8fZZ4NgDV5yRMQcumZKYwbWCTpmMl2tPN9x7nCLuwIRfj6 MGEVAijNnGS9Hy6twJ93bdrFali/gL30hcPz+gjPKzwHWDXBQBEUAaw1r9novtlF7mTl lWtSdsaHL9BKG4kKLKSL5K0m6kc9Q+olyV3V8mmWfl+uWgvMmUIC5qSzPi9Zxl9nUHj/ wY18SjrO9xmFgONewqfkEagheyijonqxm0rYjfu9tUv1LoNSIaib18lBIYxQ4Nc/+1hp NnPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7hjhE0U9saCfWCVjfPxJo9p8Csb2DErMQl9VR45IGeY=; b=eVOshW7ryLitlAGEm5mqGFF+2m0mQRs3S+3I1XbiB/Uz8yFtqNPNrV4aTISSspHBzG EKFJcehUhLQiXlUhibTNSzlSSrg4172diw2ptsWxrYWmwqkKHpf/vvWAQSnALtK87yLA xaBmu2cXu41+4lS/i3x2BKlK9ubUFsabprrbEwzi6WQAJvlBhH8grxL6wroHVelcosZZ hSVXHQ0R1BNdMI34fS6jaBmXuF7NbAJ9CWof2EgaL/YfpqhzU+OL/9joWCeJhNxbodf6 c+KNMgIGlV76ppwhRDV+qbivBvQFUQ2DB4rv3aXaknHD4ibWom9z0CcAO1/f877zLP4m 7w0g== X-Gm-Message-State: AOAM531+A0K29SIlzFN7o3Liimix2HU9/yOJb6dnIPA2mDgzrLzrxz1t 3u4wL3Khzg2VFiKKw31B27ri4jZa/DnN30+N X-Google-Smtp-Source: ABdhPJyxMb0womCNT+XOvuP0bGYactzEuIy9CjrLcQ6AYsKOjtl3aC7bKhCZqMWWl9RERC26j6KDYA== X-Received: by 2002:a17:90b:124c:: with SMTP id gx12mr4298852pjb.21.1612378845094; Wed, 03 Feb 2021 11:00:45 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 15/31] exec: Rename guest_{addr,range}_valid to *_untagged Date: Wed, 3 Feb 2021 08:59:54 -1000 Message-Id: <20210203190010.759771-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The places that use these are better off using untagged addresses, so do not provide a tagged versions. Rename to make it clear about the address type. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- include/exec/cpu_ldst.h | 4 ++-- linux-user/qemu.h | 4 ++-- accel/tcg/user-exec.c | 9 ++++++--- linux-user/mmap.c | 12 ++++++------ linux-user/syscall.c | 2 +- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index c54069e3cd..ce6ce82618 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -87,12 +87,12 @@ static inline void *g2h(CPUState *cs, abi_ptr x) return g2h_untagged(cpu_untagged_addr(cs, x)); } =20 -static inline bool guest_addr_valid(abi_ulong x) +static inline bool guest_addr_valid_untagged(abi_ulong x) { return x <=3D GUEST_ADDR_MAX; } =20 -static inline bool guest_range_valid(abi_ulong start, abi_ulong len) +static inline bool guest_range_valid_untagged(abi_ulong start, abi_ulong l= en) { return len - 1 <=3D GUEST_ADDR_MAX && start <=3D GUEST_ADDR_MAX - len = + 1; } diff --git a/linux-user/qemu.h b/linux-user/qemu.h index ba122a7903..b3ccffbf0f 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -494,8 +494,8 @@ extern unsigned long guest_stack_size; static inline bool access_ok(int type, abi_ulong addr, abi_ulong size) { if (size =3D=3D 0 - ? !guest_addr_valid(addr) - : !guest_range_valid(addr, size)) { + ? !guest_addr_valid_untagged(addr) + : !guest_range_valid_untagged(addr, size)) { return false; } return page_check_range((target_ulong)addr, size, type) =3D=3D 0; diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index a2a353920c..4963e5cc51 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -191,10 +191,11 @@ static inline int handle_cpu_signal(uintptr_t pc, sig= info_t *info, g_assert_not_reached(); } =20 -static int probe_access_internal(CPUArchState *env, target_ulong addr, +static int probe_access_internal(CPUArchState *env, target_ulong addr_tagg= ed, int fault_size, MMUAccessType access_type, bool nonfault, uintptr_t ra) { + target_ulong addr; int flags; =20 switch (access_type) { @@ -211,13 +212,15 @@ static int probe_access_internal(CPUArchState *env, t= arget_ulong addr, g_assert_not_reached(); } =20 - if (!guest_addr_valid(addr) || page_check_range(addr, 1, flags) < 0) { + addr =3D cpu_untagged_addr(env_cpu(env), addr_tagged); + if (!guest_addr_valid_untagged(addr) || + page_check_range(addr, 1, flags) < 0) { if (nonfault) { return TLB_INVALID_MASK; } else { CPUState *cpu =3D env_cpu(env); CPUClass *cc =3D CPU_GET_CLASS(cpu); - cc->tlb_fill(cpu, addr, fault_size, access_type, + cc->tlb_fill(cpu, addr_tagged, fault_size, access_type, MMU_USER_IDX, false, ra); g_assert_not_reached(); } diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 088c50592c..6690384752 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -119,7 +119,7 @@ int target_mprotect(abi_ulong start, abi_ulong len, int= target_prot) } len =3D TARGET_PAGE_ALIGN(len); end =3D start + len; - if (!guest_range_valid(start, len)) { + if (!guest_range_valid_untagged(start, len)) { return -TARGET_ENOMEM; } if (len =3D=3D 0) { @@ -528,7 +528,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, in= t target_prot, * It can fail only on 64-bit host with 32-bit target. * On any other target/host host mmap() handles this error correct= ly. */ - if (end < start || !guest_range_valid(start, len)) { + if (end < start || !guest_range_valid_untagged(start, len)) { errno =3D ENOMEM; goto fail; } @@ -669,7 +669,7 @@ int target_munmap(abi_ulong start, abi_ulong len) if (start & ~TARGET_PAGE_MASK) return -TARGET_EINVAL; len =3D TARGET_PAGE_ALIGN(len); - if (len =3D=3D 0 || !guest_range_valid(start, len)) { + if (len =3D=3D 0 || !guest_range_valid_untagged(start, len)) { return -TARGET_EINVAL; } =20 @@ -727,9 +727,9 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, int prot; void *host_addr; =20 - if (!guest_range_valid(old_addr, old_size) || + if (!guest_range_valid_untagged(old_addr, old_size) || ((flags & MREMAP_FIXED) && - !guest_range_valid(new_addr, new_size))) { + !guest_range_valid_untagged(new_addr, new_size))) { errno =3D ENOMEM; return -1; } @@ -777,7 +777,7 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong ol= d_size, =20 if (host_addr !=3D MAP_FAILED) { /* Check if address fits target address space */ - if (!guest_range_valid(h2g(host_addr), new_size)) { + if (!guest_range_valid_untagged(h2g(host_addr), new_size))= { /* Revert mremap() changes */ host_addr =3D mremap(g2h_untagged(old_addr), new_size, old_size, flags); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 4451f8e4f0..30a5021509 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4608,7 +4608,7 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_en= v, return -TARGET_EINVAL; } } - if (!guest_range_valid(shmaddr, shm_info.shm_segsz)) { + if (!guest_range_valid_untagged(shmaddr, shm_info.shm_segsz)) { return -TARGET_EINVAL; } =20 --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379923; cv=none; d=zohomail.com; s=zohoarc; b=k9odevA4173mbq2HDu9Km+inP7aftxJ4iw9tbvK4xaIDwCVjjWw1L/hWkruEr5zsOw6fYPpjucqeXu0AobXRF7fRk8NCQ0v5i5jjmnTHfdpUvXdEdsMVrazEm0l02s8OQR/tEY6sQjha4gX7nIlDu6JrSGUgC/yT8sl9YiAdoEg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379923; h=Content-Transfer-Encoding:Cc: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=L4t/8M8kFq5a42opgp1R5x4ZoXUV03vj2iLC3WBwq9Q=; b=cTdOsnjsdLPgU+gA0SWSYFLNM4EUEZZowzt8PT4SS0g62do9y51O074RUkL4FPeXXJZ6Vt4y5HvjNM72qOv3QT+jjdtH9jxrBrWqjcArJff9U3pSADvM2MGoax4ohZ2g7dT3P3lKOI2PHQTXTlVpPC/4NRL18Fh+XX+pbMa5RSs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379923374557.3910936718287; Wed, 3 Feb 2021 11:18:43 -0800 (PST) Received: from localhost ([::1]:56102 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nfm-0003Cm-59 for importer@patchew.org; Wed, 03 Feb 2021 14:18:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37918) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOX-0007Ot-Sk for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:56 -0500 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:39484) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOS-0001gg-IW for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:53 -0500 Received: by mail-pl1-x62c.google.com with SMTP id b17so380334plz.6 for ; Wed, 03 Feb 2021 11:00:48 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=L4t/8M8kFq5a42opgp1R5x4ZoXUV03vj2iLC3WBwq9Q=; b=M5MpYmojqIDGwcczEjz63Nzqmq3ySYmSbPrOcsJ1zGi0FHI3as5Q+goqScIGBxB+Hi hQEDO2Zv8S/IGMsuTvnFwi0AF2Cc/SvLS6zsxEsHDbr/og7qQaZDkgEe5WP5cAnl5cCg Bm0OdWdwvubpnE47GdDe3253QoHvLc8btp5uEa60OZ1pAjx+ba6jGfN7KIdGbCh4tqWv FWkTe+03USm7RJhTETiwaUqOokjhkhX3embQhwSPuYxDL4gmAfscmo99UytPgXluXCVV ZGEBIIte9eu2/hm+qchh0aw0KEucoYBW98Cgg28GtMcu/Iv2a8SxvV5cmnVUttFMKjzT hRag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=L4t/8M8kFq5a42opgp1R5x4ZoXUV03vj2iLC3WBwq9Q=; b=B26/OYVX/+o7ve4j3xKfRBXqF82rC8GGosuNkGLSTp3e7Z3FLKwLG/2oWSVQ6Jut92 BU/FzXjHMCip7a5odIlNRnEPXaNj3cEBEn7wSaKJSvN3mOan6ffK1XNj4nhd4ifhhYLW UNWjeerA0XJ/IiMR9DcDtXQs0Ou/fL+G5OHBik2aruCOI7vwD1N4F0NutW68CLz1zpEd 7YlgpJJ1JGNBQlTqtsDOuGS3s+qfWJFiykPN4G3+QmWypgl0/sZNWbJo8wQ3goIUunU2 +njKRWzr8vofUoo/VaWCLYpFZ1KGVFekoQsxPmiS3w2p8mS0WN5dauElxXbiY2gbbHK8 prZA== X-Gm-Message-State: AOAM533O5IWT1ynRasdhP4VrByGNAUTFGGttW/3WyIlVt+V0+ptxdSQE ytKrJOjhHa7rraKBoSmbhsePvII3VeNavVu0 X-Google-Smtp-Source: ABdhPJzI7foHxNzutqLjh3noxCtq4pO3PgL8cfUj5HG7Sv1q3U0t8TVDNosRjTtXd682YvLljWkvTg== X-Received: by 2002:a17:90a:67ca:: with SMTP id g10mr4496965pjm.28.1612378847178; Wed, 03 Feb 2021 11:00:47 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 16/31] linux-user: Use cpu_untagged_addr in access_ok; split out *_untagged Date: Wed, 3 Feb 2021 08:59:55 -1000 Message-Id: <20210203190010.759771-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Provide both tagged and untagged versions of access_ok. In a few places use thread_cpu, as the user is several callees removed from do_syscall1. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- linux-user/qemu.h | 11 +++++++++-- linux-user/elfload.c | 2 +- linux-user/hppa/cpu_loop.c | 8 ++++---- linux-user/i386/cpu_loop.c | 2 +- linux-user/i386/signal.c | 5 +++-- linux-user/syscall.c | 9 ++++++--- 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index b3ccffbf0f..82eabb73f8 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -491,7 +491,7 @@ extern unsigned long guest_stack_size; #define VERIFY_READ PAGE_READ #define VERIFY_WRITE (PAGE_READ | PAGE_WRITE) =20 -static inline bool access_ok(int type, abi_ulong addr, abi_ulong size) +static inline bool access_ok_untagged(int type, abi_ulong addr, abi_ulong = size) { if (size =3D=3D 0 ? !guest_addr_valid_untagged(addr) @@ -501,6 +501,12 @@ static inline bool access_ok(int type, abi_ulong addr,= abi_ulong size) return page_check_range((target_ulong)addr, size, type) =3D=3D 0; } =20 +static inline bool access_ok(CPUState *cpu, int type, + abi_ulong addr, abi_ulong size) +{ + return access_ok_untagged(type, cpu_untagged_addr(cpu, addr), size); +} + /* NOTE __get_user and __put_user use host pointers and don't check access. These are usually used to access struct data members once the struct has been locked - usually with lock_user_struct. */ @@ -636,8 +642,9 @@ abi_long copy_to_user(abi_ulong gaddr, void *hptr, size= _t len); host area will have the same contents as the guest. */ static inline void *lock_user(int type, abi_ulong guest_addr, long len, in= t copy) { - if (!access_ok(type, guest_addr, len)) + if (!access_ok_untagged(type, guest_addr, len)) { return NULL; + } #ifdef DEBUG_REMAP { void *addr; diff --git a/linux-user/elfload.c b/linux-user/elfload.c index f542841ba2..e7209e03cb 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -3500,7 +3500,7 @@ static int vma_get_mapping_count(const struct mm_stru= ct *mm) static abi_ulong vma_dump_size(const struct vm_area_struct *vma) { /* if we cannot even read the first page, skip it */ - if (!access_ok(VERIFY_READ, vma->vma_start, TARGET_PAGE_SIZE)) + if (!access_ok_untagged(VERIFY_READ, vma->vma_start, TARGET_PAGE_SIZE)) return (0); =20 /* diff --git a/linux-user/hppa/cpu_loop.c b/linux-user/hppa/cpu_loop.c index 944511bbe4..3aaaf3337c 100644 --- a/linux-user/hppa/cpu_loop.c +++ b/linux-user/hppa/cpu_loop.c @@ -35,7 +35,7 @@ static abi_ulong hppa_lws(CPUHPPAState *env) return -TARGET_ENOSYS; =20 case 0: /* elf32 atomic 32bit cmpxchg */ - if ((addr & 3) || !access_ok(VERIFY_WRITE, addr, 4)) { + if ((addr & 3) || !access_ok(cs, VERIFY_WRITE, addr, 4)) { return -TARGET_EFAULT; } old =3D tswap32(old); @@ -50,9 +50,9 @@ static abi_ulong hppa_lws(CPUHPPAState *env) return -TARGET_ENOSYS; } if (((addr | old | new) & ((1 << size) - 1)) - || !access_ok(VERIFY_WRITE, addr, 1 << size) - || !access_ok(VERIFY_READ, old, 1 << size) - || !access_ok(VERIFY_READ, new, 1 << size)) { + || !access_ok(cs, VERIFY_WRITE, addr, 1 << size) + || !access_ok(cs, VERIFY_READ, old, 1 << size) + || !access_ok(cs, VERIFY_READ, new, 1 << size)) { return -TARGET_EFAULT; } /* Note that below we use host-endian loads so that the cmpxchg diff --git a/linux-user/i386/cpu_loop.c b/linux-user/i386/cpu_loop.c index 19c8a18cd3..f813e87294 100644 --- a/linux-user/i386/cpu_loop.c +++ b/linux-user/i386/cpu_loop.c @@ -99,7 +99,7 @@ static bool write_ok_or_segv(CPUX86State *env, abi_ptr ad= dr, size_t len) * For all the vsyscalls, NULL means "don't write anything" not * "write it at address 0". */ - if (addr =3D=3D 0 || access_ok(VERIFY_WRITE, addr, len)) { + if (addr =3D=3D 0 || access_ok(env_cpu(env), VERIFY_WRITE, addr, len))= { return true; } =20 diff --git a/linux-user/i386/signal.c b/linux-user/i386/signal.c index 97a39204cc..9320e1d472 100644 --- a/linux-user/i386/signal.c +++ b/linux-user/i386/signal.c @@ -513,9 +513,10 @@ restore_sigcontext(CPUX86State *env, struct target_sig= context *sc) =20 fpstate_addr =3D tswapl(sc->fpstate); if (fpstate_addr !=3D 0) { - if (!access_ok(VERIFY_READ, fpstate_addr, - sizeof(struct target_fpstate))) + if (!access_ok(env_cpu(env), VERIFY_READ, fpstate_addr, + sizeof(struct target_fpstate))) { goto badframe; + } #ifndef TARGET_X86_64 cpu_x86_frstor(env, fpstate_addr, 1); #else diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 30a5021509..24fc1daf02 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -3515,8 +3515,9 @@ static abi_long do_accept4(int fd, abi_ulong target_a= ddr, return -TARGET_EINVAL; } =20 - if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) + if (!access_ok(thread_cpu, VERIFY_WRITE, target_addr, addrlen)) { return -TARGET_EFAULT; + } =20 addr =3D alloca(addrlen); =20 @@ -3546,8 +3547,9 @@ static abi_long do_getpeername(int fd, abi_ulong targ= et_addr, return -TARGET_EINVAL; } =20 - if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) + if (!access_ok(thread_cpu, VERIFY_WRITE, target_addr, addrlen)) { return -TARGET_EFAULT; + } =20 addr =3D alloca(addrlen); =20 @@ -3577,8 +3579,9 @@ static abi_long do_getsockname(int fd, abi_ulong targ= et_addr, return -TARGET_EINVAL; } =20 - if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) + if (!access_ok(thread_cpu, VERIFY_WRITE, target_addr, addrlen)) { return -TARGET_EFAULT; + } =20 addr =3D alloca(addrlen); =20 --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380192; cv=none; d=zohomail.com; s=zohoarc; b=Bq49p3X8cj2QmMPLQR25/Co1RFdnnr+wdF3g3oaEq9G9za+81AbFFMaiOYFdjsAdTfdoxAvbqiQoVlOKiiu6JGZmyNq8Ik/s8b9joubZB2BRFAqrSD+2+kOnmpeoCCqlTdaqJujq2REs+1OENmQ1IoVhI/M+2zsCKp6viIfR4CE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380192; h=Content-Transfer-Encoding:Cc: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=iLxLfNzxBXfugKdA1uaxV5JERPRGKvt+X+dUcdlu6iw=; b=Tt3A1BYKMvCk2jf3cXtg9mhQv9PyujFy0v86SQxxEC3Cue2e4cXFHcm9wRullWZoV+UQzokTlIJQvvsxXtsg8J6yfbOIGQu2wf5DOs60wC1Q+xYEUEcIRemaPiqluj/iwsCbOdSXYbmrMbB0A94veuskxPj6LWkXEflHaHJVmzE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380192242573.7894811419923; Wed, 3 Feb 2021 11:23:12 -0800 (PST) Received: from localhost ([::1]:36662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nk7-0006uH-4H for importer@patchew.org; Wed, 03 Feb 2021 14:23:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37996) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOb-0007QE-Ae for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:01 -0500 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:36930) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOU-0001iM-8B for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:56 -0500 Received: by mail-pl1-x632.google.com with SMTP id e12so387694pls.4 for ; Wed, 03 Feb 2021 11:00:49 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iLxLfNzxBXfugKdA1uaxV5JERPRGKvt+X+dUcdlu6iw=; b=TmbiPO6bUIig2r0oh3NLgO5Q52oXV+oQKLgq777TpQQ2l/4opHkUuMAKxapRmnjrnL 6OuVjEaeAmkrerPh/kwZbWLNdlPd+TaTOEQwow/i1pgFrXStmIWZQWCrHwh0TMXWyCaV ocg/V6SLG74WpN+MrwKQOn9O0dIS0z45DvR1SCLkxwzDzITBt2I4ipoaa6YAYHMH5yPH nKm/eK5Ew5yJlsXolngUbN7I1KWpV2eLLb23tcyJIZh2OPdRwj10eAE+ChWfc4M8InLV LTuyfeYxHpM7monGCHXUUgg/G8/H5LQhjEp5rJXKaZMVRlabCZT+JY5xFrIbVabs2Thm Pm5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iLxLfNzxBXfugKdA1uaxV5JERPRGKvt+X+dUcdlu6iw=; b=cqG7oYMn1JFFRihb9He/1rp/V+W7NgjM1swda2YfpExegVivXmgrJagPNYAblHBS8w x1RKBwHEVvTasDMcUMQ54XlBbFxsf6UrTeAqFSWA0v7ATNxJuzdE/DDN1bmhsRZqn7Qp h/lnrhRhF1TsjSLC+yMGaHNIP0i6S7hsEc40dWwqaCUInMzf6CrhyED0Ih/fqRklP6ZW i/daa9qe0N9hegVByeZC91BFR5pLEyuGNrZStQE7giEQevab6Rxw5Vu1XAjmcYh2ZY40 SdGsXkaE2rMqbft40c5fPctm/6+Wet5WG+euq1p61/0FwgFfWHE98/bWpWO6qyf+jOD2 0pPQ== X-Gm-Message-State: AOAM532Y0DBa/gCAoeUSmCLDr0C2IW7ZyLKA+RaipaxzUxUyQVBtGgEb vld9bijD6SHUbgeEQ1POy+BsFu9/pWN0YQK5 X-Google-Smtp-Source: ABdhPJwgoiqok8Sqf3Led38Nw1TrS/ZHNMibY1+QBXUakI6jFgoo0LFUqIUu2HSzVZVbuOV0TENVfA== X-Received: by 2002:a17:90a:dc01:: with SMTP id i1mr4267807pjv.134.1612378849014; Wed, 03 Feb 2021 11:00:49 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 17/31] linux-user: Move lock_user et al out of line Date: Wed, 3 Feb 2021 08:59:56 -1000 Message-Id: <20210203190010.759771-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These functions are not small, except for unlock_user without debugging enabled. Move them out of line, and add missing braces on the way. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- linux-user/qemu.h | 45 ++++++------------------------------------- linux-user/uaccess.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 82eabb73f8..36b58bd840 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -640,57 +640,24 @@ abi_long copy_to_user(abi_ulong gaddr, void *hptr, si= ze_t len); =20 /* Lock an area of guest memory into the host. If copy is true then the host area will have the same contents as the guest. */ -static inline void *lock_user(int type, abi_ulong guest_addr, long len, in= t copy) -{ - if (!access_ok_untagged(type, guest_addr, len)) { - return NULL; - } -#ifdef DEBUG_REMAP - { - void *addr; - addr =3D g_malloc(len); - if (copy) - memcpy(addr, g2h(guest_addr), len); - else - memset(addr, 0, len); - return addr; - } -#else - return g2h_untagged(guest_addr); -#endif -} +void *lock_user(int type, abi_ulong guest_addr, long len, int copy); =20 /* Unlock an area of guest memory. The first LEN bytes must be flushed back to guest memory. host_ptr =3D NULL is explicitly allowed and does nothing. */ -static inline void unlock_user(void *host_ptr, abi_ulong guest_addr, - long len) -{ - #ifdef DEBUG_REMAP - if (!host_ptr) - return; - if (host_ptr =3D=3D g2h_untagged(guest_addr)) - return; - if (len > 0) - memcpy(g2h_untagged(guest_addr), host_ptr, len); - g_free(host_ptr); +static inline void unlock_user(void *host_ptr, abi_ulong guest_addr, long = len) +{ } +#else +void unlock_user(void *host_ptr, abi_ulong guest_addr, long len); #endif -} =20 /* Return the length of a string in target memory or -TARGET_EFAULT if access error. */ abi_long target_strlen(abi_ulong gaddr); =20 /* Like lock_user but for null terminated strings. */ -static inline void *lock_user_string(abi_ulong guest_addr) -{ - abi_long len; - len =3D target_strlen(guest_addr); - if (len < 0) - return NULL; - return lock_user(VERIFY_READ, guest_addr, (long)(len + 1), 1); -} +void *lock_user_string(abi_ulong guest_addr); =20 /* Helper macros for locking/unlocking a target struct. */ #define lock_user_struct(type, host_ptr, guest_addr, copy) \ diff --git a/linux-user/uaccess.c b/linux-user/uaccess.c index e215ecc2a6..bba012ed15 100644 --- a/linux-user/uaccess.c +++ b/linux-user/uaccess.c @@ -4,6 +4,52 @@ =20 #include "qemu.h" =20 +void *lock_user(int type, abi_ulong guest_addr, long len, int copy) +{ + if (!access_ok_untagged(type, guest_addr, len)) { + return NULL; + } +#ifdef DEBUG_REMAP + { + void *addr; + addr =3D g_malloc(len); + if (copy) { + memcpy(addr, g2h(guest_addr), len); + } else { + memset(addr, 0, len); + } + return addr; + } +#else + return g2h_untagged(guest_addr); +#endif +} + +#ifdef DEBUG_REMAP +void unlock_user(void *host_ptr, abi_ulong guest_addr, long len); +{ + if (!host_ptr) { + return; + } + if (host_ptr =3D=3D g2h_untagged(guest_addr)) { + return; + } + if (len > 0) { + memcpy(g2h_untagged(guest_addr), host_ptr, len); + } + g_free(host_ptr); +} +#endif + +void *lock_user_string(abi_ulong guest_addr) +{ + abi_long len =3D target_strlen(guest_addr); + if (len < 0) { + return NULL; + } + return lock_user(VERIFY_READ, guest_addr, (long)(len + 1), 1); +} + /* copy_from_user() and copy_to_user() are usually used to copy data * buffers between the target and host. These internally perform * locking/unlocking of the memory. --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612379922; cv=none; d=zohomail.com; s=zohoarc; b=CcILzqp0WniJe7u08hZCDfy9SGIGzMkxHuInxkTmq+H9HICPoWE5LRQECseU29Gmit2PpDsp6nQs3SAGSxu7SHdJYIN9W1ymT15sspuMpnrN59Tvg+xdTKhvuZlmoF/fa+7XkfPaAX/uP0z4UBlSVTKfi1Xeh7A7m5EvmQ37lXU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612379922; h=Content-Transfer-Encoding:Cc: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=xTo2NylmjqqjFL8fqMUunkk9BsrbQ/4yVzkjDrtoXzY=; b=jknv1Ji30OWgX9wZEGwKPdbXfwxfIc4ti4u3tTP0toSVUduJitz8QmEjffDYL63Z75xRoa5IfiBd5In7Xwkok0jgZzHdWrHxSfaJELpqe56gDQXDxgR0RXFtbiBSFcba6/BVZuNwvnMgVjvK2TRUsWvcGoatu2LLGXKGiZRHjuA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612379922534359.4411434993639; Wed, 3 Feb 2021 11:18:42 -0800 (PST) Received: from localhost ([::1]:56044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nfl-0003BV-7s for importer@patchew.org; Wed, 03 Feb 2021 14:18:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37992) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOb-0007QD-9h for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:57 -0500 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:38455) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOW-0001jj-Ij for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:00:56 -0500 Received: by mail-pf1-x433.google.com with SMTP id y205so427916pfc.5 for ; Wed, 03 Feb 2021 11:00:52 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xTo2NylmjqqjFL8fqMUunkk9BsrbQ/4yVzkjDrtoXzY=; b=hEwG++9efnhBtmgzphxK/RTY6KWxU20AMhyj9j6O4WkbT1iULUDpfi+3bfxB4jlHm9 EldS2kmzaXKz+Pjon7Mbds4y3yuGMjFkwJJdDN8ohUcRQUgF+Hlq91chJ2uZDUwluWyP f8itKFr32MJHy+CqPEnggRHvc0Rlp45HnX82KpqhlKQYVwFF8YnvRSIsjgo9r5Og9WzZ TAbmPSQRkYZxfq32IRpuGp+4/e+C50ROKxN+pfoiVV7WePFE9neNBDusaGa2UbuyLIlC Eg+oBpzIXPiRiTT9+6RQ5IwSZvf/txf7Lo6FIq2roDiIZgRN8xCpdUifVzl/iwp+owkP mvZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xTo2NylmjqqjFL8fqMUunkk9BsrbQ/4yVzkjDrtoXzY=; b=ivD5qoLBI3petQs5iVjRUhju66UQNbsKAsdu7UjIPJQ7G9h3UraV9dsSsIn3Ct9yCy FLNCnyh9vdK58/SdNmnp7QolLYYLYv7ngNaOcy/3/F7H4NGISYQjJSzr9xOLVVIod/12 mhDmEAFMNcSea4nnUhnLAHTtnPjxofc0tGTl8HRiVxjmqEQ1BFAFUMtbnxAybq0s+JV1 sp0zL5LFNocqK3vMJ3Hm5HuWgAhfr+4au71CpV6Y4ylZ+UQbgsNxDLtVXIYxGjvXB+LK hPukCY4250Ln7sDecZHm5mYzkJ/naJ1Kxti8ERp32U9OJ9ITn4+N2SLzpDLNrQKZ5kJr w0bw== X-Gm-Message-State: AOAM531PrCfKXzzTF7nfu6BQJix+18ENIypqcEvrmhdhZeziiCBG8OKJ RjLK+0g/jyPlhiYxYEFi8fAY2i/uyWtw29GF X-Google-Smtp-Source: ABdhPJwEymGk/4Eg40wyqH8v5x8qENEULuPcRFZg5gFns1VQfD/LzyS8Id/VYmv11B25N3ZjeUZSFQ== X-Received: by 2002:a63:2001:: with SMTP id g1mr5058808pgg.83.1612378850958; Wed, 03 Feb 2021 11:00:50 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 18/31] linux-user: Fix types in uaccess.c Date: Wed, 3 Feb 2021 08:59:57 -1000 Message-Id: <20210203190010.759771-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" For copy_*_user, only 0 and -TARGET_EFAULT are returned; no need to involve abi_long. Use size_t for lengths. Use bool for the lock_user copy argument. Use ssize_t for target_strlen, because we can't overflow the host memory space. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- linux-user/qemu.h | 14 ++++++-------- linux-user/uaccess.c | 43 ++++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 36b58bd840..d25a5dafc0 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -7,8 +7,6 @@ #include "exec/cpu_ldst.h" =20 #undef DEBUG_REMAP -#ifdef DEBUG_REMAP -#endif /* DEBUG_REMAP */ =20 #include "exec/user/abitypes.h" =20 @@ -629,8 +627,8 @@ static inline bool access_ok(CPUState *cpu, int type, * buffers between the target and host. These internally perform * locking/unlocking of the memory. */ -abi_long copy_from_user(void *hptr, abi_ulong gaddr, size_t len); -abi_long copy_to_user(abi_ulong gaddr, void *hptr, size_t len); +int copy_from_user(void *hptr, abi_ulong gaddr, size_t len); +int copy_to_user(abi_ulong gaddr, void *hptr, size_t len); =20 /* Functions for accessing guest memory. The tget and tput functions read/write single values, byteswapping as necessary. The lock_user fun= ction @@ -640,13 +638,13 @@ abi_long copy_to_user(abi_ulong gaddr, void *hptr, si= ze_t len); =20 /* Lock an area of guest memory into the host. If copy is true then the host area will have the same contents as the guest. */ -void *lock_user(int type, abi_ulong guest_addr, long len, int copy); +void *lock_user(int type, abi_ulong guest_addr, size_t len, bool copy); =20 /* Unlock an area of guest memory. The first LEN bytes must be flushed back to guest memory. host_ptr =3D NULL is explicitly allowed and does nothing. */ -#ifdef DEBUG_REMAP -static inline void unlock_user(void *host_ptr, abi_ulong guest_addr, long = len) +#ifndef DEBUG_REMAP +static inline void unlock_user(void *host_ptr, abi_ulong guest_addr, size_= t len) { } #else void unlock_user(void *host_ptr, abi_ulong guest_addr, long len); @@ -654,7 +652,7 @@ void unlock_user(void *host_ptr, abi_ulong guest_addr, = long len); =20 /* Return the length of a string in target memory or -TARGET_EFAULT if access error. */ -abi_long target_strlen(abi_ulong gaddr); +ssize_t target_strlen(abi_ulong gaddr); =20 /* Like lock_user but for null terminated strings. */ void *lock_user_string(abi_ulong guest_addr); diff --git a/linux-user/uaccess.c b/linux-user/uaccess.c index bba012ed15..30d01f8b30 100644 --- a/linux-user/uaccess.c +++ b/linux-user/uaccess.c @@ -4,7 +4,7 @@ =20 #include "qemu.h" =20 -void *lock_user(int type, abi_ulong guest_addr, long len, int copy) +void *lock_user(int type, abi_ulong guest_addr, size_t len, bool copy) { if (!access_ok_untagged(type, guest_addr, len)) { return NULL; @@ -26,7 +26,7 @@ void *lock_user(int type, abi_ulong guest_addr, long len,= int copy) } =20 #ifdef DEBUG_REMAP -void unlock_user(void *host_ptr, abi_ulong guest_addr, long len); +void unlock_user(void *host_ptr, abi_ulong guest_addr, size_t len); { if (!host_ptr) { return; @@ -43,53 +43,53 @@ void unlock_user(void *host_ptr, abi_ulong guest_addr, = long len); =20 void *lock_user_string(abi_ulong guest_addr) { - abi_long len =3D target_strlen(guest_addr); + ssize_t len =3D target_strlen(guest_addr); if (len < 0) { return NULL; } - return lock_user(VERIFY_READ, guest_addr, (long)(len + 1), 1); + return lock_user(VERIFY_READ, guest_addr, (size_t)len + 1, 1); } =20 /* copy_from_user() and copy_to_user() are usually used to copy data * buffers between the target and host. These internally perform * locking/unlocking of the memory. */ -abi_long copy_from_user(void *hptr, abi_ulong gaddr, size_t len) +int copy_from_user(void *hptr, abi_ulong gaddr, size_t len) { - abi_long ret =3D 0; - void *ghptr; + int ret =3D 0; + void *ghptr =3D lock_user(VERIFY_READ, gaddr, len, 1); =20 - if ((ghptr =3D lock_user(VERIFY_READ, gaddr, len, 1))) { + if (ghptr) { memcpy(hptr, ghptr, len); unlock_user(ghptr, gaddr, 0); - } else + } else { ret =3D -TARGET_EFAULT; - + } return ret; } =20 - -abi_long copy_to_user(abi_ulong gaddr, void *hptr, size_t len) +int copy_to_user(abi_ulong gaddr, void *hptr, size_t len) { - abi_long ret =3D 0; - void *ghptr; + int ret =3D 0; + void *ghptr =3D lock_user(VERIFY_WRITE, gaddr, len, 0); =20 - if ((ghptr =3D lock_user(VERIFY_WRITE, gaddr, len, 0))) { + if (ghptr) { memcpy(ghptr, hptr, len); unlock_user(ghptr, gaddr, len); - } else + } else { ret =3D -TARGET_EFAULT; + } =20 return ret; } =20 /* Return the length of a string in target memory or -TARGET_EFAULT if access error */ -abi_long target_strlen(abi_ulong guest_addr1) +ssize_t target_strlen(abi_ulong guest_addr1) { uint8_t *ptr; abi_ulong guest_addr; - int max_len, len; + size_t max_len, len; =20 guest_addr =3D guest_addr1; for(;;) { @@ -101,11 +101,12 @@ abi_long target_strlen(abi_ulong guest_addr1) unlock_user(ptr, guest_addr, 0); guest_addr +=3D len; /* we don't allow wrapping or integer overflow */ - if (guest_addr =3D=3D 0 ||=20 - (guest_addr - guest_addr1) > 0x7fffffff) + if (guest_addr =3D=3D 0 || (guest_addr - guest_addr1) > 0x7fffffff= ) { return -TARGET_EFAULT; - if (len !=3D max_len) + } + if (len !=3D max_len) { break; + } } return guest_addr - guest_addr1; } --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381203; cv=none; d=zohomail.com; s=zohoarc; b=B3HL99FBremX4j9b55RSm7Df0MRDVkIwne011oOkwKI3C3kjFSF7IWFYPiRHFDWPwParNuRuau+OEjShssJ1TgmKiM37mGooVCxt77a3+hj+Yhxxz0H3DD+AZCVp2PcJmqk4SpSAIDWDAXl192/iVpcOK5fd0fNiM0+AZg3Ooos= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381203; h=Content-Transfer-Encoding:Cc: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=fn8MU8GbKbZO5LXUa5nQVZBY0gRxILng7WcRszBxkV4=; b=QpSHVytp+2lGxkuFewP8/ZKIZQfh1+c+Dram4qvJmUAOppC7N4JVUQqdQaIpRzGd7SJHIRiD8aIwB/O9t56HXI6OmG1/d+cLfBVqKHA96tweqFpyvF1qgAMGRxNUAsQ5Cu2f/ryA+KLOCJJIOywV6bg3hwdTRll1JLT3I9k5tQo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612381203342919.4873010515385; Wed, 3 Feb 2021 11:40:03 -0800 (PST) Received: from localhost ([::1]:45838 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7O0Q-00064Q-B3 for importer@patchew.org; Wed, 03 Feb 2021 14:40:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0007UO-RU for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:13 -0500 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:35339) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOY-0001lA-Gb for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:07 -0500 Received: by mail-pj1-x102f.google.com with SMTP id e9so249390pjj.0 for ; Wed, 03 Feb 2021 11:00:53 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fn8MU8GbKbZO5LXUa5nQVZBY0gRxILng7WcRszBxkV4=; b=ssit2A2aO7H376GkOS/W4kNL27OyYD6h1Q6pHa+9svjaNYnLYIqB+cwP2Iyn4DrCbR OKlH7nwnpyWG4l8oQUW5DbNc77P4Fu+teS02HxC1vxsIGAxw/19QxtVpd+dHTTDV7jRq d+b0V5PVJutHbsZMzC6TkNjG66gYtZrUex0U6SU7CwOVWB7ITL7IlXCoPEGdbRsH0Ylk 874dBg+1uho/Yg7S58JET7HLLnlufqMWbZx5GdYCj5n6zddKCPJcKrdeUL1gUuLpO/Iq rZs7ke22CfryIu/pQRVKpBVGFVgC7lMO4WXBagWA0O2hf3zKMRQBBDvrGHwvb69tmc+d xIPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fn8MU8GbKbZO5LXUa5nQVZBY0gRxILng7WcRszBxkV4=; b=hx84rX+Z/oNtcnj8u0AVP0JQj5a89c9fO3rUYPF8Q6lulKRUd5dOhpjPtAomThqNED fZ3ZYjAi1J4b33wlRo+cQIkiyHudN3HeHELNWR32FFldRTbQLijlQCS+te+D3v2AIp5k y3fU3ifUFzTciCiWutiXrAHGV8sVH/NVPJXshpGeHDJta/GYOsoU6I7miXxESrw0wzw8 JVNiv+0gv4exS1upAtRA08NPzDXoXwHJkBjimx2TC+G1tbi5rl/QzQKWrWaDGWgv0XSg l4LIX17+Igf2KmiRQ4UUOKqmg4FIMml57AUpicxy6MX8TNTmV8fiTyCP9BjUzivmcHSr WZ+g== X-Gm-Message-State: AOAM533OaqvXhB+CiPfpwID8ho9DXARDCxGANrrdF1iKDMrIsgGoHB6+ HXnxIecO3T5CPmgdu6wCgHvqxI0iHeWJKSFC X-Google-Smtp-Source: ABdhPJz02prGZlbonB8xWDgOmJNMe37iPNpyzAhx1nGXzX5AkRXGxRY8/oUS/QcvKi/q/PVPdfjqzg== X-Received: by 2002:a17:902:102:b029:e1:2a4c:61ed with SMTP id 2-20020a1709020102b02900e12a4c61edmr4499565plb.61.1612378853164; Wed, 03 Feb 2021 11:00:53 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 19/31] linux-user: Handle tags in lock_user/unlock_user Date: Wed, 3 Feb 2021 08:59:58 -1000 Message-Id: <20210203190010.759771-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Resolve the untagged address once, using thread_cpu. Tidy the DEBUG_REMAP code using glib routines. Signed-off-by: Richard Henderson --- linux-user/uaccess.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/linux-user/uaccess.c b/linux-user/uaccess.c index 30d01f8b30..c696913016 100644 --- a/linux-user/uaccess.c +++ b/linux-user/uaccess.c @@ -6,36 +6,37 @@ =20 void *lock_user(int type, abi_ulong guest_addr, size_t len, bool copy) { + void *host_addr; + + guest_addr =3D cpu_untagged_addr(thread_cpu, guest_addr); if (!access_ok_untagged(type, guest_addr, len)) { return NULL; } + host_addr =3D g2h_untagged(guest_addr); #ifdef DEBUG_REMAP - { - void *addr; - addr =3D g_malloc(len); - if (copy) { - memcpy(addr, g2h(guest_addr), len); - } else { - memset(addr, 0, len); - } - return addr; + if (copy) { + host_addr =3D g_memdup(host_addr, len); + } else { + host_addr =3D g_malloc0(len); } -#else - return g2h_untagged(guest_addr); #endif + return host_addr; } =20 #ifdef DEBUG_REMAP void unlock_user(void *host_ptr, abi_ulong guest_addr, size_t len); { + void *host_ptr_conv; + if (!host_ptr) { return; } - if (host_ptr =3D=3D g2h_untagged(guest_addr)) { + host_ptr_conv =3D g2h(thread_cpu, guest_addr); + if (host_ptr =3D=3D host_ptr_conv) { return; } - if (len > 0) { - memcpy(g2h_untagged(guest_addr), host_ptr, len); + if (len !=3D 0) { + memcpy(host_ptr_conv, host_ptr, len); } g_free(host_ptr); } --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380490; cv=none; d=zohomail.com; s=zohoarc; b=Mbj7M/2F0z842KV2EGRezQPlWAmkfaKNraoieB34kVjfQL5TtUe8FLB/ZRGVRNdW1fuNg6R7g9h57053ymFZjwxJ5dYx/WIy7o88c4TCeAHmFtOpD3zDfAPj1YQb2ZGVsA0MrGMjaobHqlqR4R9Bn9KSJwdvyAActcP/qrT8YUE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380490; h=Content-Transfer-Encoding:Cc: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=NmqOnFZ3gzFTWfhEXE/IEZcCHdcqEoHvbx2VhkXYfn0=; b=kHqQ0/m4S/k5/m4VTwB0QAiLE5diWvQdFnFOpx8Jnz+jlzVOeBJ38Hrhsex8kQFWs0nrpKQOqGW+yyLJ+lElMQBZpclNXPcWmkTCTsXLQG+8+t3I7Njif+BE2UK4j9ZjgYW5PueN53K4/LgksHkKHNsOW6//BFZbs154LGGHpuY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161238049060794.91728674596084; Wed, 3 Feb 2021 11:28:10 -0800 (PST) Received: from localhost ([::1]:49662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nov-0003ui-FI for importer@patchew.org; Wed, 03 Feb 2021 14:28:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38066) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0007Ti-3C for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:13 -0500 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:52054) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOa-0001mQ-Pq for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:06 -0500 Received: by mail-pj1-x1036.google.com with SMTP id a20so235706pjs.1 for ; Wed, 03 Feb 2021 11:00:56 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NmqOnFZ3gzFTWfhEXE/IEZcCHdcqEoHvbx2VhkXYfn0=; b=uECkAftbpnvvKJ64aKpKmMwKz/mv6M0YgeqSCqBKJjZZqIz9ljKvh9tLEKwjqBI8Yi sGUP8OTVeSBzKQNBkBW+mhiwqOUHq2zPfoj16LvIAPupWSIcBbxTWe7k88rSrhGZOgno 8gVecHi1otxt807rvdrbvwrZA0XL9dJ82CmTI+VEsJS7Jyt+l+ZW1dWUR7E3rHdpWN2T Pmg7gy36jtySD67SiCN4tupO/DpEsz2qOtn44eNFFZOnSpDrAGWwzwqFmBIKtaPFryhW 4IcN5sXZKJ+8AUGRMpAx5akT0/S9iHz18uXtzCvurA3tM4gYzT7nd7o0+4TRWlhdkwbj HYyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NmqOnFZ3gzFTWfhEXE/IEZcCHdcqEoHvbx2VhkXYfn0=; b=Wzwpgn3arQR5HA0NWEG6AZM84oZeKL+hfOLyxu9VLsm52sDowX4EOTkquZmFz/WRz3 PSbEJtXP78H5bNAhd6APb6ujxqJtHrwH/U8RKmpANlr04IcpxOrCbq15svuUiVQykNsC lIh9uZN/8BwlLbaA0auvMvbyI2rhBaDZR4Srk4al1IacmIB7bec82fCfAGNsnnfePiqb OPgoncVzLTq8E1OisMUlIYxJcwM4r4qzyewVibtOZTH9ZyVDkexkmIAIM4W66yqjKTRH P1wBl4td+iy+yDKWCFsL234KEjgvoU3aKYIcwDaU157UYlnNrupW63DaefOX0VCiIn87 U1yw== X-Gm-Message-State: AOAM5304dOaIlzGCFc+6N0kSGkOqpNcuMGRPOLtM2OZOlydOInr/TMr1 Q2MUxJFX5ejRe6Z8EZvpvYJ6xaj5TCGRakG2 X-Google-Smtp-Source: ABdhPJz+bqsLAzhk0EyebJGpA3RZFzOfs6pT76c3NXWHT7Ow4m4RBpKPf5P11rs86g6N4na0SUXb7g== X-Received: by 2002:a17:90a:4611:: with SMTP id w17mr4502783pjg.18.1612378855264; Wed, 03 Feb 2021 11:00:55 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 20/31] linux-user/aarch64: Implement PR_TAGGED_ADDR_ENABLE Date: Wed, 3 Feb 2021 08:59:59 -1000 Message-Id: <20210203190010.759771-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This is the prctl bit that controls whether syscalls accept tagged addresses. See Documentation/arm64/tagged-address-abi.rst in the linux kernel. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/aarch64/target_syscall.h | 4 ++++ target/arm/cpu-param.h | 3 +++ target/arm/cpu.h | 31 +++++++++++++++++++++++++++++ linux-user/syscall.c | 24 ++++++++++++++++++++++ 4 files changed, 62 insertions(+) diff --git a/linux-user/aarch64/target_syscall.h b/linux-user/aarch64/targe= t_syscall.h index 3194e6b009..820601dfcc 100644 --- a/linux-user/aarch64/target_syscall.h +++ b/linux-user/aarch64/target_syscall.h @@ -30,4 +30,8 @@ struct target_pt_regs { # define TARGET_PR_PAC_APDBKEY (1 << 3) # define TARGET_PR_PAC_APGAKEY (1 << 4) =20 +#define TARGET_PR_SET_TAGGED_ADDR_CTRL 55 +#define TARGET_PR_GET_TAGGED_ADDR_CTRL 56 +# define TARGET_PR_TAGGED_ADDR_ENABLE (1UL << 0) + #endif /* AARCH64_TARGET_SYSCALL_H */ diff --git a/target/arm/cpu-param.h b/target/arm/cpu-param.h index 00e7d9e937..7f38d33b8e 100644 --- a/target/arm/cpu-param.h +++ b/target/arm/cpu-param.h @@ -20,6 +20,9 @@ =20 #ifdef CONFIG_USER_ONLY #define TARGET_PAGE_BITS 12 +# ifdef TARGET_AARCH64 +# define TARGET_TAGGED_ADDRESSES +# endif #else /* * ARMv7 and later CPUs have 4K pages minimum, but ARMv5 and v6 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index d080239863..558ad1466b 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -721,6 +721,11 @@ typedef struct CPUARMState { const struct arm_boot_info *boot_info; /* Store GICv3CPUState to access from this struct */ void *gicv3state; + +#ifdef TARGET_TAGGED_ADDRESSES + /* Linux syscall tagged address support */ + bool tagged_addr_enable; +#endif } CPUARMState; =20 static inline void set_feature(CPUARMState *env, int feature) @@ -3602,6 +3607,32 @@ static inline MemTxAttrs *typecheck_memtxattrs(MemTx= Attrs *x) */ #define PAGE_BTI PAGE_TARGET_1 =20 +#ifdef TARGET_TAGGED_ADDRESSES +/** + * cpu_untagged_addr: + * @cs: CPU context + * @x: tagged address + * + * Remove any address tag from @x. This is explicitly related to the + * linux syscall TIF_TAGGED_ADDR setting, not TBI in general. + * + * There should be a better place to put this, but we need this in + * include/exec/cpu_ldst.h, and not some place linux-user specific. + */ +static inline target_ulong cpu_untagged_addr(CPUState *cs, target_ulong x) +{ + ARMCPU *cpu =3D ARM_CPU(cs); + if (cpu->env.tagged_addr_enable) { + /* + * TBI is enabled for userspace but not kernelspace addresses. + * Only clear the tag if bit 55 is clear. + */ + x &=3D sextract64(x, 0, 56); + } + return x; +} +#endif + /* * Naming convention for isar_feature functions: * Functions which test 32-bit ID registers should have _aa32_ in diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 24fc1daf02..ba4da7f8a6 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -10981,6 +10981,30 @@ static abi_long do_syscall1(void *cpu_env, int num= , abi_long arg1, } } return -TARGET_EINVAL; + case TARGET_PR_SET_TAGGED_ADDR_CTRL: + { + abi_ulong valid_mask =3D TARGET_PR_TAGGED_ADDR_ENABLE; + CPUARMState *env =3D cpu_env; + + if ((arg2 & ~valid_mask) || arg3 || arg4 || arg5) { + return -TARGET_EINVAL; + } + env->tagged_addr_enable =3D arg2 & TARGET_PR_TAGGED_ADDR_E= NABLE; + return 0; + } + case TARGET_PR_GET_TAGGED_ADDR_CTRL: + { + abi_long ret =3D 0; + CPUARMState *env =3D cpu_env; + + if (arg2 || arg3 || arg4 || arg5) { + return -TARGET_EINVAL; + } + if (env->tagged_addr_enable) { + ret |=3D TARGET_PR_TAGGED_ADDR_ENABLE; + } + return ret; + } #endif /* AARCH64 */ case PR_GET_SECCOMP: case PR_SET_SECCOMP: --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381275; cv=none; d=zohomail.com; s=zohoarc; b=nBpDVCWKv8W1AlT5ViBnPXYvMUEWMn209+vZg1qB9UyGK54k/9g7Yo0nz1fRCsCQwzyKsI93IJGNRycHSglewd5fXfUFmlN4803XS3w/WOH4bsHaCiPc1TmCXBQPVu8wwbmGAhgPvzO23Ds/Ho/Brmq5piarzUk2cNyXpyStlTw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381275; h=Content-Transfer-Encoding:Cc: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=SkjTW1pp/pIbKp346VjcRf6VolQKu6II4bAjUu2eCt8=; b=KOXNMcEPpVEW3aqV38C3FhZFzXbySGm6XFAVhzwWxkiVLMwbxggKKW96S7IEt12KzMo+vCEhqhG732b3pjrYz3A+Udsd97CilKntg9OdnWHpm7HnECKNdQR/+MfKpN/3SHZfouxOAB+TPHDiQD7PteRlEca3nKI81USeBe7uUNw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612381275109192.51725370695544; Wed, 3 Feb 2021 11:41:15 -0800 (PST) Received: from localhost ([::1]:48722 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7O1Z-0007Gw-U2 for importer@patchew.org; Wed, 03 Feb 2021 14:41:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP1-0007fm-U1 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:23 -0500 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:39939) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001nK-Kg for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:23 -0500 Received: by mail-pj1-x1030.google.com with SMTP id z9so235321pjl.5 for ; Wed, 03 Feb 2021 11:00:58 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SkjTW1pp/pIbKp346VjcRf6VolQKu6II4bAjUu2eCt8=; b=qFeHPRMxlcpT2KlB//VFyuTtcEgqAHIobWVCrMJdmQq2HDeTC617JLZ9l2vSzeoFCl w0A+cK8PSzQZ7ZLKtDyA5dC/4wiOE0ryyisIsANqPshC038nXqSJA6eIXPatWCRp0N3Q 1qBVa5JzuxynuKAcQG7pKYXk7Q2VDFQt1HkdxCBlxpuQyPScd+3PTnN42Si8AiIHN+1Q 9ZDnAfICvByJLxv0qLAwd7sprnM4ejiXkZC1eJD72LrhLOqjgV7avOWiV8xVQ5ENMqJC W1kxjiw7Rq/waknV8pF5tWpPugn+Vkp1V1q+JXQnftzAqOl7hKvPPtCEBOIN8BHKYZa5 uryg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SkjTW1pp/pIbKp346VjcRf6VolQKu6II4bAjUu2eCt8=; b=UnsJB9ChMvh16Q/E9a0DD+nocF54gtwEOZmKfc8CzRbNYBbiJcM+bfq3cR9PId5f9R v1eOGySc0Bd9obGZ1M8x6JytrMHAk7eWa7xxe6ueLuXoo1Sjq52sYMk1v/LNWHXbb1z/ G/QuVHoH4PCqS4ml1aYB8d/ZwF2bXyAfGFa2n4PU4F7Mnhmu3LehsjXWZuxvMbLdFI5B aSk+XduPaNICAsjDKN8aYYhaHKRlzeqz2vLFz3PrB3fqBl7MHWR0Hwx9JU5DfiTelcNR pY45lk0UFYF8v1cs8ukYyMsUSRpDg92NE/JRBobdT20+6gq+x8qjpwdk2i6AaIB5J/JC qkWQ== X-Gm-Message-State: AOAM5305g0sUwJMFF0r57ioimVaVmTGed3R+9rGi+vLjVEvUyvpxhEgn LAvijcPuYaM3U/PBQ4woEJviFo4y3Yc3PXUG X-Google-Smtp-Source: ABdhPJyEcSOnVTvu8BHHzHnl4d/5AN51M5DZjRQ6vN6wp2jVxjo//gA/tI5mnV4BWfJsvhEbkfyWKQ== X-Received: by 2002:a17:90b:350b:: with SMTP id ls11mr4405302pjb.166.1612378857424; Wed, 03 Feb 2021 11:00:57 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 21/31] target/arm: Improve gen_top_byte_ignore Date: Wed, 3 Feb 2021 09:00:00 -1000 Message-Id: <20210203190010.759771-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use simple arithmetic instead of a conditional move when tbi0 !=3D tbi1. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index ffc060e5d7..3ec0dc17d8 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -183,17 +183,20 @@ static void gen_top_byte_ignore(DisasContext *s, TCGv= _i64 dst, /* Sign-extend from bit 55. */ tcg_gen_sextract_i64(dst, src, 0, 56); =20 - if (tbi !=3D 3) { - TCGv_i64 tcg_zero =3D tcg_const_i64(0); - - /* - * The two TBI bits differ. - * If tbi0, then !tbi1: only use the extension if positive. - * if !tbi0, then tbi1: only use the extension if negative. - */ - tcg_gen_movcond_i64(tbi =3D=3D 1 ? TCG_COND_GE : TCG_COND_LT, - dst, dst, tcg_zero, dst, src); - tcg_temp_free_i64(tcg_zero); + switch (tbi) { + case 1: + /* tbi0 but !tbi1: only use the extension if positive */ + tcg_gen_and_i64(dst, dst, src); + break; + case 2: + /* !tbi0 but tbi1: only use the extension if negative */ + tcg_gen_or_i64(dst, dst, src); + break; + case 3: + /* tbi0 and tbi1: always use the extension */ + break; + default: + g_assert_not_reached(); } } } --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381450; cv=none; d=zohomail.com; s=zohoarc; b=EhF2KUYdckW8FsJhkU2yy2+twWr4S9+XthQWyMr0hfoIQBUpfzQJQHoPcjZKlRHMzuC1qF2200OD7sMmb77S5KtwQN4+Hg7hrwaSRsfYiUzyfpjGgYTpucwpJY6vznvveejHREAjGGjGkEsTCBmzKSoV6+CXmwNycsHWejq4ocY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381450; h=Content-Transfer-Encoding:Cc: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=MTkuzyqIbL72JEm6HgyCzOP+l6RLV374RyEwxbETzcY=; b=XlPSY8JWM5xE+IxHIZj6PH/004dfA9kdwIJxbYxeKYj0ilP8umN739CXpAGOXM7mkk+sblqkahG/E2IxWQlNhEJ6pBvnLYhENSRAbCDN1/5hzsYtiCzmQ7/Lmb2JFF9whVGIVoR59hjs53M+531uwZvzzYzvRE1fl73LpA6ke1Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612381450035244.89040278256107; Wed, 3 Feb 2021 11:44:10 -0800 (PST) Received: from localhost ([::1]:57810 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7O4P-0002fO-0m for importer@patchew.org; Wed, 03 Feb 2021 14:44:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP2-0007g7-2g for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:24 -0500 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]:46858) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001nX-MP for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:23 -0500 Received: by mail-pf1-x42e.google.com with SMTP id f63so400370pfa.13 for ; Wed, 03 Feb 2021 11:01:00 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:00:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MTkuzyqIbL72JEm6HgyCzOP+l6RLV374RyEwxbETzcY=; b=qNpcJNdx+241EHVCrO0IuqMchkMBMsj2pGp8l4+aKO0Dk48hHFWa39Bm8xkBE5Rwcx YHw8M8ZsU6gV/fsGN/NXOZWJuuvWTP9RL19kusgM+FpG+GqwjGGXMzgeSy2EzEyryyov BdNLWfZC6WaoM80FXXTERxHmmu6fJ5GncSGz/7sWIQiYYmpyEMRC+tUk0lqTHx8j5n56 dXY3M4rmkMimNJOYJLe4mlNw7V7SgrwN+0LDd8TGg37qehVcQ2zkxXc2B5cZCyFP19GI n8PQwIDcGl3wTKBJNSTDhmYQN4WjUYjNUycdMxbHUGsbNRzSs+tb2xPFyYAoQ+s4ZEAS Xq0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MTkuzyqIbL72JEm6HgyCzOP+l6RLV374RyEwxbETzcY=; b=qHPX6UzIR3lDDnIqiCNZ9nPFsolku6NOPxTvGEAwyLkYeHQnxvMxX3w50Ql9chEI6s oNKJJvY9JghSVZGuLwBhmLjNKIluk5F9ij0/BDKRtuOiDezSGX3/KcCAt7eBs1V+ny01 1RSQf7GssQHCgo8LyK0/rF0fKtzVBI8VtY4W0gcHQMukghpYxc9Z7lLX3gPPBmLNVtwG tijonj6WtqTkrvhby3oRFVYPEw0jjyLv+EB/AczVQHrwfYCAWIYqSAfmkHRXenc2oXFc Cywf6i2riBEJQCy3lJfy8+0tLhX7oYLVbmkjUcxZT7LT+DQZj07OGWG5RXWEpdk0rukd XePw== X-Gm-Message-State: AOAM533WfVMAMQO0RucvgcDzjYmPiepDzZb5g3S6a0gi+Lmo0zSiDcG8 3Mm9PPjovYmUZnIyCLKcMmOXTG6yCJwBGt6+ X-Google-Smtp-Source: ABdhPJzuyuN/7gFJUcnI9texKSV9KpwJHaxiA5BeTr0bOSjHQlbRh8nVxwCAdb2LstsulVykFY9ATA== X-Received: by 2002:a62:cd86:0:b029:1c7:f5f6:787f with SMTP id o128-20020a62cd860000b02901c7f5f6787fmr4444566pfg.62.1612378859308; Wed, 03 Feb 2021 11:00:59 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 22/31] target/arm: Use the proper TBI settings for linux-user Date: Wed, 3 Feb 2021 09:00:01 -1000 Message-Id: <20210203190010.759771-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::42e; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" We were fudging TBI1 enabled to speed up the generated code. Now that we've improved the code generation, remove this. Also, tidy the comment to reflect the current code. The pauth test was testing a kernel address (-1) and making incorrect assumptions about TBI1; stick to userland addresses. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/internals.h | 4 ++-- target/arm/cpu.c | 10 +++------- tests/tcg/aarch64/pauth-2.c | 1 - 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index 853fa88fd6..6efe0c303e 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1413,9 +1413,9 @@ static inline bool tcma_check(uint32_t desc, int bit5= 5, int ptr_tag) */ static inline uint64_t useronly_clean_ptr(uint64_t ptr) { - /* TBI is known to be enabled. */ #ifdef CONFIG_USER_ONLY - ptr =3D sextract64(ptr, 0, 56); + /* TBI0 is known to be enabled, while TBI1 is disabled. */ + ptr &=3D sextract64(ptr, 0, 56); #endif return ptr; } diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 40142ac141..db81a12418 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -200,14 +200,10 @@ static void arm_cpu_reset(DeviceState *dev) env->vfp.zcr_el[1] =3D MIN(cpu->sve_max_vq - 1, 3); } /* - * Enable TBI0 and TBI1. While the real kernel only enables TBI0, - * turning on both here will produce smaller code and otherwise - * make no difference to the user-level emulation. - * - * In sve_probe_page, we assume that this is set. - * Do not modify this without other changes. + * Enable TBI0 but not TBI1. + * Note that this must match useronly_clean_ptr. */ - env->cp15.tcr_el[1].raw_tcr =3D (3ULL << 37); + env->cp15.tcr_el[1].raw_tcr =3D (1ULL << 37); #else /* Reset into the highest available EL */ if (arm_feature(env, ARM_FEATURE_EL3)) { diff --git a/tests/tcg/aarch64/pauth-2.c b/tests/tcg/aarch64/pauth-2.c index 9bba0beb63..978652ede3 100644 --- a/tests/tcg/aarch64/pauth-2.c +++ b/tests/tcg/aarch64/pauth-2.c @@ -53,7 +53,6 @@ void do_test(uint64_t value) int main() { do_test(0); - do_test(-1); do_test(0xda004acedeadbeefull); return 0; } --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380783; cv=none; d=zohomail.com; s=zohoarc; b=LnvplU7lt8EYjqc3Flh6A88ISc8lg6025NMO40Buk1Q4ZwXtTOAp7dmJSgmXfLqk6ztyIW7WKhPwwxvR7DwCUvu8y8536deH5bdUBVprWbEibSjSXLkB/SoJJhLZZZ5qZXaA8UiQ6ypzjCrSgY07uYfZHobw8scu0fSJUJ/uUP0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380783; h=Content-Transfer-Encoding:Cc: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=ec4hlo+gP8szg6yNPIbUNNDP2CtNSFlAatcye+QT23Y=; b=PX+llCY/Fmo/4iPC3diBjHXX+8JOxOrl75NG3XhBYaqOGtPxnsrTvIKdMbp17QPwu0I0zhKF4i+gR8Hvm4Ev8CvY1+MdvSmuIZCDFPuVQQS6Qb+y8ZkIJAzJ7pzX7ypnXbFz//s5pFj/80CdDzLW/teFEYxZLoGNULzDYdaA8+c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380783550802.6120685206153; Wed, 3 Feb 2021 11:33:03 -0800 (PST) Received: from localhost ([::1]:60202 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nte-0008W0-9B for importer@patchew.org; Wed, 03 Feb 2021 14:33:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NOz-0007bG-98 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:21 -0500 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:34668) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001oh-Hg for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:21 -0500 Received: by mail-pj1-x102d.google.com with SMTP id my11so3796325pjb.1 for ; Wed, 03 Feb 2021 11:01:02 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.00.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ec4hlo+gP8szg6yNPIbUNNDP2CtNSFlAatcye+QT23Y=; b=ZtbjJpXpy57+a65uZ9LnPatVYCxemrZm2Ci9dJNIT9Sn+5ZVzgefWAiCfR2UL37szG vvPbGDT2lJOv5cfqJ9DjFdljVQ7Q9NraHBS8Werf8IwBMZ4dtNcls+ku5RPtal9AMyDL W0OQgnkBzi1IMNa7v6rrBEEdMRbzJcbExy72i5kVVGi0QcMwHIBWy4wR0Ie0KEnyx/2S H0KO04s/kqn3WhDQjvipnVZhCXcdokNcGal/IJY8jZ7VW6pynrIJtiO9VyTg/1RHr21m 5THzf8qr8JGpKstacQQqEBNJCI34CCa46s8UxuWytK7AHVH01eH5I+mlVNHrnX4H6EcF XBDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ec4hlo+gP8szg6yNPIbUNNDP2CtNSFlAatcye+QT23Y=; b=QDUdgXA4sYB+a02gQlJoHaZo2QB0rB4j/ILIOPQoN8FvuOHRAQzDlWpkka/M7KVIxx 46t9QR2dzqEaMfSdJYIWz4192FcjlS5oDY42q+bjU95onHf7DfeYAHjs4cLFS07wgyOG TAmGTTKftSJszrRqYWzV93F6hdyH5UfhAeDlabAKGoLI1rjIHuvijV4E6EUgzxzyvQUC YTku1YTzQzJHgL7nomBkhQ3TmB+gBCzEdG1FvWnA/yRtp6ASiawrbOnBTAa3VOtyvcVf A9YUNpMBMkvm7Cf8KImctNx3aLoMoUJ4yHyyZIChAYTJSB9gaPIlUKfTj3+PfUFYeosA qbeg== X-Gm-Message-State: AOAM530Xjt3fYrGOse2yJO4aXYGQW+zI97EMZZ3nN7685DCLkypnlHnB mwvPBJuJpC/dhdPZXC64ArdwPMcibYDsqST8 X-Google-Smtp-Source: ABdhPJx4HBxjTlu0+UNYbuNcZ31HaXrpmpTrBiMKoLZiuBwL6gO4akxAqFbhXz/rd7cu47S3IUxAzw== X-Received: by 2002:a17:90a:7143:: with SMTP id g3mr4574392pjs.196.1612378861314; Wed, 03 Feb 2021 11:01:01 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 23/31] linux-user/aarch64: Implement PR_MTE_TCF and PR_MTE_TAG Date: Wed, 3 Feb 2021 09:00:02 -1000 Message-Id: <20210203190010.759771-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These prctl fields are required for the function of MTE. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/aarch64/target_syscall.h | 9 ++++++ linux-user/syscall.c | 43 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/linux-user/aarch64/target_syscall.h b/linux-user/aarch64/targe= t_syscall.h index 820601dfcc..76f6c3391d 100644 --- a/linux-user/aarch64/target_syscall.h +++ b/linux-user/aarch64/target_syscall.h @@ -33,5 +33,14 @@ struct target_pt_regs { #define TARGET_PR_SET_TAGGED_ADDR_CTRL 55 #define TARGET_PR_GET_TAGGED_ADDR_CTRL 56 # define TARGET_PR_TAGGED_ADDR_ENABLE (1UL << 0) +/* MTE tag check fault modes */ +# define TARGET_PR_MTE_TCF_SHIFT 1 +# define TARGET_PR_MTE_TCF_NONE (0UL << TARGET_PR_MTE_TCF_SHIFT) +# define TARGET_PR_MTE_TCF_SYNC (1UL << TARGET_PR_MTE_TCF_SHIFT) +# define TARGET_PR_MTE_TCF_ASYNC (2UL << TARGET_PR_MTE_TCF_SHIFT) +# define TARGET_PR_MTE_TCF_MASK (3UL << TARGET_PR_MTE_TCF_SHIFT) +/* MTE tag inclusion mask */ +# define TARGET_PR_MTE_TAG_SHIFT 3 +# define TARGET_PR_MTE_TAG_MASK (0xffffUL << TARGET_PR_MTE_TAG_SHIF= T) =20 #endif /* AARCH64_TARGET_SYSCALL_H */ diff --git a/linux-user/syscall.c b/linux-user/syscall.c index ba4da7f8a6..61bf6148e7 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -10985,17 +10985,53 @@ static abi_long do_syscall1(void *cpu_env, int nu= m, abi_long arg1, { abi_ulong valid_mask =3D TARGET_PR_TAGGED_ADDR_ENABLE; CPUARMState *env =3D cpu_env; + ARMCPU *cpu =3D env_archcpu(env); + + if (cpu_isar_feature(aa64_mte, cpu)) { + valid_mask |=3D TARGET_PR_MTE_TCF_MASK; + valid_mask |=3D TARGET_PR_MTE_TAG_MASK; + } =20 if ((arg2 & ~valid_mask) || arg3 || arg4 || arg5) { return -TARGET_EINVAL; } env->tagged_addr_enable =3D arg2 & TARGET_PR_TAGGED_ADDR_E= NABLE; + + if (cpu_isar_feature(aa64_mte, cpu)) { + switch (arg2 & TARGET_PR_MTE_TCF_MASK) { + case TARGET_PR_MTE_TCF_NONE: + case TARGET_PR_MTE_TCF_SYNC: + case TARGET_PR_MTE_TCF_ASYNC: + break; + default: + return -EINVAL; + } + + /* + * Write PR_MTE_TCF to SCTLR_EL1[TCF0]. + * Note that the syscall values are consistent with hw. + */ + env->cp15.sctlr_el[1] =3D + deposit64(env->cp15.sctlr_el[1], 38, 2, + arg2 >> TARGET_PR_MTE_TCF_SHIFT); + + /* + * Write PR_MTE_TAG to GCR_EL1[Exclude]. + * Note that the syscall uses an include mask, + * and hardware uses an exclude mask -- invert. + */ + env->cp15.gcr_el1 =3D + deposit64(env->cp15.gcr_el1, 0, 16, + ~arg2 >> TARGET_PR_MTE_TAG_SHIFT); + arm_rebuild_hflags(env); + } return 0; } case TARGET_PR_GET_TAGGED_ADDR_CTRL: { abi_long ret =3D 0; CPUARMState *env =3D cpu_env; + ARMCPU *cpu =3D env_archcpu(env); =20 if (arg2 || arg3 || arg4 || arg5) { return -TARGET_EINVAL; @@ -11003,6 +11039,13 @@ static abi_long do_syscall1(void *cpu_env, int num= , abi_long arg1, if (env->tagged_addr_enable) { ret |=3D TARGET_PR_TAGGED_ADDR_ENABLE; } + if (cpu_isar_feature(aa64_mte, cpu)) { + /* See above. */ + ret |=3D (extract64(env->cp15.sctlr_el[1], 38, 2) + << TARGET_PR_MTE_TCF_SHIFT); + ret =3D deposit64(ret, TARGET_PR_MTE_TAG_SHIFT, 16, + ~env->cp15.gcr_el1); + } return ret; } #endif /* AARCH64 */ --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380294; cv=none; d=zohomail.com; s=zohoarc; b=LcywBGS1hDIvTNIyshM1ZtthAmNIino0A3dMfj9Dua7wW1IanZSvebM+fruE1ZOLnjivQ7xui9URRVUC5WkI+arpqO75OJqPX4jewRvZpoOq9RiH8yc60lR1yy9BU0TrKZ0DaR9MAV8l6i+fx9+pSn92EhutvBubF80mlcjgiV8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380294; h=Content-Transfer-Encoding:Cc: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=fCxV49bfxaBtv2xlDg0+NI6CzMz9AR3avdjaaz44F+U=; b=jalm78B2LYwd8CiE1/+wZq8eKPAsIEZw/GK1E8YZc+KBzsfmblIisT7A+TM5u37al8Qu9e+72wNyKblC4ytxZ5jOza/gdiFpwTb6yuXU6jdGj2e7IM7gWdO4/6zKfCg6HOf4tmFH7ihP2mdxOqY6zXjRhpvOJ18FTVbpEFWaAu0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380294600924.2383516879934; Wed, 3 Feb 2021 11:24:54 -0800 (PST) Received: from localhost ([::1]:40346 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nll-0008Sx-Am for importer@patchew.org; Wed, 03 Feb 2021 14:24:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38302) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP0-0007dZ-LG for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:22 -0500 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:41306) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001ow-Jg for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:22 -0500 Received: by mail-pf1-x435.google.com with SMTP id q20so416341pfu.8 for ; Wed, 03 Feb 2021 11:01:03 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fCxV49bfxaBtv2xlDg0+NI6CzMz9AR3avdjaaz44F+U=; b=U8fptPED9jlxWohXqurZFrvG5APWE7cs6Y28DUfW+HM8yfX4a12H42IgMxWmwWk7cU IP/QmAIr/rDV1c47ZRdeevvKyqJB428i37QqfMY8hwY37yT/0DUzkcwag0h7tEysqQ6f lDFwHDXl2mFeGBMW7OiEfwpPej1BNqN1uf26XDvpy73TIPLaO0z0MY1EL9RpOEDPerZk TA+rV0GosDALoYUGPPSd/eVNMHbSFTERhzFqg0x7QCaohzjbdPjkFWGpNizyeYpWcZl5 N1XyQG00lWq/VY7ucp0rzPEUPGg6Mv8lvZDfXuRKGR+wV15eSp6YuteVVi3MiFiqJWvW 9KKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fCxV49bfxaBtv2xlDg0+NI6CzMz9AR3avdjaaz44F+U=; b=KUwoM0mYhS/H0lhNdmvx1y7dbg1Tm1SF38w8ky5a5jRgU6915Kxn5MVzzqofwC48sA 50bxdKoBsXykPLkG72mKoTdDZuLjGD4LrJq3Swr8o72ldOFeSXGYbW3jvxGBFqLqWNT2 jGFmd+lHVlvsrOe+UDqybnpalABtzTLtRoU2O3098y4jljL2iI6HtEhN5CxNgWf2IaQC ELKe/jIEco0b4DhE6gukDP/FLCKKf9ah7o01LWVc9fbo1Kb2eN1myXXidSKRzulWbLJI +Ui2l9SxC4Ey7i6Ijuu1F90G5BeQLAbMlMAYv4cLMhN/kTa5G4aAHvhdedUJdl0lujqg lJ2g== X-Gm-Message-State: AOAM533T51fOoTAiXzgHb3vWhXZ/7umHfpyCelNC/0YYh5R+0CS4W8Hg el5t8kvtRLWiOt9sLaGvw+KL3G/ZxnrrTweX X-Google-Smtp-Source: ABdhPJxivtT814RuFJC0nM447/SDQPAY4MVBwGcvIW0BDE31N4WpDG3egR1u7zJJJM1jRJQ5u0rs+A== X-Received: by 2002:a63:c941:: with SMTP id y1mr5106047pgg.313.1612378863075; Wed, 03 Feb 2021 11:01:03 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 24/31] linux-user/aarch64: Implement PROT_MTE Date: Wed, 3 Feb 2021 09:00:03 -1000 Message-Id: <20210203190010.759771-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Remember the PROT_MTE bit as PAGE_MTE/PAGE_TARGET_2. Otherwise this does not yet have effect. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- include/exec/cpu-all.h | 1 + linux-user/syscall_defs.h | 1 + target/arm/cpu.h | 1 + linux-user/mmap.c | 22 ++++++++++++++-------- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index c52180e8e6..b2a72f70ec 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -284,6 +284,7 @@ extern intptr_t qemu_host_page_mask; #endif /* Target-specific bits that will be used via page_get_flags(). */ #define PAGE_TARGET_1 0x0080 +#define PAGE_TARGET_2 0x0200 =20 #if defined(CONFIG_USER_ONLY) void page_dump(FILE *f); diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index f98c1c1c8d..46a960fccb 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -1311,6 +1311,7 @@ struct target_winsize { =20 #ifdef TARGET_AARCH64 #define TARGET_PROT_BTI 0x10 +#define TARGET_PROT_MTE 0x20 #endif =20 /* Common */ diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 558ad1466b..e3e61ce7ab 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3606,6 +3606,7 @@ static inline MemTxAttrs *typecheck_memtxattrs(MemTxA= ttrs *x) * AArch64 usage of the PAGE_TARGET_* bits for linux-user. */ #define PAGE_BTI PAGE_TARGET_1 +#define PAGE_MTE PAGE_TARGET_2 =20 #ifdef TARGET_TAGGED_ADDRESSES /** diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 6690384752..85e218ab1d 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -84,18 +84,24 @@ static int validate_prot_to_pageflags(int *host_prot, i= nt prot) | (prot & PROT_EXEC ? PROT_READ : 0); =20 #ifdef TARGET_AARCH64 - /* - * The PROT_BTI bit is only accepted if the cpu supports the feature. - * Since this is the unusual case, don't bother checking unless - * the bit has been requested. If set and valid, record the bit - * within QEMU's page_flags. - */ - if (prot & TARGET_PROT_BTI) { + { ARMCPU *cpu =3D ARM_CPU(thread_cpu); - if (cpu_isar_feature(aa64_bti, cpu)) { + + /* + * The PROT_BTI bit is only accepted if the cpu supports the featu= re. + * Since this is the unusual case, don't bother checking unless + * the bit has been requested. If set and valid, record the bit + * within QEMU's page_flags. + */ + if ((prot & TARGET_PROT_BTI) && cpu_isar_feature(aa64_bti, cpu)) { valid |=3D TARGET_PROT_BTI; page_flags |=3D PAGE_BTI; } + /* Similarly for the PROT_MTE bit. */ + if ((prot & TARGET_PROT_MTE) && cpu_isar_feature(aa64_mte, cpu)) { + valid |=3D TARGET_PROT_MTE; + page_flags |=3D PAGE_MTE; + } } #endif =20 --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380487; cv=none; d=zohomail.com; s=zohoarc; b=KKe7rjZv/gjEbxWGkPBOuVkdhoj8bAljvRN9me9RTDx53YW/Y1GnQA67AW7wAmaU+iBDlTEpBQx+0GpJZjJ+HkqQB9g2kGWTDWA4JrBHF/DQYuidG4V1GVTX/c8zidqtbygqrkdlf6eHbh1i3bh4wCUXCGIXv/aDV/gzRUoge7o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380487; h=Content-Transfer-Encoding:Cc: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=cVSNFkptvni25O0i4IF//ufp+gAsyF6zqVY9SYIUSCk=; b=bdGrOGiaiT0ccTbU+yqFkrOz1D/82sWehbUjpbM5rAcUiUREua+tjH9KDd9N00i8b81GheoNvrGXKpGKV8JkaS2Z+0F9hH5kEB0xa53CBnKrii8VZqFkaae2qN4CVkGQnFld7iRZMHVkoWiTZI+sOCIMHOIVdiajZ+MT4OIVgac= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380487112703.4167859264259; Wed, 3 Feb 2021 11:28:07 -0800 (PST) Received: from localhost ([::1]:49278 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7Nor-0003ke-VZ for importer@patchew.org; Wed, 03 Feb 2021 14:28:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP3-0007jw-Pv for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:25 -0500 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:46550) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001p8-Mk for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:25 -0500 Received: by mail-pg1-x536.google.com with SMTP id r38so355030pgk.13 for ; Wed, 03 Feb 2021 11:01:05 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cVSNFkptvni25O0i4IF//ufp+gAsyF6zqVY9SYIUSCk=; b=epfrDw13tCwm6W700sAWJkkIHdxUF6hBbGBCxvApI4OJBAdzk8kQsVDnj5dGBWjeUT wRLn1+6aoD/0SHTbgDBPRrRXDq3k8fedhhdHLtXObEdwpvKVU/CYI5KgEx3RMt2uf/U3 WPqTyJ8uiGmu1Y2Bmcvw6ohLp8GsrXTDKnvD6BzB251mP1/6xJmYR67VRQLdQtZ+ApIk 2sp8iQjdh/RmThehooVtcKATdimvLZ2VstZHWeY6cXBqlGi43PpyEpfRykVO4UpJlvfi VTg2ngRUqbW7IhbR1IaH34GJEhJKjMmfOvy9pdDp5lcyqR0vQuHDA42pMgyXL+0LT9QP J9bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cVSNFkptvni25O0i4IF//ufp+gAsyF6zqVY9SYIUSCk=; b=F7Jdpbm2WLwiLZmSdUvJ8hfrS9leXVYwFDaMlDfZuPhVVoAUCleMw5GmrJ0nGuZcXs 0NCI+iza6K2qxowQ77LZMRcMurpHRNpjFmq2/A3OE8obCu76apf21PJru9ILBMbS0BEd Hd2Vi8394J8BZmdVLT+2R3DSe2cmWcH0FXUCCOLmAEN6WBMOEOSBFNZOOk9bwSG8Bg5c JMNh+w8Arr7f2WWfp9CQwnX/ixTh6ujVnDaSvuEA+M4YI7jzScYaY5jP7okXY8X6tOCa L1nnbg+L1mN20J35n+2bHwFzKY9rHlpQzfaIi/8yW71WejORVIX2Y3jyVkc7SRDV+8BY 5RMw== X-Gm-Message-State: AOAM533isty0+409wOZGe3WNfGvRKlhtxMwZGsjASrNBBJl1ACWcruu0 0r5IxgFaFjhIIeYsC5nBActdAONU00ZXggY+ X-Google-Smtp-Source: ABdhPJychszAwVzwTaJ6GgQ6V+PnolkX27JRvitMpQwabaiTjhuGnTytYkWZWbAzHkVI4GeKfxA+bw== X-Received: by 2002:a62:8244:0:b029:1cf:e4ac:6cde with SMTP id w65-20020a6282440000b02901cfe4ac6cdemr4176839pfd.27.1612378864727; Wed, 03 Feb 2021 11:01:04 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 25/31] target/arm: Split out syndrome.h from internals.h Date: Wed, 3 Feb 2021 09:00:04 -1000 Message-Id: <20210203190010.759771-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Move everything related to syndromes to a new file, which can be shared with linux-user. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/internals.h | 245 +----------------------------------- target/arm/syndrome.h | 273 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 274 insertions(+), 244 deletions(-) create mode 100644 target/arm/syndrome.h diff --git a/target/arm/internals.h b/target/arm/internals.h index 6efe0c303e..5a4a742eba 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -26,6 +26,7 @@ #define TARGET_ARM_INTERNALS_H =20 #include "hw/registerfields.h" +#include "syndrome.h" =20 /* register banks for CPU modes */ #define BANK_USRSYS 0 @@ -256,250 +257,6 @@ static inline bool extended_addresses_enabled(CPUARMS= tate *env) (arm_feature(env, ARM_FEATURE_LPAE) && (tcr->raw_tcr & TTBCR_EA= E)); } =20 -/* Valid Syndrome Register EC field values */ -enum arm_exception_class { - EC_UNCATEGORIZED =3D 0x00, - EC_WFX_TRAP =3D 0x01, - EC_CP15RTTRAP =3D 0x03, - EC_CP15RRTTRAP =3D 0x04, - EC_CP14RTTRAP =3D 0x05, - EC_CP14DTTRAP =3D 0x06, - EC_ADVSIMDFPACCESSTRAP =3D 0x07, - EC_FPIDTRAP =3D 0x08, - EC_PACTRAP =3D 0x09, - EC_CP14RRTTRAP =3D 0x0c, - EC_BTITRAP =3D 0x0d, - EC_ILLEGALSTATE =3D 0x0e, - EC_AA32_SVC =3D 0x11, - EC_AA32_HVC =3D 0x12, - EC_AA32_SMC =3D 0x13, - EC_AA64_SVC =3D 0x15, - EC_AA64_HVC =3D 0x16, - EC_AA64_SMC =3D 0x17, - EC_SYSTEMREGISTERTRAP =3D 0x18, - EC_SVEACCESSTRAP =3D 0x19, - EC_INSNABORT =3D 0x20, - EC_INSNABORT_SAME_EL =3D 0x21, - EC_PCALIGNMENT =3D 0x22, - EC_DATAABORT =3D 0x24, - EC_DATAABORT_SAME_EL =3D 0x25, - EC_SPALIGNMENT =3D 0x26, - EC_AA32_FPTRAP =3D 0x28, - EC_AA64_FPTRAP =3D 0x2c, - EC_SERROR =3D 0x2f, - EC_BREAKPOINT =3D 0x30, - EC_BREAKPOINT_SAME_EL =3D 0x31, - EC_SOFTWARESTEP =3D 0x32, - EC_SOFTWARESTEP_SAME_EL =3D 0x33, - EC_WATCHPOINT =3D 0x34, - EC_WATCHPOINT_SAME_EL =3D 0x35, - EC_AA32_BKPT =3D 0x38, - EC_VECTORCATCH =3D 0x3a, - EC_AA64_BKPT =3D 0x3c, -}; - -#define ARM_EL_EC_SHIFT 26 -#define ARM_EL_IL_SHIFT 25 -#define ARM_EL_ISV_SHIFT 24 -#define ARM_EL_IL (1 << ARM_EL_IL_SHIFT) -#define ARM_EL_ISV (1 << ARM_EL_ISV_SHIFT) - -static inline uint32_t syn_get_ec(uint32_t syn) -{ - return syn >> ARM_EL_EC_SHIFT; -} - -/* Utility functions for constructing various kinds of syndrome value. - * Note that in general we follow the AArch64 syndrome values; in a - * few cases the value in HSR for exceptions taken to AArch32 Hyp - * mode differs slightly, and we fix this up when populating HSR in - * arm_cpu_do_interrupt_aarch32_hyp(). - * The exception is FP/SIMD access traps -- these report extra information - * when taking an exception to AArch32. For those we include the extra cop= roc - * and TA fields, and mask them out when taking the exception to AArch64. - */ -static inline uint32_t syn_uncategorized(void) -{ - return (EC_UNCATEGORIZED << ARM_EL_EC_SHIFT) | ARM_EL_IL; -} - -static inline uint32_t syn_aa64_svc(uint32_t imm16) -{ - return (EC_AA64_SVC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); -} - -static inline uint32_t syn_aa64_hvc(uint32_t imm16) -{ - return (EC_AA64_HVC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); -} - -static inline uint32_t syn_aa64_smc(uint32_t imm16) -{ - return (EC_AA64_SMC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); -} - -static inline uint32_t syn_aa32_svc(uint32_t imm16, bool is_16bit) -{ - return (EC_AA32_SVC << ARM_EL_EC_SHIFT) | (imm16 & 0xffff) - | (is_16bit ? 0 : ARM_EL_IL); -} - -static inline uint32_t syn_aa32_hvc(uint32_t imm16) -{ - return (EC_AA32_HVC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); -} - -static inline uint32_t syn_aa32_smc(void) -{ - return (EC_AA32_SMC << ARM_EL_EC_SHIFT) | ARM_EL_IL; -} - -static inline uint32_t syn_aa64_bkpt(uint32_t imm16) -{ - return (EC_AA64_BKPT << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff= ); -} - -static inline uint32_t syn_aa32_bkpt(uint32_t imm16, bool is_16bit) -{ - return (EC_AA32_BKPT << ARM_EL_EC_SHIFT) | (imm16 & 0xffff) - | (is_16bit ? 0 : ARM_EL_IL); -} - -static inline uint32_t syn_aa64_sysregtrap(int op0, int op1, int op2, - int crn, int crm, int rt, - int isread) -{ - return (EC_SYSTEMREGISTERTRAP << ARM_EL_EC_SHIFT) | ARM_EL_IL - | (op0 << 20) | (op2 << 17) | (op1 << 14) | (crn << 10) | (rt << 5) - | (crm << 1) | isread; -} - -static inline uint32_t syn_cp14_rt_trap(int cv, int cond, int opc1, int op= c2, - int crn, int crm, int rt, int isre= ad, - bool is_16bit) -{ - return (EC_CP14RTTRAP << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | (cv << 24) | (cond << 20) | (opc2 << 17) | (opc1 << 14) - | (crn << 10) | (rt << 5) | (crm << 1) | isread; -} - -static inline uint32_t syn_cp15_rt_trap(int cv, int cond, int opc1, int op= c2, - int crn, int crm, int rt, int isre= ad, - bool is_16bit) -{ - return (EC_CP15RTTRAP << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | (cv << 24) | (cond << 20) | (opc2 << 17) | (opc1 << 14) - | (crn << 10) | (rt << 5) | (crm << 1) | isread; -} - -static inline uint32_t syn_cp14_rrt_trap(int cv, int cond, int opc1, int c= rm, - int rt, int rt2, int isread, - bool is_16bit) -{ - return (EC_CP14RRTTRAP << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | (cv << 24) | (cond << 20) | (opc1 << 16) - | (rt2 << 10) | (rt << 5) | (crm << 1) | isread; -} - -static inline uint32_t syn_cp15_rrt_trap(int cv, int cond, int opc1, int c= rm, - int rt, int rt2, int isread, - bool is_16bit) -{ - return (EC_CP15RRTTRAP << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | (cv << 24) | (cond << 20) | (opc1 << 16) - | (rt2 << 10) | (rt << 5) | (crm << 1) | isread; -} - -static inline uint32_t syn_fp_access_trap(int cv, int cond, bool is_16bit) -{ - /* AArch32 FP trap or any AArch64 FP/SIMD trap: TA =3D=3D 0 coproc =3D= =3D 0xa */ - return (EC_ADVSIMDFPACCESSTRAP << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | (cv << 24) | (cond << 20) | 0xa; -} - -static inline uint32_t syn_simd_access_trap(int cv, int cond, bool is_16bi= t) -{ - /* AArch32 SIMD trap: TA =3D=3D 1 coproc =3D=3D 0 */ - return (EC_ADVSIMDFPACCESSTRAP << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | (cv << 24) | (cond << 20) | (1 << 5); -} - -static inline uint32_t syn_sve_access_trap(void) -{ - return EC_SVEACCESSTRAP << ARM_EL_EC_SHIFT; -} - -static inline uint32_t syn_pactrap(void) -{ - return EC_PACTRAP << ARM_EL_EC_SHIFT; -} - -static inline uint32_t syn_btitrap(int btype) -{ - return (EC_BTITRAP << ARM_EL_EC_SHIFT) | btype; -} - -static inline uint32_t syn_insn_abort(int same_el, int ea, int s1ptw, int = fsc) -{ - return (EC_INSNABORT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIFT) - | ARM_EL_IL | (ea << 9) | (s1ptw << 7) | fsc; -} - -static inline uint32_t syn_data_abort_no_iss(int same_el, int fnv, - int ea, int cm, int s1ptw, - int wnr, int fsc) -{ - return (EC_DATAABORT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIFT) - | ARM_EL_IL - | (fnv << 10) | (ea << 9) | (cm << 8) | (s1ptw << 7) - | (wnr << 6) | fsc; -} - -static inline uint32_t syn_data_abort_with_iss(int same_el, - int sas, int sse, int srt, - int sf, int ar, - int ea, int cm, int s1ptw, - int wnr, int fsc, - bool is_16bit) -{ - return (EC_DATAABORT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIFT) - | (is_16bit ? 0 : ARM_EL_IL) - | ARM_EL_ISV | (sas << 22) | (sse << 21) | (srt << 16) - | (sf << 15) | (ar << 14) - | (ea << 9) | (cm << 8) | (s1ptw << 7) | (wnr << 6) | fsc; -} - -static inline uint32_t syn_swstep(int same_el, int isv, int ex) -{ - return (EC_SOFTWARESTEP << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SH= IFT) - | ARM_EL_IL | (isv << 24) | (ex << 6) | 0x22; -} - -static inline uint32_t syn_watchpoint(int same_el, int cm, int wnr) -{ - return (EC_WATCHPOINT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIF= T) - | ARM_EL_IL | (cm << 8) | (wnr << 6) | 0x22; -} - -static inline uint32_t syn_breakpoint(int same_el) -{ - return (EC_BREAKPOINT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIF= T) - | ARM_EL_IL | 0x22; -} - -static inline uint32_t syn_wfx(int cv, int cond, int ti, bool is_16bit) -{ - return (EC_WFX_TRAP << ARM_EL_EC_SHIFT) | - (is_16bit ? 0 : (1 << ARM_EL_IL_SHIFT)) | - (cv << 24) | (cond << 20) | ti; -} - /* Update a QEMU watchpoint based on the information the guest has set in = the * DBGWCR_EL1 and DBGWVR_EL1 registers. */ diff --git a/target/arm/syndrome.h b/target/arm/syndrome.h new file mode 100644 index 0000000000..39a31260f2 --- /dev/null +++ b/target/arm/syndrome.h @@ -0,0 +1,273 @@ +/* + * QEMU ARM CPU -- syndrome functions and types + * + * Copyright (c) 2014 Linaro Ltd + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see + * + * + * This header defines functions, types, etc which need to be shared + * between different source files within target/arm/ but which are + * private to it and not required by the rest of QEMU. + */ + +#ifndef TARGET_ARM_SYNDROME_H +#define TARGET_ARM_SYNDROME_H + +/* Valid Syndrome Register EC field values */ +enum arm_exception_class { + EC_UNCATEGORIZED =3D 0x00, + EC_WFX_TRAP =3D 0x01, + EC_CP15RTTRAP =3D 0x03, + EC_CP15RRTTRAP =3D 0x04, + EC_CP14RTTRAP =3D 0x05, + EC_CP14DTTRAP =3D 0x06, + EC_ADVSIMDFPACCESSTRAP =3D 0x07, + EC_FPIDTRAP =3D 0x08, + EC_PACTRAP =3D 0x09, + EC_CP14RRTTRAP =3D 0x0c, + EC_BTITRAP =3D 0x0d, + EC_ILLEGALSTATE =3D 0x0e, + EC_AA32_SVC =3D 0x11, + EC_AA32_HVC =3D 0x12, + EC_AA32_SMC =3D 0x13, + EC_AA64_SVC =3D 0x15, + EC_AA64_HVC =3D 0x16, + EC_AA64_SMC =3D 0x17, + EC_SYSTEMREGISTERTRAP =3D 0x18, + EC_SVEACCESSTRAP =3D 0x19, + EC_INSNABORT =3D 0x20, + EC_INSNABORT_SAME_EL =3D 0x21, + EC_PCALIGNMENT =3D 0x22, + EC_DATAABORT =3D 0x24, + EC_DATAABORT_SAME_EL =3D 0x25, + EC_SPALIGNMENT =3D 0x26, + EC_AA32_FPTRAP =3D 0x28, + EC_AA64_FPTRAP =3D 0x2c, + EC_SERROR =3D 0x2f, + EC_BREAKPOINT =3D 0x30, + EC_BREAKPOINT_SAME_EL =3D 0x31, + EC_SOFTWARESTEP =3D 0x32, + EC_SOFTWARESTEP_SAME_EL =3D 0x33, + EC_WATCHPOINT =3D 0x34, + EC_WATCHPOINT_SAME_EL =3D 0x35, + EC_AA32_BKPT =3D 0x38, + EC_VECTORCATCH =3D 0x3a, + EC_AA64_BKPT =3D 0x3c, +}; + +#define ARM_EL_EC_SHIFT 26 +#define ARM_EL_IL_SHIFT 25 +#define ARM_EL_ISV_SHIFT 24 +#define ARM_EL_IL (1 << ARM_EL_IL_SHIFT) +#define ARM_EL_ISV (1 << ARM_EL_ISV_SHIFT) + +static inline uint32_t syn_get_ec(uint32_t syn) +{ + return syn >> ARM_EL_EC_SHIFT; +} + +/* + * Utility functions for constructing various kinds of syndrome value. + * Note that in general we follow the AArch64 syndrome values; in a + * few cases the value in HSR for exceptions taken to AArch32 Hyp + * mode differs slightly, and we fix this up when populating HSR in + * arm_cpu_do_interrupt_aarch32_hyp(). + * The exception is FP/SIMD access traps -- these report extra information + * when taking an exception to AArch32. For those we include the extra cop= roc + * and TA fields, and mask them out when taking the exception to AArch64. + */ +static inline uint32_t syn_uncategorized(void) +{ + return (EC_UNCATEGORIZED << ARM_EL_EC_SHIFT) | ARM_EL_IL; +} + +static inline uint32_t syn_aa64_svc(uint32_t imm16) +{ + return (EC_AA64_SVC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); +} + +static inline uint32_t syn_aa64_hvc(uint32_t imm16) +{ + return (EC_AA64_HVC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); +} + +static inline uint32_t syn_aa64_smc(uint32_t imm16) +{ + return (EC_AA64_SMC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); +} + +static inline uint32_t syn_aa32_svc(uint32_t imm16, bool is_16bit) +{ + return (EC_AA32_SVC << ARM_EL_EC_SHIFT) | (imm16 & 0xffff) + | (is_16bit ? 0 : ARM_EL_IL); +} + +static inline uint32_t syn_aa32_hvc(uint32_t imm16) +{ + return (EC_AA32_HVC << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff); +} + +static inline uint32_t syn_aa32_smc(void) +{ + return (EC_AA32_SMC << ARM_EL_EC_SHIFT) | ARM_EL_IL; +} + +static inline uint32_t syn_aa64_bkpt(uint32_t imm16) +{ + return (EC_AA64_BKPT << ARM_EL_EC_SHIFT) | ARM_EL_IL | (imm16 & 0xffff= ); +} + +static inline uint32_t syn_aa32_bkpt(uint32_t imm16, bool is_16bit) +{ + return (EC_AA32_BKPT << ARM_EL_EC_SHIFT) | (imm16 & 0xffff) + | (is_16bit ? 0 : ARM_EL_IL); +} + +static inline uint32_t syn_aa64_sysregtrap(int op0, int op1, int op2, + int crn, int crm, int rt, + int isread) +{ + return (EC_SYSTEMREGISTERTRAP << ARM_EL_EC_SHIFT) | ARM_EL_IL + | (op0 << 20) | (op2 << 17) | (op1 << 14) | (crn << 10) | (rt << 5) + | (crm << 1) | isread; +} + +static inline uint32_t syn_cp14_rt_trap(int cv, int cond, int opc1, int op= c2, + int crn, int crm, int rt, int isre= ad, + bool is_16bit) +{ + return (EC_CP14RTTRAP << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | (cv << 24) | (cond << 20) | (opc2 << 17) | (opc1 << 14) + | (crn << 10) | (rt << 5) | (crm << 1) | isread; +} + +static inline uint32_t syn_cp15_rt_trap(int cv, int cond, int opc1, int op= c2, + int crn, int crm, int rt, int isre= ad, + bool is_16bit) +{ + return (EC_CP15RTTRAP << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | (cv << 24) | (cond << 20) | (opc2 << 17) | (opc1 << 14) + | (crn << 10) | (rt << 5) | (crm << 1) | isread; +} + +static inline uint32_t syn_cp14_rrt_trap(int cv, int cond, int opc1, int c= rm, + int rt, int rt2, int isread, + bool is_16bit) +{ + return (EC_CP14RRTTRAP << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | (cv << 24) | (cond << 20) | (opc1 << 16) + | (rt2 << 10) | (rt << 5) | (crm << 1) | isread; +} + +static inline uint32_t syn_cp15_rrt_trap(int cv, int cond, int opc1, int c= rm, + int rt, int rt2, int isread, + bool is_16bit) +{ + return (EC_CP15RRTTRAP << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | (cv << 24) | (cond << 20) | (opc1 << 16) + | (rt2 << 10) | (rt << 5) | (crm << 1) | isread; +} + +static inline uint32_t syn_fp_access_trap(int cv, int cond, bool is_16bit) +{ + /* AArch32 FP trap or any AArch64 FP/SIMD trap: TA =3D=3D 0 coproc =3D= =3D 0xa */ + return (EC_ADVSIMDFPACCESSTRAP << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | (cv << 24) | (cond << 20) | 0xa; +} + +static inline uint32_t syn_simd_access_trap(int cv, int cond, bool is_16bi= t) +{ + /* AArch32 SIMD trap: TA =3D=3D 1 coproc =3D=3D 0 */ + return (EC_ADVSIMDFPACCESSTRAP << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | (cv << 24) | (cond << 20) | (1 << 5); +} + +static inline uint32_t syn_sve_access_trap(void) +{ + return EC_SVEACCESSTRAP << ARM_EL_EC_SHIFT; +} + +static inline uint32_t syn_pactrap(void) +{ + return EC_PACTRAP << ARM_EL_EC_SHIFT; +} + +static inline uint32_t syn_btitrap(int btype) +{ + return (EC_BTITRAP << ARM_EL_EC_SHIFT) | btype; +} + +static inline uint32_t syn_insn_abort(int same_el, int ea, int s1ptw, int = fsc) +{ + return (EC_INSNABORT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIFT) + | ARM_EL_IL | (ea << 9) | (s1ptw << 7) | fsc; +} + +static inline uint32_t syn_data_abort_no_iss(int same_el, int fnv, + int ea, int cm, int s1ptw, + int wnr, int fsc) +{ + return (EC_DATAABORT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIFT) + | ARM_EL_IL + | (fnv << 10) | (ea << 9) | (cm << 8) | (s1ptw << 7) + | (wnr << 6) | fsc; +} + +static inline uint32_t syn_data_abort_with_iss(int same_el, + int sas, int sse, int srt, + int sf, int ar, + int ea, int cm, int s1ptw, + int wnr, int fsc, + bool is_16bit) +{ + return (EC_DATAABORT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIFT) + | (is_16bit ? 0 : ARM_EL_IL) + | ARM_EL_ISV | (sas << 22) | (sse << 21) | (srt << 16) + | (sf << 15) | (ar << 14) + | (ea << 9) | (cm << 8) | (s1ptw << 7) | (wnr << 6) | fsc; +} + +static inline uint32_t syn_swstep(int same_el, int isv, int ex) +{ + return (EC_SOFTWARESTEP << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SH= IFT) + | ARM_EL_IL | (isv << 24) | (ex << 6) | 0x22; +} + +static inline uint32_t syn_watchpoint(int same_el, int cm, int wnr) +{ + return (EC_WATCHPOINT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIF= T) + | ARM_EL_IL | (cm << 8) | (wnr << 6) | 0x22; +} + +static inline uint32_t syn_breakpoint(int same_el) +{ + return (EC_BREAKPOINT << ARM_EL_EC_SHIFT) | (same_el << ARM_EL_EC_SHIF= T) + | ARM_EL_IL | 0x22; +} + +static inline uint32_t syn_wfx(int cv, int cond, int ti, bool is_16bit) +{ + return (EC_WFX_TRAP << ARM_EL_EC_SHIFT) | + (is_16bit ? 0 : (1 << ARM_EL_IL_SHIFT)) | + (cv << 24) | (cond << 20) | ti; +} + +#endif /* TARGET_ARM_SYNDROME_H */ --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381601; cv=none; d=zohomail.com; s=zohoarc; b=BTeHNI+kYO1yaiCcpHAGJ378780+1EtyG9EULJ9u5XZh3TjCL+zv0T7Wm/89oevNZuqbZx3jSCn7uYqDtLM6jZ7dJVkyKe+ByaQ4Sjo+CuyerjLWEj+J0VMFxZMRT+b1YbiqzxQ2coCOO3B/ie47bSBmXQRXGRV1OUVUaI1uYdk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381601; h=Content-Transfer-Encoding:Cc: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=+5hZcB3mFjnWG5tCYVBAVH8vDfhhkDYHCqbXJC4msCo=; b=AOqontxxhmczqlBbTAHMfemDHcMtVexx9Y9FdF9wlpLpjsSr2NozDypQcrKq5Df4+sFNj7mqH+BoPFjeTUdCKBy1Z0bUAFpaaEQdRgLO+j5PByoRof79ezkKVFPo/hhATVfRaNK0/bTRFvsPFVGuXCA7e+MqTVybhceDswPrVjc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612381601810651.1663751206479; Wed, 3 Feb 2021 11:46:41 -0800 (PST) Received: from localhost ([::1]:38510 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7O6q-0006LZ-K5 for importer@patchew.org; Wed, 03 Feb 2021 14:46:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38332) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP1-0007eu-Gc for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:23 -0500 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:44202) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001pL-KZ for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:23 -0500 Received: by mail-pg1-x52c.google.com with SMTP id s23so363068pgh.11 for ; Wed, 03 Feb 2021 11:01:07 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+5hZcB3mFjnWG5tCYVBAVH8vDfhhkDYHCqbXJC4msCo=; b=rSaXeYK0CKweyFIt9SP5Ilx9VcuVeuXC8BLQn7U8cKlqX2+lEPemW/mSSdmHE0ELoK HRcmf/rGfGxzVUXn96kBrALc5zC22mhZyyW3aR+JSu1YLZ2nr23ChK/9ZboDZSa9yxil AaBY/b5xu6FSw2Sx1+utRo4NZBdUYEpx+YZhyVYkn6ICrw6wHPcmelJ49jSn/QdDbamo r8ojg7u8pM6C7NVZiCSZkN/BzIf8iPm7LcBftHt1cK7L/pRKdSowrBBdP9YL97ZZTasH OhsXOTApsAcV+tlOr8bW/1Oj0xolRQEa1H/WuK5QC3kHg/oYhSvMpuPxlB4aCkEXhPYl pAhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+5hZcB3mFjnWG5tCYVBAVH8vDfhhkDYHCqbXJC4msCo=; b=MfKSkUH1e3gSWP1KfNbet1vIU1kGx3ChUhn5wqW9sMK6EKY5bLEhNtV1ae4KeRVPDU +An57cHYrR59XavWJg33zzKpaLicVd3MDvtmP7+sLmkAb7wOzTB9c4MtpCRW18lLXQJb YQJGhhVPYnxs/rKTrNOReXaXnXO35LJhDcoYuQKB2l5CWmflVfasa9Uf2Wug0npoNWTR hfgXNDoQdvQr848ZtWhfnQYd9h2TSwQ/S9Owy2oocxYhUPNm23vLVkaIoH45QTRAzCLU Z4vSXLmqOgK96uYWt2uObi+BsaLIOmyEDH0CFZenXYOk5SxDgc2Wwd+DnwmD/M2dwQsq leSQ== X-Gm-Message-State: AOAM530/DtzPHKRDE/T9gyqJ/g5ED1YGs1QJIrrI4LKCwX9J4nYOYEel 8TrejIv6BladFbtzYHWy6OvePmHqCutNw1Nv X-Google-Smtp-Source: ABdhPJwhliakfQZXE6troJ99/tjRyqkhHrZ3fvjJIs76mhmP8sFfpWlCPzHNLht+flKlP831n4izFg== X-Received: by 2002:a63:b55:: with SMTP id a21mr5134010pgl.409.1612378866677; Wed, 03 Feb 2021 11:01:06 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 26/31] linux-user/aarch64: Pass syndrome to EXC_*_ABORT Date: Wed, 3 Feb 2021 09:00:05 -1000 Message-Id: <20210203190010.759771-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" A proper syndrome is required to fill in the proper si_code. Use page_get_flags to determine permission vs translation for user-only. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/aarch64/cpu_loop.c | 24 +++++++++++++++++++++--- target/arm/tlb_helper.c | 15 +++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 42b9c15f53..4e43906e66 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -23,6 +23,7 @@ #include "cpu_loop-common.h" #include "qemu/guest-random.h" #include "hw/semihosting/common-semi.h" +#include "target/arm/syndrome.h" =20 #define get_user_code_u32(x, gaddr, env) \ ({ abi_long __r =3D get_user_u32((x), (gaddr)); \ @@ -76,7 +77,7 @@ void cpu_loop(CPUARMState *env) { CPUState *cs =3D env_cpu(env); - int trapnr; + int trapnr, ec, fsc; abi_long ret; target_siginfo_t info; =20 @@ -117,9 +118,26 @@ void cpu_loop(CPUARMState *env) case EXCP_DATA_ABORT: info.si_signo =3D TARGET_SIGSEGV; info.si_errno =3D 0; - /* XXX: check env->error_code */ - info.si_code =3D TARGET_SEGV_MAPERR; info._sifields._sigfault._addr =3D env->exception.vaddress; + + /* We should only arrive here with EC in {DATAABORT, INSNABORT= }. */ + ec =3D syn_get_ec(env->exception.syndrome); + assert(ec =3D=3D EC_DATAABORT || ec =3D=3D EC_INSNABORT); + + /* Both EC have the same format for FSC, or close enough. */ + fsc =3D extract32(env->exception.syndrome, 0, 6); + switch (fsc) { + case 0x04 ... 0x07: /* Translation fault, level {0-3} */ + info.si_code =3D TARGET_SEGV_MAPERR; + break; + case 0x09 ... 0x0b: /* Access flag fault, level {1-3} */ + case 0x0d ... 0x0f: /* Permission fault, level {1-3} */ + info.si_code =3D TARGET_SEGV_ACCERR; + break; + default: + g_assert_not_reached(); + } + queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); break; case EXCP_DEBUG: diff --git a/target/arm/tlb_helper.c b/target/arm/tlb_helper.c index df85079d9f..9609333cbd 100644 --- a/target/arm/tlb_helper.c +++ b/target/arm/tlb_helper.c @@ -154,21 +154,24 @@ bool arm_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, bool probe, uintptr_t retaddr) { ARMCPU *cpu =3D ARM_CPU(cs); + ARMMMUFaultInfo fi =3D {}; =20 #ifdef CONFIG_USER_ONLY - cpu->env.exception.vaddress =3D address; - if (access_type =3D=3D MMU_INST_FETCH) { - cs->exception_index =3D EXCP_PREFETCH_ABORT; + int flags =3D page_get_flags(useronly_clean_ptr(address)); + if (flags & PAGE_VALID) { + fi.type =3D ARMFault_Permission; } else { - cs->exception_index =3D EXCP_DATA_ABORT; + fi.type =3D ARMFault_Translation; } - cpu_loop_exit_restore(cs, retaddr); + + /* now we have a real cpu fault */ + cpu_restore_state(cs, retaddr, true); + arm_deliver_fault(cpu, address, access_type, mmu_idx, &fi); #else hwaddr phys_addr; target_ulong page_size; int prot, ret; MemTxAttrs attrs =3D {}; - ARMMMUFaultInfo fi =3D {}; ARMCacheAttrs cacheattrs =3D {}; =20 /* --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381453; cv=none; d=zohomail.com; s=zohoarc; b=EgN792H4yu3hbj0MCZpON8kr+UUNZeonqFTOn4U6s1RnAf8qhoBj8SxmGdvMVtIKOqKJ1CRxSaeMgm2iCgOZ2/cpgjlqZf7042GoncgjqWhSHuYOkG3kuua5MM+oBWb2z8D9+Al9zRtgk3kPnSNfvo2elVbD9MMLTzDioReqU/4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381453; h=Content-Transfer-Encoding:Cc: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=EwcrKH1NrGFZArzgiK/QBy4uHtN2oVX1PxAv1FeIOOw=; b=llimex+JeRVL1virtF8YTYcOT1CdQsf/CuUHe3XNsawy0gCKyoqNFuhcEGcTzHWoQdnB5HcMGHW0I5MIHfnAop8YCgO9JICkwMumXtJeV7gdfcxVeQTTjxnIMK0ot98NjT2EqwTJLB+UYy9dbJnFvhmZTY+Hn0KpnJ/UAagGoxY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612381453800630.377223913628; Wed, 3 Feb 2021 11:44:13 -0800 (PST) Received: from localhost ([::1]:58134 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7O4S-0002ne-Jn for importer@patchew.org; Wed, 03 Feb 2021 14:44:12 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38322) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP1-0007du-3t for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:23 -0500 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:35126) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001pg-K1 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:22 -0500 Received: by mail-pf1-x431.google.com with SMTP id w14so438040pfi.2 for ; Wed, 03 Feb 2021 11:01:09 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EwcrKH1NrGFZArzgiK/QBy4uHtN2oVX1PxAv1FeIOOw=; b=KGxnUJ9qDsrFTKjk25EcVGJVMOzNbvgfGFRnhNksKCNKzfP5n1ZcHlfOs+onsCkE0L 5LblwcCxDCMqhe80Rw6nm/MPkAs/cK5uO0iMYYKjh3nfly3MPmUWkSZ5tHnKBgHBVqMk Bt9T2VExF9ZC4sqdL/P1kIME/764hsiFKool2hciqRS9Cg+rW1MZFtRI603Q4C893DlV g/CoNCR2idriTiyWabyPH5jEhOJtNFXf7Na2GhEGee89t+jvN46J5/I+y4SoZQg0gbUW 1htMXB0g3fASjSNShqpS4aJFCgZWLoIFrtos4MMdF5JdV2cBjCRcRERCY3LbTLKFfOMP rflw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EwcrKH1NrGFZArzgiK/QBy4uHtN2oVX1PxAv1FeIOOw=; b=AAb9k0oDqMzboKgC9Y9hY9Wi9QnqWpWb+vQSTy2B3UZ8w0E9GDvvMNi/PFXyNVWCVM xr8o8sQwFU/nHOmlh0oN1Jy0Y2rJEfM1J7VdGQWz1UHf2gn48S0/3GEpnKBRBpNb+DnH WkB1ptTrE+usOQYxH3nd2RcI/3GtrczWCYq/Xm00tgDAkAw5o8IM36s2tbdlljm9Cpbg I/wXDQt++DJ/D9FHc39DPKCYzHaffXnkgDyuRIhF4erbL+BKkDRpj3wQob07sSxA1d2f zyRXyhxg0D1tPtiMUibtYJOjwEPfNPDkCwNa9q7T3BEsnRBsDZS4a93RlLa0vQpVlepQ 4k2A== X-Gm-Message-State: AOAM533jHgHq0GVxtxEM7SyaLISn/dg0bPsD774V3ogWpiLsaklc8Lhy 7DRdHoQ37hjJX2IVsMpGTHauCqIqHBymbUim X-Google-Smtp-Source: ABdhPJz5FpHBfKEPNssEERXY7zG18GPbflRPOxtrU3cLSn1YWcq3ncw/dek6Zpk0060LzEh5sE4PMw== X-Received: by 2002:aa7:9585:0:b029:1c5:10ce:ba7f with SMTP id z5-20020aa795850000b02901c510ceba7fmr4354677pfj.79.1612378869073; Wed, 03 Feb 2021 11:01:09 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 27/31] linux-user/aarch64: Signal SEGV_MTESERR for sync tag check fault Date: Wed, 3 Feb 2021 09:00:06 -1000 Message-Id: <20210203190010.759771-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/aarch64/target_signal.h | 2 ++ linux-user/aarch64/cpu_loop.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/linux-user/aarch64/target_signal.h b/linux-user/aarch64/target= _signal.h index ddd73169f0..777fb667fe 100644 --- a/linux-user/aarch64/target_signal.h +++ b/linux-user/aarch64/target_signal.h @@ -21,5 +21,7 @@ typedef struct target_sigaltstack { =20 #include "../generic/signal.h" =20 +#define TARGET_SEGV_MTESERR 9 /* Synchronous ARM MTE exception */ + #define TARGET_ARCH_HAS_SETUP_FRAME #endif /* AARCH64_TARGET_SIGNAL_H */ diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index 4e43906e66..b6a2e65593 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -134,6 +134,9 @@ void cpu_loop(CPUARMState *env) case 0x0d ... 0x0f: /* Permission fault, level {1-3} */ info.si_code =3D TARGET_SEGV_ACCERR; break; + case 0x11: /* Synchronous Tag Check Fault */ + info.si_code =3D TARGET_SEGV_MTESERR; + break; default: g_assert_not_reached(); } --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381007; cv=none; d=zohomail.com; s=zohoarc; b=MfyP/3Ho/7Q9uzzTvV4FQjPrE7aLjcRBJXIJdmdG0iUZt4dFQbLBRGn92Q/yzz1cyoyr70rmiypCjwXYMZqbTubUnSHpz7HN7Oncn49lO1XiWvFCvsdV/3kVhtLo1dTBLzZ2wlz8BWYkF4W55lNky429g4UnM544QVOAfbKof/8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381007; h=Content-Transfer-Encoding:Cc: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=974AXR02Bhg4aUVmYtdJXY9jOyaOxnirKIOpaZIiAKE=; b=O6XeYKjiaPhZgPQfyygPQbCilvBUQtaplFpfavdpFJ+BokTCahy9KE4mZX2OpF6HKUT6cLXrG/h8Nh/umpmGSPhzEKR/HcMigZkpoy5bE7V7eVrmamRLjuKTaGL2BlmTQVCfk3tWtcueEN5vOHMvDbaT9OEuPYsn/QT3HQHC/IU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612381007692943.4260911976861; Wed, 3 Feb 2021 11:36:47 -0800 (PST) Received: from localhost ([::1]:40154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NxG-0003hh-JD for importer@patchew.org; Wed, 03 Feb 2021 14:36:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38296) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP0-0007dS-H6 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:22 -0500 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:35111) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOr-0001pr-J8 for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:22 -0500 Received: by mail-pg1-x52b.google.com with SMTP id t25so403833pga.2 for ; Wed, 03 Feb 2021 11:01:11 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=974AXR02Bhg4aUVmYtdJXY9jOyaOxnirKIOpaZIiAKE=; b=uC3VrUVigIqQnyoERevzYJv11v1YEPmymjefcoiQU4YtsJgR40QntKJjVi2JQVHfbN PvdhXM8za6ZbZK6g4fc24ntgNfdRmLcCMIyuS7G2Wwb9Zaidvyph4HEDx5IyjMmsAvd8 p48X1znAvA+jzuH/4kguaM8UVHcrReJexgYq6Xl2rSUSp9cLF7P3AKJg+bB3dSGIf1Hw wu53zS9ZjT099cteb24Eac1rrdatfxdIfxv4fa341RAGKTc9Q1GBsyiG9np/L2nFwYxZ f57JUfJlvfxwZpAulY0oxjCr+6sAx1HtUXOjB7tRKANdDVJ4+kfXLy70iVOKAQUDHgdW H50A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=974AXR02Bhg4aUVmYtdJXY9jOyaOxnirKIOpaZIiAKE=; b=IqmhtFZj+dvKVZ9sUOyG8AbdecsVn3xyv+sor4/cs1fDVpHa3OvNg7ANOkCZj7voHc GaN/mel87mcVKTO5pHmeVIjqi0ZusYKPUR9TBGr2WiPJhQrXwQZBQh8RIm595Rv2uznP oQMsS11ASyZrF2RYhsYCFNYqhySkgHbGqWnOSlAOACPNoDzEX1uUbcuSW29l0qw8fwuQ kJjkzS3h7d+ZKiGbNxYcX6bjbVywwtYAMXfvNaZEN/kGWwxZC2b/lpUXlozp60ve2buc ZwXMxeFYPEbobmYhjWdmmklHGpyjDZisp2Lo0ViWKFR+hs5a+2x+u9j4JP4SOmrfPaTd ijAA== X-Gm-Message-State: AOAM530IEjIfHWM/kf3NNxKWn0O3ZkzcVWn/8eXRhhwkzM0Mx59KMZyh nIfF83bxcTzUtobI6MCC2uglohcD9h9PKZhk X-Google-Smtp-Source: ABdhPJyVmrFyH0IUPV1ufHpnQPsAF+GdcTI2ETnfpiofcyf/9jGAojox6DmmK45U/EQnUYI/cWB/mg== X-Received: by 2002:a63:5805:: with SMTP id m5mr5046724pgb.352.1612378870804; Wed, 03 Feb 2021 11:01:10 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 28/31] linux-user/aarch64: Signal SEGV_MTEAERR for async tag check error Date: Wed, 3 Feb 2021 09:00:07 -1000 Message-Id: <20210203190010.759771-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The real kernel collects _TIF_MTE_ASYNC_FAULT into the current thread's state on any kernel entry (interrupt, exception etc), and then delivers the signal in advance of resuming the thread. This means that while the signal won't be delivered immediately, it will not be delayed forever -- at minimum it will be delivered after the next clock interrupt. We don't have a clock interrupt in linux-user, so we issue a cpu_kick to signal a return to the main loop at the end of the current TB. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/aarch64/target_signal.h | 1 + linux-user/aarch64/cpu_loop.c | 11 +++++++++++ target/arm/mte_helper.c | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/linux-user/aarch64/target_signal.h b/linux-user/aarch64/target= _signal.h index 777fb667fe..18013e1b23 100644 --- a/linux-user/aarch64/target_signal.h +++ b/linux-user/aarch64/target_signal.h @@ -21,6 +21,7 @@ typedef struct target_sigaltstack { =20 #include "../generic/signal.h" =20 +#define TARGET_SEGV_MTEAERR 8 /* Asynchronous ARM MTE error */ #define TARGET_SEGV_MTESERR 9 /* Synchronous ARM MTE exception */ =20 #define TARGET_ARCH_HAS_SETUP_FRAME diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c index b6a2e65593..7c42f65706 100644 --- a/linux-user/aarch64/cpu_loop.c +++ b/linux-user/aarch64/cpu_loop.c @@ -164,6 +164,17 @@ void cpu_loop(CPUARMState *env) EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\= n", trapnr); abort(); } + + /* Check for MTE asynchronous faults */ + if (unlikely(env->cp15.tfsr_el[0])) { + env->cp15.tfsr_el[0] =3D 0; + info.si_signo =3D TARGET_SIGSEGV; + info.si_errno =3D 0; + info._sifields._sigfault._addr =3D 0; + info.si_code =3D TARGET_SEGV_MTEAERR; + queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); + } + process_pending_signals(env); /* Exception return on AArch64 always clears the exclusive monitor, * so any return to running guest code implies this. diff --git a/target/arm/mte_helper.c b/target/arm/mte_helper.c index 153bd1e9df..d55f8d1e1e 100644 --- a/target/arm/mte_helper.c +++ b/target/arm/mte_helper.c @@ -565,6 +565,16 @@ static void mte_check_fail(CPUARMState *env, uint32_t = desc, select =3D 0; } env->cp15.tfsr_el[el] |=3D 1 << select; +#ifdef CONFIG_USER_ONLY + /* + * Stand in for a timer irq, setting _TIF_MTE_ASYNC_FAULT, + * which then sends a SIGSEGV when the thread is next scheduled. + * This cpu will return to the main loop at the end of the TB, + * which is rather sooner than "normal". But the alternative + * is waiting until the next syscall. + */ + qemu_cpu_kick(env_cpu(env)); +#endif break; =20 default: --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612382010; cv=none; d=zohomail.com; s=zohoarc; b=diQTKtqt4uvjnV+UaX9eyU8SWAnZwvk5GEHBYgSHvJOdyeLOWKx/C8BViHTD/5wf2InZplS65iyjluykicGRZRRmElq/y+rHGmh6i6GP3iub33xMb2E3Q9S36q8222WRkBJsZklvJVAHEoOHiDP79hz5cK9G8ZopOYJjdO0/q3w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612382010; h=Content-Transfer-Encoding:Cc: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=9J8C2yhZQHwcHgCFCp6aWoyOwMetLwuIKJgxUSgtqBU=; b=QuH+WXI4vrExf087ZYyQNzAe+cGJ4KPDtpNEam1RBKeQMg29p91AZo3rLLRtC4bicpieD0yACCqltqHv1LDv4pMiNFDocR5rcxnoDgwVoRPIXaeeubEOeKSk3wqt92eQ5TMeu6uzGpFhKmn/rBb0CjOL2XvtTUykuQ8+104e8IM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612382010209366.3599557247014; Wed, 3 Feb 2021 11:53:30 -0800 (PST) Received: from localhost ([::1]:55570 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7ODP-0005My-1N for importer@patchew.org; Wed, 03 Feb 2021 14:53:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP3-0007kS-Tp for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:26 -0500 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:45759) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOs-0001q8-2e for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:25 -0500 Received: by mail-pf1-x431.google.com with SMTP id j12so403142pfj.12 for ; Wed, 03 Feb 2021 11:01:13 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9J8C2yhZQHwcHgCFCp6aWoyOwMetLwuIKJgxUSgtqBU=; b=ad/X3Pw/RzxAHyJ4ZfjzwUohqg7OPUzNVN4iwieT1iUQdqsL6C/fnKmFr6eCZObKY5 pcf51OakGnhSF4m3lofyRIB3VAgXpizFmHWV5spODDXS84u5oa66Q9eTPqRLlOuNLter sGRCvCaYibowG09ha9Q5cU2eN5I0cimwa3lR1fnyP2JQjYFAIGKiIuRJyiViSU0vtWvZ HAUvXNSoWGKwT38A1EMePqWPXh+j59Z+/LS6haaUNbfR8o9CreGQnMlaknSCl3U8basp cLohd4GlpO6vkmptJeuj2bIq37fooYM4Fe2e2LFNcuPiE0M1ShabL+EyFZvlnxwscZNJ pceA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9J8C2yhZQHwcHgCFCp6aWoyOwMetLwuIKJgxUSgtqBU=; b=XQvzalt5gjisFomtipPeS1bEN4jI7v4z7FhkmiC3BO27XfG2w+30lKQbV/hhnXygVy 0A8GShy8Uc/RnN0amf+Wb6IUL8/Rs5IKUab0VuGuT8DZNQhGHlz3gcGLXVjUYJjJAW4i icuM73iMeb/ezD4sT1xJT6g8YyU4LJTdAEscneUA5KXVW9SOcqPS9/E2PT+Dc6tJSBgM xZyls0wRIJzaqTUpCJkoxXc5Ppjtf+kQGZF51ihWFvQmjHM1gCzyrImVQgEwwX2alGO0 sPklbLQuy1xwe5eMd038/mjio+dmFzmrVHkAamm3WSJW8wAXm8LBZ+C+A9Hta4tEwiqj CQHQ== X-Gm-Message-State: AOAM5333PSZ/Nm33z7P7m6h7Q20Z2yBvO1W7wVquVuRPYMaus5SU0Jbc DyvtsSzf32XMpRkNky6/bljsNyLB6EKrRJSk X-Google-Smtp-Source: ABdhPJwDuOMSuWMS0zoReKI+eJGp8frmbl05QTLmApII4thC2q+N+WB2dCFhsZDTyLH8j/9D5nl4FA== X-Received: by 2002:a65:5b47:: with SMTP id y7mr5080819pgr.221.1612378872795; Wed, 03 Feb 2021 11:01:12 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 29/31] target/arm: Add allocation tag storage for user mode Date: Wed, 3 Feb 2021 09:00:08 -1000 Message-Id: <20210203190010.759771-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Use the now-saved PAGE_ANON and PAGE_MTE bits, and the per-page saved data. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/mte_helper.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/target/arm/mte_helper.c b/target/arm/mte_helper.c index d55f8d1e1e..1c569336ea 100644 --- a/target/arm/mte_helper.c +++ b/target/arm/mte_helper.c @@ -78,8 +78,33 @@ static uint8_t *allocation_tag_mem(CPUARMState *env, int= ptr_mmu_idx, int tag_size, uintptr_t ra) { #ifdef CONFIG_USER_ONLY - /* Tag storage not implemented. */ - return NULL; + uint64_t clean_ptr =3D useronly_clean_ptr(ptr); + int flags =3D page_get_flags(clean_ptr); + uint8_t *tags; + uintptr_t index; + + if (!(flags & (ptr_access =3D=3D MMU_DATA_STORE ? PAGE_WRITE : PAGE_RE= AD))) { + /* SIGSEGV */ + arm_cpu_tlb_fill(env_cpu(env), ptr, ptr_size, ptr_access, + ptr_mmu_idx, false, ra); + g_assert_not_reached(); + } + + /* Require both MAP_ANON and PROT_MTE for the page. */ + if (!(flags & PAGE_ANON) || !(flags & PAGE_MTE)) { + return NULL; + } + + tags =3D page_get_target_data(clean_ptr); + if (tags =3D=3D NULL) { + size_t alloc_size =3D TARGET_PAGE_SIZE >> (LOG2_TAG_GRANULE + 1); + tags =3D page_alloc_target_data(clean_ptr, alloc_size); + assert(tags !=3D NULL); + } + + index =3D extract32(ptr, LOG2_TAG_GRANULE + 1, + TARGET_PAGE_BITS - LOG2_TAG_GRANULE - 1); + return tags + index; #else uintptr_t index; CPUIOTLBEntry *iotlbentry; --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612381833; cv=none; d=zohomail.com; s=zohoarc; b=kZSRxKEJV5sZP4S+UMK3B0zOBfxqHbVbK946xiOOfwRNnU6cntTiQI2lmTiCMTghvxsTKYP0LWXA/mx8AgOfvMtJPcloaxcBdwP1isrvl+jMMe3RzB0IYkpz0bViSon/4qrV3BawnYXeLN9/KiobmIA3uEMlNXR1a1veOtQbNvQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612381833; h=Content-Transfer-Encoding:Cc: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=1JlH8qHKnc4iW1GCFnVD0mMaAs7tdU6wBK2pRgI3tiQ=; b=e84pDH5+pRoNX5X4vxpzFGdXd5awDoCkB/LGAPpyjEw4CZA4gxlEHucFh64CtbpYRyDnZguFEZSfVd4B7VPN45Gv3K06VS5bbtqKLIEZU1PytNBevy1wfJ7CcegFxv9SDqay0AA/MC/uXGpUsmPbQuqmBJfIJw2kLpfyCYcK1FM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161238183382674.8071842890289; Wed, 3 Feb 2021 11:50:33 -0800 (PST) Received: from localhost ([::1]:48088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7OAa-00020z-Jb for importer@patchew.org; Wed, 03 Feb 2021 14:50:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38390) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP3-0007jr-LY for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:25 -0500 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]:37551) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOt-0001rx-Tx for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:25 -0500 Received: by mail-pf1-x42f.google.com with SMTP id b145so429088pfb.4 for ; Wed, 03 Feb 2021 11:01:15 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1JlH8qHKnc4iW1GCFnVD0mMaAs7tdU6wBK2pRgI3tiQ=; b=XD5R2S8qlgpO+BacRxZNnKWvWWIpOK8w1BzL7HVvu09Wq0PncV9D8y0++b2qoaji6+ 9kw4o8LVUMcOb94RVQA9THTapA/tynKV/2/2EFUDHsNeoCxmgOlJ2Vpt/FKWirJKXfnJ hdq3IndyEeuhwA6AB+j82ReXrnPxXbybmZ2duZU2knX//Ri24jyB3o2JoE1K5iy7FkkQ nGkhrf7PZTOluhlzZHxXF2kdHhSJl+tF06SGenUtcs0iIcFYtT4wL3T81RT9U08aeHMT wmJBbKRaCbAxzYAyO2wM/CKNv6Z8zUxnuVSJvg1evMjm0hDGf4njxdRH45YuMerZy8XY A0QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1JlH8qHKnc4iW1GCFnVD0mMaAs7tdU6wBK2pRgI3tiQ=; b=GUiHEe8wYIfg/vizjWRoWNW+T+NF9SYM9okYP6wgfAf2cjd4yvjvQs35/Gw0QEpn/H +yvnaZJexC51uypNoyarHgZLcHwJ5TPm7Zl/MXQrKtRQTd8M3EB9GeID3lxajEONV9E9 lrLV4AEQZr3IAQ9pfYirscGHhWJyzg3ffsZ160SgVidsuuZLpjNm73kRgEgxtWjyvsCn 4A0NqT6u+EgK0wrPqSaXLujPSQJgUN+VMGWI5QGnwu4/cT+KMyvWcAhTOhGStaiPP2H5 FqB8xCM4zKDa87IJ8Jb4qVYkbZzxhsg2J+TWafuV9Pk8fzNT2OyFdbOesYfi2zYiw5x3 MZjg== X-Gm-Message-State: AOAM531F/4b0A7RwJ96+fXIqcjGqA1lDQ++Gm3uh+hI4Ox3HzUgqPNRS ciXODix3I3ln6EOyvyaMMHim8MZMX/fBBBbk X-Google-Smtp-Source: ABdhPJy/XNbaqTDTS3LM9SmAS2gV+388UwIm9q4fiStHnEBM/uxAUdSS7jbcwhgwpVJtUUkhb5tVGA== X-Received: by 2002:a63:9dc9:: with SMTP id i192mr5148527pgd.271.1612378874685; Wed, 03 Feb 2021 11:01:14 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 30/31] target/arm: Enable MTE for user-only Date: Wed, 3 Feb 2021 09:00:09 -1000 Message-Id: <20210203190010.759771-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::42f; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42f.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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/cpu.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index db81a12418..43933550c3 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -204,6 +204,21 @@ static void arm_cpu_reset(DeviceState *dev) * Note that this must match useronly_clean_ptr. */ env->cp15.tcr_el[1].raw_tcr =3D (1ULL << 37); + + /* Enable MTE */ + if (cpu_isar_feature(aa64_mte, cpu)) { + /* Enable tag access, but leave TCF0 as No Effect (0). */ + env->cp15.sctlr_el[1] |=3D SCTLR_ATA0; + /* + * Exclude all tags, so that tag 0 is always used. + * This corresponds to Linux current->thread.gcr_incl =3D 0. + * + * Set RRND, so that helper_irg() will generate a seed later. + * Here in cpu_reset(), the crypto subsystem has not yet been + * initialized. + */ + env->cp15.gcr_el1 =3D 0x1ffff; + } #else /* Reset into the highest available EL */ if (arm_feature(env, ARM_FEATURE_EL3)) { --=20 2.25.1 From nobody Sat May 18 19:47:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1612380777; cv=none; d=zohomail.com; s=zohoarc; b=PrJ0F6qW6YFz+9nwZUDjVGNK5cvWSHsXbonN0Rd1NiPJjpiWio322RmITLGmOfXh8v4aYUXZI4CJx1x6rb13L0qi6kTH4B1Jrg2exFLt5zQ2qvoQmSHcBZjp+NSgmW2SIzGoFyxxhiG6eczJ1TXkwIkid5Nps3UsrBtaI8R5Z5A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612380777; h=Content-Transfer-Encoding:Cc: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=Ytsx3BK2fvJBPpCQnawH3jODSdPjUh55jAri5H8usa0=; b=B4DVi7gZifJRfqYxS4NUwkhtzeAp84VBzgkIgkb2o58Q4Vbxq0UBFxFfzifYa/eSwNljEf1Pu0A6Gqn9oCEtA8fQhpdgbriLm7UhEV0Op8IWScKwuMk9bWaJkFVhPPlrB7a4qXTCimdKD1w8vIr0hyt4I3k0ON3CYl336Ch1kx0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612380776954675.3120766078106; Wed, 3 Feb 2021 11:32:56 -0800 (PST) Received: from localhost ([::1]:59356 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l7NtV-00087i-Fd for importer@patchew.org; Wed, 03 Feb 2021 14:32:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38418) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l7NP5-0007nV-EH for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:27 -0500 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:37037) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l7NOy-0001sP-Ku for qemu-devel@nongnu.org; Wed, 03 Feb 2021 14:01:27 -0500 Received: by mail-pg1-x533.google.com with SMTP id z21so393398pgj.4 for ; Wed, 03 Feb 2021 11:01:17 -0800 (PST) Received: from localhost.localdomain (cpe-66-27-222-29.hawaii.res.rr.com. [66.27.222.29]) by smtp.gmail.com with ESMTPSA id l2sm2906666pju.25.2021.02.03.11.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Feb 2021 11:01:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ytsx3BK2fvJBPpCQnawH3jODSdPjUh55jAri5H8usa0=; b=eNkSdj30mFn8Xf0kKCnikLNq2ewyS5tO4u3rTPv05950m7VaS1Wa4b5PsPZd/69wRN 6/5KHBzTJ07XVloi5uN8FVZgVR7JJEsfyugTFDoPmkiR5K6XR6i60T6iMqQdalnHEyvR kx0NjcPPnsbJPuHK/8/MsDSVjSzSc+k3hMwRMzus6L6UBUoN7ZZX6DA5Lw+E7aa4eLp3 hzmtzblCoVma90vF1CFDbAaofq/U/vc84DTNnRP9osgyN6hXihbDzwXLFW75GZDPfldK F+tOKQeH07Bw7xYTGj9R5o6hG30qtZ94BBi+U3qW3eOkFU95u6TC7plHRjb9HmJnTHoL L4oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ytsx3BK2fvJBPpCQnawH3jODSdPjUh55jAri5H8usa0=; b=FdNBVvElYL3AxzlH2JN1/cKVptTo6y+YIAENx3Bfm3lNaHXRUWGzOYZ8+jz6HAnJuB kUoWdD5bZP+CLM3pFv9qenpVcFgWUmHtL4QMVj95e8fbV4i4kLRm8s83jHeWb8eB7Qm6 Hblfn+ldZy3YYP7XSdueOWVNGK0A5PGhbX3o52O9SBdvsNDr78bvKjXsuOa8xiJ0aKyr PLL6RLnvg2ffBBcF40caJFkKgW1lDSLlsPtmHg9RFaahYwfPj3fBVU/fH0XXMTXtERJh X6QlfQor049lQLI1ePTiGcg5Gfe4QbzAFoZ+W1P22DxLvEzOhrOeXOGBpvX/AF3h2/ZW 2Tdg== X-Gm-Message-State: AOAM531y/2w2mRrx/7XVPGP2xZwX529qGlUixym1wn+7tcbILZwJJ+aG ic0q5ILjckxieljZcng7ARvEiql9BUkrdBXQ X-Google-Smtp-Source: ABdhPJxTZj+/6zrJpaNDnQOCCmwDgKo7/HWoGCF3349WsFD7c5/aNZdueJ+ayfpj9AoVjjLYKhaq4A== X-Received: by 2002:a63:597:: with SMTP id 145mr5162023pgf.252.1612378876405; Wed, 03 Feb 2021 11:01:16 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 31/31] tests/tcg/aarch64: Add mte smoke tests Date: Wed, 3 Feb 2021 09:00:10 -1000 Message-Id: <20210203190010.759771-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210203190010.759771-1-richard.henderson@linaro.org> References: <20210203190010.759771-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::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.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=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- tests/tcg/aarch64/mte.h | 60 +++++++++++++++++++++++++++++++ tests/tcg/aarch64/mte-1.c | 28 +++++++++++++++ tests/tcg/aarch64/mte-2.c | 45 +++++++++++++++++++++++ tests/tcg/aarch64/mte-3.c | 51 ++++++++++++++++++++++++++ tests/tcg/aarch64/mte-4.c | 45 +++++++++++++++++++++++ tests/tcg/aarch64/Makefile.target | 6 ++++ tests/tcg/configure.sh | 4 +++ 7 files changed, 239 insertions(+) create mode 100644 tests/tcg/aarch64/mte.h create mode 100644 tests/tcg/aarch64/mte-1.c create mode 100644 tests/tcg/aarch64/mte-2.c create mode 100644 tests/tcg/aarch64/mte-3.c create mode 100644 tests/tcg/aarch64/mte-4.c diff --git a/tests/tcg/aarch64/mte.h b/tests/tcg/aarch64/mte.h new file mode 100644 index 0000000000..141cef522c --- /dev/null +++ b/tests/tcg/aarch64/mte.h @@ -0,0 +1,60 @@ +/* + * Linux kernel fallback API definitions for MTE and test helpers. + * + * Copyright (c) 2021 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef PR_SET_TAGGED_ADDR_CTRL +# define PR_SET_TAGGED_ADDR_CTRL 55 +#endif +#ifndef PR_TAGGED_ADDR_ENABLE +# define PR_TAGGED_ADDR_ENABLE (1UL << 0) +#endif +#ifndef PR_MTE_TCF_SHIFT +# define PR_MTE_TCF_SHIFT 1 +# define PR_MTE_TCF_NONE (0UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TCF_ASYNC (2UL << PR_MTE_TCF_SHIFT) +# define PR_MTE_TAG_SHIFT 3 +#endif + +#ifndef PROT_MTE +# define PROT_MTE 0x20 +#endif + +#ifndef SEGV_MTEAERR +# define SEGV_MTEAERR 8 +# define SEGV_MTESERR 9 +#endif + +static void enable_mte(int tcf) +{ + int r =3D prctl(PR_SET_TAGGED_ADDR_CTRL, + PR_TAGGED_ADDR_ENABLE | tcf | (0xfffe << PR_MTE_TAG_SHIF= T), + 0, 0, 0); + if (r < 0) { + perror("PR_SET_TAGGED_ADDR_CTRL"); + exit(2); + } +} + +static void *alloc_mte_mem(size_t size) +{ + void *p =3D mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_MTE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (p =3D=3D MAP_FAILED) { + perror("mmap PROT_MTE"); + exit(2); + } + return p; +} diff --git a/tests/tcg/aarch64/mte-1.c b/tests/tcg/aarch64/mte-1.c new file mode 100644 index 0000000000..88dcd617ad --- /dev/null +++ b/tests/tcg/aarch64/mte-1.c @@ -0,0 +1,28 @@ +/* + * Memory tagging, basic pass cases. + * + * Copyright (c) 2021 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "mte.h" + +int main(int ac, char **av) +{ + int *p0, *p1, *p2; + long c; + + enable_mte(PR_MTE_TCF_NONE); + p0 =3D alloc_mte_mem(sizeof(*p0)); + + asm("irg %0,%1,%2" : "=3Dr"(p1) : "r"(p0), "r"(1)); + assert(p1 !=3D p0); + asm("subp %0,%1,%2" : "=3Dr"(c) : "r"(p0), "r"(p1)); + assert(c =3D=3D 0); + + asm("stg %0, [%0]" : : "r"(p1)); + asm("ldg %0, [%1]" : "=3Dr"(p2) : "r"(p0), "0"(p0)); + assert(p1 =3D=3D p2); + + return 0; +} diff --git a/tests/tcg/aarch64/mte-2.c b/tests/tcg/aarch64/mte-2.c new file mode 100644 index 0000000000..a62278276a --- /dev/null +++ b/tests/tcg/aarch64/mte-2.c @@ -0,0 +1,45 @@ +/* + * Memory tagging, basic fail cases, synchronous signals. + * + * Copyright (c) 2021 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "mte.h" + +void pass(int sig, siginfo_t *info, void *uc) +{ + assert(info->si_code =3D=3D SEGV_MTESERR); + exit(0); +} + +int main(int ac, char **av) +{ + struct sigaction sa; + int *p0, *p1, *p2; + long excl =3D 1; + + enable_mte(PR_MTE_TCF_SYNC); + p0 =3D alloc_mte_mem(sizeof(*p0)); + + /* Create two differently tagged pointers. */ + asm("irg %0,%1,%2" : "=3Dr"(p1) : "r"(p0), "r"(excl)); + asm("gmi %0,%1,%0" : "+r"(excl) : "r" (p1)); + assert(excl !=3D 1); + asm("irg %0,%1,%2" : "=3Dr"(p2) : "r"(p0), "r"(excl)); + assert(p1 !=3D p2); + + /* Store the tag from the first pointer. */ + asm("stg %0, [%0]" : : "r"(p1)); + + *p1 =3D 0; + + memset(&sa, 0, sizeof(sa)); + sa.sa_sigaction =3D pass; + sa.sa_flags =3D SA_SIGINFO; + sigaction(SIGSEGV, &sa, NULL); + + *p2 =3D 0; + + abort(); +} diff --git a/tests/tcg/aarch64/mte-3.c b/tests/tcg/aarch64/mte-3.c new file mode 100644 index 0000000000..424ea685c2 --- /dev/null +++ b/tests/tcg/aarch64/mte-3.c @@ -0,0 +1,51 @@ +/* + * Memory tagging, basic fail cases, asynchronous signals. + * + * Copyright (c) 2021 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "mte.h" + +void pass(int sig, siginfo_t *info, void *uc) +{ + assert(info->si_code =3D=3D SEGV_MTEAERR); + exit(0); +} + +int main(int ac, char **av) +{ + struct sigaction sa; + long *p0, *p1, *p2; + long excl =3D 1; + + enable_mte(PR_MTE_TCF_ASYNC); + p0 =3D alloc_mte_mem(sizeof(*p0)); + + /* Create two differently tagged pointers. */ + asm("irg %0,%1,%2" : "=3Dr"(p1) : "r"(p0), "r"(excl)); + asm("gmi %0,%1,%0" : "+r"(excl) : "r" (p1)); + assert(excl !=3D 1); + asm("irg %0,%1,%2" : "=3Dr"(p2) : "r"(p0), "r"(excl)); + assert(p1 !=3D p2); + + /* Store the tag from the first pointer. */ + asm("stg %0, [%0]" : : "r"(p1)); + + *p1 =3D 0; + + memset(&sa, 0, sizeof(sa)); + sa.sa_sigaction =3D pass; + sa.sa_flags =3D SA_SIGINFO; + sigaction(SIGSEGV, &sa, NULL); + + /* + * Signal for async error will happen eventually. + * For a real kernel this should be after the next IRQ (e.g. timer). + * For qemu linux-user, we kick the cpu and exit at the next TB. + * In either case, loop until this happens (or killed by timeout). + * For extra sauce, yield, producing EXCP_YIELD to cpu_loop(). + */ + asm("str %0, [%0]; yield" : : "r"(p2)); + while (1); +} diff --git a/tests/tcg/aarch64/mte-4.c b/tests/tcg/aarch64/mte-4.c new file mode 100644 index 0000000000..a8cc9f5984 --- /dev/null +++ b/tests/tcg/aarch64/mte-4.c @@ -0,0 +1,45 @@ +/* + * Memory tagging, re-reading tag checks. + * + * Copyright (c) 2021 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "mte.h" + +void __attribute__((noinline)) tagset(void *p, size_t size) +{ + size_t i; + for (i =3D 0; i < size; i +=3D 16) { + asm("stg %0, [%0]" : : "r"(p + i)); + } +} + +void __attribute__((noinline)) tagcheck(void *p, size_t size) +{ + size_t i; + void *c; + + for (i =3D 0; i < size; i +=3D 16) { + asm("ldg %0, [%1]" : "=3Dr"(c) : "r"(p + i), "0"(p)); + assert(c =3D=3D p); + } +} + +int main(int ac, char **av) +{ + size_t size =3D getpagesize() * 4; + long excl =3D 1; + int *p0, *p1; + + enable_mte(PR_MTE_TCF_ASYNC); + p0 =3D alloc_mte_mem(size); + + /* Tag the pointer. */ + asm("irg %0,%1,%2" : "=3Dr"(p1) : "r"(p0), "r"(excl)); + + tagset(p1, size); + tagcheck(p1, size); + + return 0; +} diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile= .target index d7d33e293c..bf53ad0087 100644 --- a/tests/tcg/aarch64/Makefile.target +++ b/tests/tcg/aarch64/Makefile.target @@ -35,6 +35,12 @@ endif # bti-2 tests PROT_BTI, so no special compiler support required. AARCH64_TESTS +=3D bti-2 =20 +# MTE Tests +ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_ARMV8_MTE),) +AARCH64_TESTS +=3D mte-1 mte-2 mte-3 mte-4 +mte-%: CFLAGS +=3D -march=3Darmv8.5-a+memtag +endif + # Semihosting smoke test for linux-user AARCH64_TESTS +=3D semihosting run-semihosting: semihosting diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh index e1b70e25f2..ba8ac9a93e 100755 --- a/tests/tcg/configure.sh +++ b/tests/tcg/configure.sh @@ -244,6 +244,10 @@ for target in $target_list; do -mbranch-protection=3Dstandard -o $TMPE $TMPC; then echo "CROSS_CC_HAS_ARMV8_BTI=3Dy" >> $config_target_mak fi + if do_compiler "$target_compiler" $target_compiler_cflags \ + -march=3Darmv8.5-a+memtag -o $TMPE $TMPC; then + echo "CROSS_CC_HAS_ARMV8_MTE=3Dy" >> $config_target_mak + fi ;; esac =20 --=20 2.25.1