Received: by 2002:ab2:710b:0:b0:1ef:a325:1205 with SMTP id z11csp1404103lql; Tue, 12 Mar 2024 16:59:50 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUZgd2boLcwmYvbROk0fWR2cimTj8A8fhPVtRgUbeLiKGo7S9pIK5dXTVxOtvm85ZtWO6DdkjdiZzeuiITcPCKZI/QmlfGg3zhMWv4Qdg== X-Google-Smtp-Source: AGHT+IH+H8HBJWlr1toxRSYmgo5z5rvYbErYMxk2EC1QTlCELY06RzoGpnu3ODk3knPJTRhppLef X-Received: by 2002:a05:6a00:2e9d:b0:6e6:976d:7f53 with SMTP id fd29-20020a056a002e9d00b006e6976d7f53mr1024031pfb.16.1710287990274; Tue, 12 Mar 2024 16:59:50 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710287990; cv=pass; d=google.com; s=arc-20160816; b=DSlfTjr0TRgJZ1h8oFxgsmv2UEwEBodFrGB/VaxLVuRocdY6jTzNDpp248Os1yqPlL bTbTz9LXRG1JQR6Ce6SRH1Vaf8Trd+hBHndLZO687girE/GwNgc4/hnKLSkNr3ahtEkr on7T1QvWZZjdY24s3ee2cXM/yAaOMNFqUMUD5PSmpjzi8VbSZV8LvAX2hZ+e1s1jRk9Z PauLR2yrusTOGz9LJzXMNnl6ZFXJZ65fHOM6T+4j54HnwpXBTCviH3sz6nOetunSbaLI OM3GTbvNDlTy6691nPe6zrX4tgOyEa+Tz8X8WrhTu7wRdHYym+426v1agQc4lF0Aqx8I Pw2g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=Lotzu8glbCkyvKHyiBPl0QIEkj9pT0hJerm/uy6gzX8=; fh=dF96y5FAtO6HBvo9YE6cqx51NIYgEl8D8Xm8/LL3EzI=; b=feKKXr6a4ZtjJppPWDmRsj5tVen1erAIp6hBn+bnsCt9C9ySFFRlO/AvQ9ul/rn1wD c+VaBQ1df+DbKYHU8DwrCR9Mq9kie7vMiQ6NgH960PjIft0pxXvou8MG+el1/7akIjhh 51MHBjzODFowl/97ZS24MknSvO7Bpv/t/flpAYHk4c2h8xTk723C+lARmnyF4TjXyf3j ETsQAGkx1ueqmH/kl2DRxEMKAtW2lAzPC5kY2gXiK2hEa33tFL46oS9Ssa1mFFQpCoOf Y0cfuQEW7/0A+OjrctpXkK/UZsM6o2HjkfPvbTd0dV27BG65zEO44E7zUAkdjwHgTRy0 4NtQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Q6+PNpqc; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-100951-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-100951-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id l135-20020a633e8d000000b005dbf2871fe3si7905502pga.807.2024.03.12.16.59.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Mar 2024 16:59:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-100951-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Q6+PNpqc; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-100951-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-100951-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 77B96B2163C for ; Tue, 12 Mar 2024 23:59:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 300724D59F; Tue, 12 Mar 2024 23:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q6+PNpqc" Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A64AD1E511; Tue, 12 Mar 2024 23:59:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710287980; cv=none; b=XJRtPQN1q9upjubEzCEMntTZ571McsGfeQIlRUvnOVmgu6gUc4XSX97xUomvZYY3lb5qRBSw7dkAQNPpp8FAQLQ4+wdv7VS6Gs9lnb9EeUMCKdWbbf0muBWRUkbsMdqE548XYlQZIufjaeXTvE5FF5XImRrGK5cPuBw94h6B2E0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710287980; c=relaxed/simple; bh=dT4zxZA60E8FTwqPwl3Zj3F5LVm6iBcDrsHoGtZ5YbI=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=nyBuvx6WVPdrRE4dfgWHyxkZaPJMUYPo4Xhc4w5At5D8w9bIpF/ElocL1eEYDNvYarR/Cl5s3yEtSiB/2UogYjJphoxsEFY+2yg9j3Hkads4qgNAp6h1NZQiHxO5YAwfYGU63WxFPzriqSev3C72NwJzmFthpxpP5UVCZijjTUE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Q6+PNpqc; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-33d38c9ca5bso3244678f8f.2; Tue, 12 Mar 2024 16:59:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710287977; x=1710892777; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Lotzu8glbCkyvKHyiBPl0QIEkj9pT0hJerm/uy6gzX8=; b=Q6+PNpqctrmfy5sv1XggjabzmJx6uYTjFPHq9C5GrrZ18sryRlcxczsPtP2dYAhbjW SpywPDedtvlHLHdMsBArdPV6OvvCRbMt5p3DkIHRsZTNSzRUrTomPxZc5N/a8spaGygA rVhQOIngBmGkkblDdHm3kTmZp+HDFTBhBJl+whaZAh2ekbX2vZE8f7mBn6Fmpcoadyhs XxbbJcjOgq17YgpqYFp5eFNsXmlNJ2QOA+nBed2fofMSBuQYVKgMJgb3VTePw7QG2opM lEfomNbY+VY0sRb8eY0CIi5kxHLEyzHmgDADBlbgQTFTWbZIiSsA7wYTuzufPrKRK8d0 XXjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710287977; x=1710892777; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Lotzu8glbCkyvKHyiBPl0QIEkj9pT0hJerm/uy6gzX8=; b=GruFZcShi1APYpie2wo5oWfcIhYFCdas6Mt3+Mz+4LelTa/MnHFbE4bz99+SjkGInS t/XEBiZhJb011Hbvu/J+ADK36HLBy+q+r+/MOTFV/dUzDs3JfZfITdzHl7XNSQU32yOH 4MI0if3T8Jfk0zXxQyINcOsCIbozaE0F+ln435esxjvYmxIzLKfXiRcKygu0j2SHFO4x nmuDkDVi1oFoBSwkMXru551zC9T9sczgotRgo6VdcDA/2g6e4GhZL51ODmj5Gdsg492Y /27kNUS2bDbE58pG3ON+gl1EJYIqiDsTTTtgFafLi+GrnXvti8Pt0mW/1x5GfMR7uKuF WHLg== X-Forwarded-Encrypted: i=1; AJvYcCVRFz0xGx5p1gXR5szQ0U/bijUuX6v69vOCg5KNUeYjCqm31r/OwDWEopUilDKHFB37FdJGrhojh8/BMNQ/bqBkHo6AbV3uXrTd8XmLa1fv9joAEBDX7OzEra2WczsmxW5Z X-Gm-Message-State: AOJu0YyBO52pAbhfVN+HD/brKHY3qIogpGeSLggw/B/LZCdWYDQueir3 Gu48eZPGFblL2jV9pmyJVNuhBEF8j2cysHe+ZfDgYvbR1Wb9CT6+ X-Received: by 2002:adf:e592:0:b0:33e:afbf:e10b with SMTP id l18-20020adfe592000000b0033eafbfe10bmr652476wrm.3.1710287976590; Tue, 12 Mar 2024 16:59:36 -0700 (PDT) Received: from localhost (54-240-197-231.amazon.com. [54.240.197.231]) by smtp.gmail.com with ESMTPSA id u12-20020a5d6acc000000b0033e7a499deasm7942255wrw.109.2024.03.12.16.59.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2024 16:59:35 -0700 (PDT) From: Puranjay Mohan To: Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , bpf@vger.kernel.org, linux-kernel@vger.kernel.org Cc: puranjay12@gmail.com Subject: [PATCH bpf] bpf, arm64: fix bug in BPF_LDX_MEMSX Date: Tue, 12 Mar 2024 23:59:17 +0000 Message-Id: <20240312235917.103626-1-puranjay12@gmail.com> X-Mailer: git-send-email 2.40.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit A64_LDRSW() takes three registers: Xt, Xn, Xm as arguments and it loads and sign extends the value at address Xn + Xm into register Xt. Currently, the offset is being directly used in place of the tmp register which has the offset already loaded by the last emitted instruction. This will cause JIT failures. The easiest way to reproduce this is to test the following code through test_bpf module: { "BPF_LDX_MEMSX | BPF_W", .u.insns_int = { BPF_LD_IMM64(R1, 0x00000000deadbeefULL), BPF_LD_IMM64(R2, 0xffffffffdeadbeefULL), BPF_STX_MEM(BPF_DW, R10, R1, -7), BPF_LDX_MEMSX(BPF_W, R0, R10, -7), BPF_JMP_REG(BPF_JNE, R0, R2, 1), BPF_ALU64_IMM(BPF_MOV, R0, 0), BPF_EXIT_INSN(), }, INTERNAL, { }, { { 0, 0 } }, .stack_depth = 7, }, We need to use the offset as -7 to trigger this code path, there could be other valid ways to trigger this from proper BPF programs as well. This code is rejected by the JIT because -7 is passed to A64_LDRSW() but it expects a valid register (0 - 31). roott@pjy:~# modprobe test_bpf test_name="BPF_LDX_MEMSX | BPF_W" [11300.490371] test_bpf: test_bpf: set 'test_bpf' as the default test_suite. [11300.491750] test_bpf: #345 BPF_LDX_MEMSX | BPF_W [11300.493179] aarch64_insn_encode_register: unknown register encoding -7 [11300.494133] aarch64_insn_encode_register: unknown register encoding -7 [11300.495292] FAIL to select_runtime err=-524 [11300.496804] test_bpf: Summary: 0 PASSED, 1 FAILED, [0/0 JIT'ed] modprobe: ERROR: could not insert 'test_bpf': Invalid argument Applying this patch fixes the issue. root@pjy:~# modprobe test_bpf test_name="BPF_LDX_MEMSX | BPF_W" [ 292.837436] test_bpf: test_bpf: set 'test_bpf' as the default test_suite. [ 292.839416] test_bpf: #345 BPF_LDX_MEMSX | BPF_W jited:1 156 PASS [ 292.844794] test_bpf: Summary: 1 PASSED, 0 FAILED, [1/1 JIT'ed] Fixes: cc88f540da52 ("bpf, arm64: Support sign-extension load instructions") Signed-off-by: Puranjay Mohan --- arch/arm64/net/bpf_jit_comp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c index c5b461dda438..48b19a233299 100644 --- a/arch/arm64/net/bpf_jit_comp.c +++ b/arch/arm64/net/bpf_jit_comp.c @@ -1256,7 +1256,7 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, } else { emit_a64_mov_i(1, tmp, off, ctx); if (sign_extend) - emit(A64_LDRSW(dst, src_adj, off_adj), ctx); + emit(A64_LDRSW(dst, src, tmp), ctx); else emit(A64_LDR32(dst, src, tmp), ctx); } -- 2.40.1