From nobody Mon Feb 9 09:07:51 2026 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=1587417928; cv=none; d=zohomail.com; s=zohoarc; b=T+WlhEHTtl7wuEWGc9KzadkOXQdg1H67LwI+VJYwL8ASfwRUC+x18FDE38DtN20brfpemHv2N4wW795kDBkgEBco3pfI644NQe0emakQXTRizFuMceOm72AOh473CZnOUwp6cG0TKQgCmz7DkFtdiqNiCimoLg++5uQr6omk8fo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587417928; 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=g25xx+IbQ36/3S818ce09veNakgmIRGfyJNXoNjOE3o=; b=JDx4e/6R/ibkon151dyp9hhMr6/4qzf3FSxPZhyMMSl/sADL6gPpf1Ntg+eRa/liLyOZil6UzsOKhrb/R7sQ1qKJ8dKSkfb5bphUCtsHyYYo4JFW1GGCk4KwU5kuJP4/Jbv/7l67gGIIp6LfHdwQ4/Wxrk/Wq9CRykMgzjIRJME= 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 1587417928824993.9187099929522; Mon, 20 Apr 2020 14:25:28 -0700 (PDT) Received: from localhost ([::1]:42682 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQduw-0002Tq-LT for importer@patchew.org; Mon, 20 Apr 2020 17:25:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42090) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdrp-0006nX-8M for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jQdro-0006my-JD for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:13 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:35248) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jQdro-0006k7-5z for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:12 -0400 Received: by mail-wr1-x442.google.com with SMTP id x18so14047698wrq.2 for ; Mon, 20 Apr 2020 14:22:11 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id j10sm823663wmi.18.2020.04.20.14.22.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2020 14:22:10 -0700 (PDT) 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=g25xx+IbQ36/3S818ce09veNakgmIRGfyJNXoNjOE3o=; b=lMhoM1trFpGPR441mTxkus+s2KnaNfFLUfBiME74Lrh2FIwePepyuJXydluRmH8zVf 6dO6gS8jF1T5/vSZ9TM9XfzsEBbJ4/LobmAeR12tT3WKqVcxqd0LisvNRMplMbun8ZWm GHUQwDDDtUrjBRbDCcGIL8mixkjmH/vnjgNGRd6n+0UDgbZYlDtXyRMAHlNi6ikPOXvc eyBmQB/bc/QyXa3U9BoS7iWD4/tmnnBYPCxUWzbADcGnDMnBdDnYH08NxMAADzXmT6hy RmWXFzch0+vMV0QPR4WaAAMzw5sgcVd8TCTkvkuj8uYrkQOx2uFKz0yn2pfk0muLLqdS uqhA== 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=g25xx+IbQ36/3S818ce09veNakgmIRGfyJNXoNjOE3o=; b=I9HsS9wjv0NgElQnZco6cG6xmOGHVaMDQKBjc9Ptj1fl9mJmV9CEMPtDpodHRRsCzg 0KxZs0fThNGVOwP6WzPb4bC6i26WVSjX3C7q4yei0tq1gX5VUb74bKtiZwA7if6R4q0X m5rSusev/5TAcGJ+yhgNsIbQvtis52nUY//hzi86K67k4jFZvvskLaCzAHHA8r+F0dzs LBAhhjFLgafaD5NXUz9OPIH3uLEpnEuX22Acg3ZMsvAXn6JI9s3VEV8DGplr+Mxfmv/T ohWmtf87W8fIQV1+nFB1Lwfs2VKZzBRQnYWAq56CHaxtOhlNR5H29eZwN5YCJOcNyqaZ 5jwg== X-Gm-Message-State: AGi0PuaHbHdTLiEITleoDU7QnSGe5n+G2y4W8JJjU52FVuWPwXUZGq47 A4VgWZr93nUC7m3SX/NzMr7f5A== X-Google-Smtp-Source: APiQypKgmdm6zB/NJ1cX+17Ujgca+HhU4wMKq/TJWubEN/8GWqgdqXGiMlIMPtdODC7e45/SyOj1Fw== X-Received: by 2002:adf:9cc8:: with SMTP id h8mr19974679wre.167.1587417730598; Mon, 20 Apr 2020 14:22:10 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 1/4] linux-user/arm: BKPT should cause SIGTRAP, not be a syscall Date: Mon, 20 Apr 2020 22:22:03 +0100 Message-Id: <20200420212206.12776-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200420212206.12776-1-peter.maydell@linaro.org> References: <20200420212206.12776-1-peter.maydell@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=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::442 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: omerg681@gmail.com, Riku Voipio , Laurent Vivier 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" In linux-user/arm/cpu-loop.c we incorrectly treat EXCP_BKPT similarly to EXCP_SWI, which means that if the guest executes a BKPT insn then QEMU will perform a syscall for it (which syscall depends on what value happens to be in r7...). The correct behaviour is that the guest process should take a SIGTRAP. This code has been like this (more or less) since commit 06c949e62a098f in 2006 which added BKPT in the first place. This is probably because at the time the same code path was used to handle both Linux syscalls and semihosting calls, and (on M profile) BKPT with a suitable magic number is used for semihosting calls. But these days we've moved handling of semihosting out to an entirely different codepath, so we can fix this bug by simply removing this handling of EXCP_BKPT and instead making it deliver a SIGTRAP like EXCP_DEBUG (as we do already on aarch64). Reported-by: Fixes: https://bugs.launchpad.net/qemu/+bug/1873898 Signed-off-by: Peter Maydell Reviewed-by: Edgar E. Iglesias Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- linux-user/arm/cpu_loop.c | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index cf618daa1ca..82d0dd3c312 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -295,32 +295,17 @@ void cpu_loop(CPUARMState *env) } break; case EXCP_SWI: - case EXCP_BKPT: { env->eabi =3D 1; /* system call */ - if (trapnr =3D=3D EXCP_BKPT) { - if (env->thumb) { - /* FIXME - what to do if get_user() fails? */ - get_user_code_u16(insn, env->regs[15], env); - n =3D insn & 0xff; - env->regs[15] +=3D 2; - } else { - /* FIXME - what to do if get_user() fails? */ - get_user_code_u32(insn, env->regs[15], env); - n =3D (insn & 0xf) | ((insn >> 4) & 0xff0); - env->regs[15] +=3D 4; - } + if (env->thumb) { + /* FIXME - what to do if get_user() fails? */ + get_user_code_u16(insn, env->regs[15] - 2, env); + n =3D insn & 0xff; } else { - if (env->thumb) { - /* FIXME - what to do if get_user() fails? */ - get_user_code_u16(insn, env->regs[15] - 2, env); - n =3D insn & 0xff; - } else { - /* FIXME - what to do if get_user() fails? */ - get_user_code_u32(insn, env->regs[15] - 4, env); - n =3D insn & 0xffffff; - } + /* FIXME - what to do if get_user() fails? */ + get_user_code_u32(insn, env->regs[15] - 4, env); + n =3D insn & 0xffffff; } =20 if (n =3D=3D ARM_NR_cacheflush) { @@ -396,6 +381,7 @@ void cpu_loop(CPUARMState *env) } break; case EXCP_DEBUG: + case EXCP_BKPT: excp_debug: info.si_signo =3D TARGET_SIGTRAP; info.si_errno =3D 0; --=20 2.20.1 From nobody Mon Feb 9 09:07:51 2026 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=1587417816; cv=none; d=zohomail.com; s=zohoarc; b=msm4p6npmPUcRky1lDRS1W9N4jdpPQsXSha5Nq1g/ngdvgPH/sobZGTEetEd6uS8Y/VBowMv+4XlJwbkLo3oFGIFSv6JwhwvCuSiPlVBsI02aMnldPQdLQ4I5VKPn9MHrWR00TTISwk3w/Vu9qkLA99aF3BeQD6YIMqAgbH6J+w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587417816; 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=KOErd88B3Ihy9IyTZFkOsxrNfUtKAovKUtVCpnPaODQ=; b=C9s2+vxVJXUZTf33seXKhdQ6FSE6mWxaWhV0CHeLXnwAOrSOvNU7HnXRrxk47orR3ECFwkb/RZqdMnNrdgPhTtenPPA5TgVFtkJGMjAKQtE1FMNhEk/FD1Y/uGEbVCoV9Lqvi+KuPde4KMMIF5n0mJo/AMZKcnM5E7Qgvl6sBEw= 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 158741781619839.6204537757792; Mon, 20 Apr 2020 14:23:36 -0700 (PDT) Received: from localhost ([::1]:42636 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdt8-0008Lz-Lx for importer@patchew.org; Mon, 20 Apr 2020 17:23:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42110) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdrq-0006na-10 for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jQdrp-0006qt-GN for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:13 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:42853) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jQdrp-0006m8-2M for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:13 -0400 Received: by mail-wr1-x443.google.com with SMTP id j2so13992218wrs.9 for ; Mon, 20 Apr 2020 14:22:12 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id j10sm823663wmi.18.2020.04.20.14.22.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2020 14:22:11 -0700 (PDT) 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=KOErd88B3Ihy9IyTZFkOsxrNfUtKAovKUtVCpnPaODQ=; b=EM+ilBcBpdhJU/TQU193eMLKfo1Rs2Cgxf352fuHGupkA8tuLIFqHGtk/OAvzllU++ xU05slbQE0dtdboUg1PtvGIRxNQJ6yNDlDzOC0BTMUurrrisSruqkkNXHoCU8FRnKydI Lpv2FbFF75Oa0uGvgrUQPH4DhOrCaIoyeJ6TuXLf7k0axW6CPTDRDk3tkxBNFqZ1+5ad T71wl65Ct5W6UxpWxTEw/bRwvt9+cK65nbvqnZrO3hG5C4S3wU3tjKSUVQHHRaECSjZI TSwPbFSFchhB2ZXvhTeE+VY91SntvGXnChF9ki03VS//zHxMFc0rYrQ5r4gt/XDnE4Cq cLkA== 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=KOErd88B3Ihy9IyTZFkOsxrNfUtKAovKUtVCpnPaODQ=; b=stDEAhT1qid+esn04Ot+AG6n3swRKoSFBzQaUU6FuDO3WrJnP+d1goEcBaHOMJV+rG W81z4vPvt5OUMvPpd0OPBmhF5tBoP58//YkYgYlbqQeYMqn47TY1f09E1M0PkFldC6GK ouahxt9E9TEtpupM9xC+sPTrzJneLpsRgVF/hWIZXGtzgZFsVlTGcOoUzO3GmlQ3DJWi QXomN5E3sxmitVu1kBeA/vkCsvCLhz8OKbX8Lm76+ljEE8WL9dOR/qLbxAC42wn995IH 7fZGBF0lNpEuhAnpwqKIvng62gh7ZEllg0gF8YVEn7DcHpk2dsh6FF9n2frqVH2aZZbO FlzQ== X-Gm-Message-State: AGi0Pua9ek6KbeqKXSzT1j9GloTRLCrfNQ9ksSGShLpiGj8rH9Y/unTq UlE6rJghsWN+dyhhTmYcObqovaW0tOjwbA== X-Google-Smtp-Source: APiQypJs9AcGKA03+QZPmqsYPCwgmRuBjZ/mjimpWwpv3YZhECRbn/IFOumsjwn7MGNIrScd3Zsp3g== X-Received: by 2002:a5d:6091:: with SMTP id w17mr20032471wrt.382.1587417731746; Mon, 20 Apr 2020 14:22:11 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 2/4] linux-user/arm: Remove bogus SVC 0xf0002 handling Date: Mon, 20 Apr 2020 22:22:04 +0100 Message-Id: <20200420212206.12776-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200420212206.12776-1-peter.maydell@linaro.org> References: <20200420212206.12776-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::443 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: omerg681@gmail.com, Riku Voipio , Laurent Vivier 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 incorrectly treat SVC 0xf0002 as a cacheflush request (which is a NOP for QEMU). This is the wrong syscall number, because in the svc-immediate OABI syscall numbers are all offset by the ARM_SYSCALL_BASE value and so the correct insn is SVC 0x9f0002. (This is handled further down in the code with the other Arm-specific syscalls like NR_breakpoint.) When this code was initially added in commit 6f1f31c069b20611 in 2004, ARM_NR_cacheflush was defined as (ARM_SYSCALL_BASE + 0xf0000 + 2) so the value in the comparison took account of the extra 0x900000 offset. In commit fbb4a2e371f2fa7 in 2008, the ARM_SYSCALL_BASE was removed from the definition of ARM_NR_cacheflush and handling for this group of syscalls was added below the point where we subtract ARM_SYSCALL_BASE from the SVC immediate value. However that commit forgot to remove the now-obsolete earlier handling code. Remove the spurious ARM_NR_cacheflush condition. Signed-off-by: Peter Maydell Reviewed-by: Edgar E. Iglesias Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- linux-user/arm/cpu_loop.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 82d0dd3c312..025887d6b86 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -308,9 +308,7 @@ void cpu_loop(CPUARMState *env) n =3D insn & 0xffffff; } =20 - if (n =3D=3D ARM_NR_cacheflush) { - /* nop */ - } else if (n =3D=3D 0 || n >=3D ARM_SYSCALL_BASE || env->t= humb) { + if (n =3D=3D 0 || n >=3D ARM_SYSCALL_BASE || env->thumb) { /* linux syscall */ if (env->thumb || n =3D=3D 0) { n =3D env->regs[7]; --=20 2.20.1 From nobody Mon Feb 9 09:07:51 2026 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=1587417944; cv=none; d=zohomail.com; s=zohoarc; b=fEKpboL83lH3VnfPw1OEZ2HmHcyOzFM2lYVvSxdVetg1l0Sq91OU/04SF5G5D9NwexVAtmsAirE3NKDtFASUTYmph2ZKSNARO+wtStWAMdTbPNblF8dyvulvuHn/B/LJrc0o0GQQJgUuhRBZnhXUJ5l2ApUb+RfHkSmjewNNtk4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587417944; 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=yNdZAQTtVSGKFWzXSVWtiZmV8YVbig1mvz+Yew2q/QA=; b=D4hgNMX7LjapEfsfEsG6hkLFGL6Tl/cRTTkipvVKZp4xd37ZpVWdesOPyxT5Rcqa2xhfEQiM/br0eqOEEN8FnaLWTrdsr/tEeG4Yuo7PSCKwfqAUxqOYiHEBvVO9YU+iRZlw5f3D3uPoztM6jsQFK1jXCXXjU2dLqDS4QxdWCCY= 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 1587417944881545.337762868685; Mon, 20 Apr 2020 14:25:44 -0700 (PDT) Received: from localhost ([::1]:42686 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdvD-000303-Lj for importer@patchew.org; Mon, 20 Apr 2020 17:25:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42152) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdrs-0006pk-Ja for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jQdrq-0006uo-R3 for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:15 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:40381) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jQdrq-0006qg-9R for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:14 -0400 Received: by mail-wm1-x342.google.com with SMTP id u16so1230081wmc.5 for ; Mon, 20 Apr 2020 14:22:13 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id j10sm823663wmi.18.2020.04.20.14.22.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2020 14:22:12 -0700 (PDT) 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=yNdZAQTtVSGKFWzXSVWtiZmV8YVbig1mvz+Yew2q/QA=; b=pJBIHjOPTCCxVZgGAqqUME2UvWSREYhZe0N+VyuBRBuJ3hAx1gVgSShcObaBxmKpcN Pn/2oZC+pvZeWktQ60y0GDZWrTvT6zbZ6u9CujrLX3mieCwzVwbW9HICx2xU+0YQZnI+ tdfUseBXjk1DvkslHbNIge9LMbxRszIA3AMa2y4dFzhTLuIdx1YxbrkBa1/Ycbbeg6Q+ 7uJ/yFMPTALjY33rMdeucWBSzhY5oxV6tGlWPTskNXx+Rdn04E58XR9XKWXEhP2h3yKL zGirdf3JpUyV0qcDhXFZ868RVjGN/TZHyJWv0Nz7iMgFyVw2ZaN6Hdw0mICKsBZ/NZfs zxRg== 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=yNdZAQTtVSGKFWzXSVWtiZmV8YVbig1mvz+Yew2q/QA=; b=QLiTR4TF470y9I1beYHAZUKULA21Tm9EJNn2ZST9RUoaGJgIzfedhH27wBblIVOAfT YU2REN99Mk73oU/MqpGMd4vRKxBeuj2Xqo6SHtoC62zOHMmDiBWR2If0e0Mzc5sSuq+u lnmRMba3WHF78fLWWgY+H8gW+UXQ+YJ7pg7XNoKDMuY4eQHyVTMCUrpxRRXVm4IJ+/oL 00zjIHmrvNceTKvDSEGeO7KT60NdnXB/pUQr+4sPScTMO4Db3RcVZpG5U3XbFjD36ysq e8/a+I1poF54ATBSBC8Km6cGnWlcHVa6eAnToQ5TcJkoiMlANIoMG/FQMqMhI2E/ChUm ZtxQ== X-Gm-Message-State: AGi0PubWyu3omJ5IEls4Y1j6ZyH0j707sTBnmlcXlf9InMN4LwjoCJTZ Grs9L+SJ5W18UwSuPURfkkL8PQ== X-Google-Smtp-Source: APiQypJ60am4+p0+Six+R+on2YVmfCRRdF/feU7VEj4DOdd12CdcsXLvHz3rQ/F4wx5WTWnTZyoA1A== X-Received: by 2002:a05:600c:c9:: with SMTP id u9mr1343790wmm.15.1587417732839; Mon, 20 Apr 2020 14:22:12 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 3/4] linux-user/arm: Handle invalid arm-specific syscalls correctly Date: Mon, 20 Apr 2020 22:22:05 +0100 Message-Id: <20200420212206.12776-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200420212206.12776-1-peter.maydell@linaro.org> References: <20200420212206.12776-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::342 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: omerg681@gmail.com, Riku Voipio , Laurent Vivier 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 kernel has different handling for syscalls with invalid numbers that are in the "arm-specific" range 0x9f0000 and up: * 0x9f0000..0x9f07ff return -ENOSYS if not implemented * other out of range syscalls cause a SIGILL (see the kernel's arch/arm/kernel/traps.c:arm_syscall()) Implement this distinction. (Note that our code doesn't look quite like the kernel's, because we have removed the 0x900000 prefix by this point, whereas the kernel retains it in arm_syscall().) Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- linux-user/arm/cpu_loop.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 025887d6b86..f042108b0be 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -332,10 +332,32 @@ void cpu_loop(CPUARMState *env) env->regs[0] =3D cpu_get_tls(env); break; default: - qemu_log_mask(LOG_UNIMP, - "qemu: Unsupported ARM syscall: = 0x%x\n", - n); - env->regs[0] =3D -TARGET_ENOSYS; + if (n < 0xf0800) { + /* + * Syscalls 0xf0000..0xf07ff (or 0x9f0000.. + * 0x9f07ff in OABI numbering) are defined + * to return -ENOSYS rather than raising + * SIGILL. Note that we have already + * removed the 0x900000 prefix. + */ + qemu_log_mask(LOG_UNIMP, + "qemu: Unsupported ARM syscall: 0x%x\n= ", + n); + env->regs[0] =3D -TARGET_ENOSYS; + } else { + /* Otherwise SIGILL */ + info.si_signo =3D TARGET_SIGILL; + info.si_errno =3D 0; + info.si_code =3D TARGET_ILL_ILLTRP; + info._sifields._sigfault._addr =3D env->re= gs[15]; + if (env->thumb) { + info._sifields._sigfault._addr -=3D 2; + } else { + info._sifields._sigfault._addr -=3D 2; + } + queue_signal(env, info.si_signo, + QEMU_SI_FAULT, &info); + } break; } } else { --=20 2.20.1 From nobody Mon Feb 9 09:07:51 2026 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=1587417817; cv=none; d=zohomail.com; s=zohoarc; b=bitrX/b4Wf+68+DCDnwFmZIwFy0/ZdWp/B8xZi7kWPhTA9+bkgYcMuEQ1X5MpLTg4xXJsb7htnONzevCWZreXZ/5g954B+1QwrtjQ9zXvid+afiKTnlUiHuZXgbbusAX6ETDVLpFbmW28MYJ4bGCgPsJDoKBJ3PHDjsqqKKw3u4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1587417817; 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=3k0eiwTvqNDKNYgwZlfwBAueoo+movlXnk0iRVx+pjg=; b=Xr/ejgFHxWDboXFgGBbiqliDyjm56HBFO/xlXrxh91WqMNh9eEWn+RXw7kypffMKuzHqbr2NXQyMEtIJy4c4g8BRBA6EQ33gWX/RdvmX5IUuRh+L21Cg9NixqbhlRMC50QtDjIgfH6mL322GHxCBLSPxTQkbgZIgZiddI2rgfhc= 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 1587417817989939.2547132623481; Mon, 20 Apr 2020 14:23:37 -0700 (PDT) Received: from localhost ([::1]:42640 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdtA-0008OT-Mw for importer@patchew.org; Mon, 20 Apr 2020 17:23:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42156) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jQdrs-0006py-NN for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jQdrr-0006x2-Tu for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:16 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:40382) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jQdrr-0006uA-Fy for qemu-devel@nongnu.org; Mon, 20 Apr 2020 17:22:15 -0400 Received: by mail-wm1-x343.google.com with SMTP id u16so1230128wmc.5 for ; Mon, 20 Apr 2020 14:22:15 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id j10sm823663wmi.18.2020.04.20.14.22.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2020 14:22:13 -0700 (PDT) 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=3k0eiwTvqNDKNYgwZlfwBAueoo+movlXnk0iRVx+pjg=; b=pZCMXfsrCrWo8tR6l3NEQ7ZXI+8biNl037efUSEHNwL9vX+nqH56Bl2EG5Ci0dfmZe T2oD5/GnNcSAfsk9L/wnOYB2fZ0mibtcPzHhRAjKmUO/XYg1QcUnA1C/O3Lx6LTFucD0 m6eGT3yXT+FLIe/lxG2RJ7ieK3sHBi+s3564NyxIE+Bn2JZx+ieG+oP7T1Ho9ulDfziy f/f1peGdkE7zWkN1ETWsD3EVCdXUORwrgbPyDu5/RKd0xcrRtBAGEkEyytgrQbi7RVBD EObKnyXao8Hi+u0y/hzukZXzUI9EhmRIdHAubwtecfdSG8378sP6yfcF8ojDse1+aMjZ nI6A== 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=3k0eiwTvqNDKNYgwZlfwBAueoo+movlXnk0iRVx+pjg=; b=R/taYuFhdy7efNmD7AVYCe+f6uVkJC4lKwGi9Q81L51sPrR/HTt420Ea2T3nx5p1q1 bJq1zuOqEEkbULmhRpWznSKX+HFNSnSZMujIXPJ70/kSObmBbxjFG4lBWj7K3RYnTK6j vJT/yR7mFa5eifLatk+dxPSgwhnCLP0PO+irf6NlpZLbJZRSkuBznecdONlioURv0xPj B+LgjBCM9YO1mbQ8ePrc2ppgbiSfqFOzyzhYewWDyfkg3M5497AnClSFvo5Tz23scBmJ 6OtpCTFY2E6c7tdxwr3b8wTbb+XLPyXbDQVXKUGQd/KmlBRZYlc5KmQZnCPXz2EIm9z+ SdKA== X-Gm-Message-State: AGi0PuapGFGCWeglb16Rp9Gpk40uv4rM+QsKMqDjFey0+ZnDqTPIUXGF ErrwnZqo905iE1Unt6DbGug8SA== X-Google-Smtp-Source: APiQypIvA6AxPvw/QiVN/BPisAsZdeeqpSqQH3Sxao9FdITrvGyxxJj94ua5QGAYj4hbSZbf+4R4GA== X-Received: by 2002:a1c:a58b:: with SMTP id o133mr1337278wme.5.1587417734055; Mon, 20 Apr 2020 14:22:14 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 4/4] linux-user/arm: Fix identification of syscall numbers Date: Mon, 20 Apr 2020 22:22:06 +0100 Message-Id: <20200420212206.12776-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200420212206.12776-1-peter.maydell@linaro.org> References: <20200420212206.12776-1-peter.maydell@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=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 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: omerg681@gmail.com, Riku Voipio , Laurent Vivier 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" Our code to identify syscall numbers has some issues: * for Thumb mode, we never need the immediate value from the insn, but we always read it anyway * bad immediate values in the svc insn should cause a SIGILL, but we were abort()ing instead (via "goto error") We can fix both these things by refactoring the code that identifies the syscall number to more closely follow the kernel COMPAT_OABI code: * for Thumb it is always r7 * for Arm, if the immediate value is 0, then this is an EABI call with the syscall number in r7 * otherwise, we XOR the immediate value with 0x900000 (ARM_SYSCALL_BASE for QEMU; __NR_OABI_SYSCALL_BASE in the kernel), which converts valid syscall immediates into the desired value, and puts all invalid immediates in the range 0x100000 or above * then we can just let the existing "value too large, deliver SIGILL" case handle invalid numbers, and drop the 'goto error' Signed-off-by: Peter Maydell Reviewed-by: Edgar E. Iglesias --- You might prefer to read this patch with an "ignore whitespace changes" diff, as a big chunk of code is no longer inside an if() and got re-indented out one level. --- linux-user/arm/cpu_loop.c | 143 ++++++++++++++++++++------------------ 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index f042108b0be..eeb042829e2 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -299,85 +299,96 @@ void cpu_loop(CPUARMState *env) env->eabi =3D 1; /* system call */ if (env->thumb) { - /* FIXME - what to do if get_user() fails? */ - get_user_code_u16(insn, env->regs[15] - 2, env); - n =3D insn & 0xff; + /* Thumb is always EABI style with syscall number in r= 7 */ + n =3D env->regs[7]; } else { + /* + * Equivalent of kernel CONFIG_OABI_COMPAT: read the + * Arm SVC insn to extract the immediate, which is the + * syscall number in OABI. + */ /* FIXME - what to do if get_user() fails? */ get_user_code_u32(insn, env->regs[15] - 4, env); n =3D insn & 0xffffff; - } - - if (n =3D=3D 0 || n >=3D ARM_SYSCALL_BASE || env->thumb) { - /* linux syscall */ - if (env->thumb || n =3D=3D 0) { + if (n =3D=3D 0) { + /* zero immediate: EABI, syscall number in r7 */ n =3D env->regs[7]; } else { - n -=3D ARM_SYSCALL_BASE; + /* + * This XOR matches the kernel code: an immediate + * in the valid range (0x900000 .. 0x9fffff) is + * converted into the correct EABI-style syscall + * number; invalid immediates end up as values + * > 0xfffff and are handled below as out-of-range. + */ + n ^=3D ARM_SYSCALL_BASE; env->eabi =3D 0; } - if ( n > ARM_NR_BASE) { - switch (n) { - case ARM_NR_cacheflush: - /* nop */ - break; - case ARM_NR_set_tls: - cpu_set_tls(env, env->regs[0]); - env->regs[0] =3D 0; - break; - case ARM_NR_breakpoint: - env->regs[15] -=3D env->thumb ? 2 : 4; - goto excp_debug; - case ARM_NR_get_tls: - env->regs[0] =3D cpu_get_tls(env); - break; - default: - if (n < 0xf0800) { - /* - * Syscalls 0xf0000..0xf07ff (or 0x9f0000.. - * 0x9f07ff in OABI numbering) are defined - * to return -ENOSYS rather than raising - * SIGILL. Note that we have already - * removed the 0x900000 prefix. - */ - qemu_log_mask(LOG_UNIMP, - "qemu: Unsupported ARM syscall: 0x%x\n= ", - n); - env->regs[0] =3D -TARGET_ENOSYS; + } + + if (n > ARM_NR_BASE) { + switch (n) { + case ARM_NR_cacheflush: + /* nop */ + break; + case ARM_NR_set_tls: + cpu_set_tls(env, env->regs[0]); + env->regs[0] =3D 0; + break; + case ARM_NR_breakpoint: + env->regs[15] -=3D env->thumb ? 2 : 4; + goto excp_debug; + case ARM_NR_get_tls: + env->regs[0] =3D cpu_get_tls(env); + break; + default: + if (n < 0xf0800) { + /* + * Syscalls 0xf0000..0xf07ff (or 0x9f0000.. + * 0x9f07ff in OABI numbering) are defined + * to return -ENOSYS rather than raising + * SIGILL. Note that we have already + * removed the 0x900000 prefix. + */ + qemu_log_mask(LOG_UNIMP, + "qemu: Unsupported ARM syscall: 0x%x\n", + n); + env->regs[0] =3D -TARGET_ENOSYS; + } else { + /* + * Otherwise SIGILL. This includes any SWI with + * immediate not originally 0x9fxxxx, because + * of the earlier XOR. + */ + info.si_signo =3D TARGET_SIGILL; + info.si_errno =3D 0; + info.si_code =3D TARGET_ILL_ILLTRP; + info._sifields._sigfault._addr =3D env->regs[1= 5]; + if (env->thumb) { + info._sifields._sigfault._addr -=3D 2; } else { - /* Otherwise SIGILL */ - info.si_signo =3D TARGET_SIGILL; - info.si_errno =3D 0; - info.si_code =3D TARGET_ILL_ILLTRP; - info._sifields._sigfault._addr =3D env->re= gs[15]; - if (env->thumb) { - info._sifields._sigfault._addr -=3D 2; - } else { - info._sifields._sigfault._addr -=3D 2; - } - queue_signal(env, info.si_signo, - QEMU_SI_FAULT, &info); + info._sifields._sigfault._addr -=3D 2; } - break; - } - } else { - ret =3D do_syscall(env, - n, - env->regs[0], - env->regs[1], - env->regs[2], - env->regs[3], - env->regs[4], - env->regs[5], - 0, 0); - if (ret =3D=3D -TARGET_ERESTARTSYS) { - env->regs[15] -=3D env->thumb ? 2 : 4; - } else if (ret !=3D -TARGET_QEMU_ESIGRETURN) { - env->regs[0] =3D ret; + queue_signal(env, info.si_signo, + QEMU_SI_FAULT, &info); } + break; } } else { - goto error; + ret =3D do_syscall(env, + n, + env->regs[0], + env->regs[1], + env->regs[2], + env->regs[3], + env->regs[4], + env->regs[5], + 0, 0); + if (ret =3D=3D -TARGET_ERESTARTSYS) { + env->regs[15] -=3D env->thumb ? 2 : 4; + } else if (ret !=3D -TARGET_QEMU_ESIGRETURN) { + env->regs[0] =3D ret; + } } } break; --=20 2.20.1