[{"id":3674998,"web_url":"http://patchwork.ozlabs.org/comment/3674998/","msgid":"<fc59c646-a503-42f1-9e3b-fb73cae0b6bd@linaro.org>","list_archive_url":null,"date":"2026-04-08T21:21:58","subject":"Re: [PATCH 1/2] linux-user/arm: Improve get_user_code_u32 and usage","submitter":{"id":72104,"url":"http://patchwork.ozlabs.org/api/people/72104/","name":"Richard Henderson","email":"richard.henderson@linaro.org"},"content":"On 4/8/26 11:33, Richard Henderson wrote:\n> Force a little-endian load before applying SCTLR.B.\n> Handle the BE32 swap correctly in thumb mode.  This\n> fixes a bug with its later usage in insn_is_linux_bkpt.\n> \n> Handle lock_user failure: in one case by simply falling back\n> to the original SIGILL and the other by raising SIGSEGV.\n> \n> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>\n> ---\n>   linux-user/arm/cpu_loop.c | 64 ++++++++++++++++++++++++---------------\n>   1 file changed, 40 insertions(+), 24 deletions(-)\n> \n> diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c\n> index 19874f4c72..419136fdee 100644\n> --- a/linux-user/arm/cpu_loop.c\n> +++ b/linux-user/arm/cpu_loop.c\n> @@ -29,13 +29,34 @@\n>   #include \"user/page-protection.h\"\n>   #include \"target/arm/syndrome.h\"\n>   \n> -#define get_user_code_u32(x, gaddr, env)                \\\n> -    ({ abi_long __r = get_user_u32((x), (gaddr));       \\\n> -        if (!__r && bswap_code(arm_sctlr_b(env))) {     \\\n> -            (x) = bswap32(x);                           \\\n> -        }                                               \\\n> -        __r;                                            \\\n> -    })\n> +static bool get_user_code_u32(uint32_t *ret, uint32_t va, CPUARMState *env)\n> +{\n> +    uint32_t insn, *hptr;\n> +\n> +    hptr = lock_user(VERIFY_READ, va, sizeof(uint32_t), 1);\n> +    if (!hptr) {\n> +        *ret = 0;\n> +        return false;\n> +    }\n> +\n> +    /* Load as little-endian by default. */\n> +    __get_user_e(insn, hptr, le);\n> +    unlock_user(hptr, va, 0);\n> +\n> +    /*\n> +     * Adjust the little-endian load for BE32 as required.\n> +     * In thumb mode, bswap both halfwords by bswap of word then\n> +     * swapping the halfwords again to restore the original order.\n> +     */\n> +    if (arm_sctlr_b(env)) {\n> +        insn = bswap32(insn);\n> +        if (env->thumb) {\n> +            insn = hswap32(insn);\n> +        }\n> +    }\n> +    *ret = insn;\n> +    return true;\n> +}\n\nThis isn't right for thumb be32, at least not matching translate.c.\n\nTranslate loads 2 halfwords from\n\n   va ^ 2\n   (va + 2) ^ 2\n\nLet va = A + 2, where A % 4 == 0:\n\n   (A + 2) ^ 2 == A\n   ((A + 2) + 2) ^ 2 = (A + 4) ^ 2 = A + 6\n\nWe'd need to lock 8 bytes in this case, loading the first and last two.\n\nIt is tempting to have translate.c store the instruction that it loaded as part of raising \nthe exception so that we don't have to think about such things again here.\n\nPeter, what do you think?\n\n\nr~","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=HZkZ4IWi;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frbd826Qwz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 07:22:50 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wAaLi-0005xa-Hf; Wed, 08 Apr 2026 17:22:10 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1wAaLh-0005wU-FV\n for qemu-devel@nongnu.org; Wed, 08 Apr 2026 17:22:09 -0400","from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1wAaLe-0004ab-MH\n for qemu-devel@nongnu.org; Wed, 08 Apr 2026 17:22:09 -0400","by mail-pf1-x436.google.com with SMTP id\n d2e1a72fcca58-82ce0a9b3f7so153475b3a.0\n for <qemu-devel@nongnu.org>; Wed, 08 Apr 2026 14:22:06 -0700 (PDT)","from [192.168.1.105] (124-150-69-109.tpgi.com.au. [124.150.69.109])\n by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82cf9c6fdd7sm21837879b3a.48.2026.04.08.14.22.01\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Wed, 08 Apr 2026 14:22:04 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1775683325; x=1776288125; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:content-language:references\n :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to\n :cc:subject:date:message-id:reply-to;\n bh=38LV6cTloIQIKNx6vlMzcV5/CyU1yfLErDb+TIbw+ek=;\n b=HZkZ4IWi964CcjuGtl7xdbxWqG81YYTATXTiMsUd+a6wo3LHpXDT0zC/hSWvN5h2VH\n gSeAYag90PfRxXMXgp9G5s422JB7VRjBxZgslZvM6kJzpPDP9sxRizdvYm5ZbeInUpz0\n rDuauGGWPbM+HJ/A/dNec4diFZcJzrhMrOHU3UTPXyv/rC29ImaK+xZhNCn9PGMfv5lU\n YXhbj6kZDXEaKeFPgwmOgZbYQJd5Uo93V47HKAuWRAUeIDBCx6kZGat30THyM3O5H95J\n POp/+XDup7pW+ZD9RPfrrb3J2wcwM2B1djEW3cUg2DjuO1SYVq7dJkRYr7ustp0mR/VR\n d/Ag==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775683325; x=1776288125;\n h=content-transfer-encoding:in-reply-to:content-language:references\n :cc:to:from:subject:user-agent:mime-version:date:message-id:x-gm-gg\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=38LV6cTloIQIKNx6vlMzcV5/CyU1yfLErDb+TIbw+ek=;\n b=Igb/vZPOLIRNt93rJr2OcWBNyHfnK58yYewYDGIkdQPIT93uMxuO/APphMkFXEDztZ\n XUfBhNs7rFbfi6jpuCHNBshoYePowQlhT4+tJOFhIwwyFmmoR13aGEKFt4igRuTpjImC\n T+pZGWWkwE0m9WZcKavHGctb1lGctBXdZXg7yUVPVnLxryLZSaBuhnSaL1AhB0P+Am3M\n YH4F/vxl5huxfONNb0ffUWzmRfUIOTNnoXmgmz/KnuEwEnY6EYqvK61Y9uLrk/0SWT2V\n DjgWJ7653KRRBc0TEmYOXb+K/ET3IawQHmvk/P7DtHhnn8kKHLHhwfcwKuoYQRva1Ey5\n EoTA==","X-Gm-Message-State":"AOJu0Yzl1igVY7oBXvn4JjYcq12gmDcIy9+gHRBWjV4bDr9lYF1OIq/M\n scmrIbnlahPHRAIUa7DlCdreNON3rQZ9Rg3j4ZddKRS4XrDuLS0UFRh8hwcoHNZ0tE9uxy78drH\n TtRZtjSA=","X-Gm-Gg":"AeBDieujACNZClgTK9CHVkjmF47a5Wd2egD/qrjUrI6dsFxZy3JLUZ+tGMIHd0yz4Dm\n tLLxWHnp+T4lY8laVSs20rBgheYV7VCx/FNnMwfBhxU05iuJYh1bg/sr+RJzTT4NymOydej2gSC\n Agi20XtgkyStW7BPCNmk60BAcBnkMRpUnJXPN0dAB5PUdG3V9TR8hNdtxz1unc9GRWepXMbnK24\n lc5p2mc1XVuASUc5BiEKzY4MRKSxQQbtl7R2v7k/jfT5PQDf9eo3ODvt1vJtYr8iOgRg4vWtx4S\n Y69f93rzXLBPFCGJFIPrgzbbYpVFpiKFYBnJkwJOb94NT9lOIqbvcj7ha5QqBjW+NuU2xccGLcu\n ZYskPt2lnr3ORwwsddlT6CRB4su2l2sEKouAzqXluB2RSWBh7oeKeM+N1rafswCo7xVW3gxX4Id\n Ob+eq9l0muMchQ9Wvd0sq3k7AScbFxDhaTRQBIj0wJGBjxo3rmpTQn40phAOcmlspZl1A=","X-Received":"by 2002:a05:6a00:1d99:b0:82c:dc9c:e765 with SMTP id\n d2e1a72fcca58-82dcc60c5demr1000645b3a.0.1775683324698;\n Wed, 08 Apr 2026 14:22:04 -0700 (PDT)","Message-ID":"<fc59c646-a503-42f1-9e3b-fb73cae0b6bd@linaro.org>","Date":"Thu, 9 Apr 2026 07:21:58 +1000","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 1/2] linux-user/arm: Improve get_user_code_u32 and usage","From":"Richard Henderson <richard.henderson@linaro.org>","To":"qemu-devel@nongnu.org","Cc":"pierrick.bouvier@linaro.org, qemu-arm@nongnu.org,\n Peter Maydell <peter.maydell@linaro.org>","References":"<20260408013309.56122-1-richard.henderson@linaro.org>\n <20260408013309.56122-2-richard.henderson@linaro.org>","Content-Language":"en-US","In-Reply-To":"<20260408013309.56122-2-richard.henderson@linaro.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Received-SPF":"pass client-ip=2607:f8b0:4864:20::436;\n envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.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,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]