[bpf-next,v5,3/3] selftests/bpf: Skip callback tests if jit is disabled in test_verifier
Message ID | 20240117111000.12763-4-yangtiezhu@loongson.cn |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-28890-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:42cf:b0:101:a8e8:374 with SMTP id q15csp834164dye; Wed, 17 Jan 2024 03:11:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IGnjrvFwXpv1DsbClcy4Fa0RXsjLFDIBWz0nn6ThZOmCjuUlNLVi0kpG1MomEWn2TyKUOpF X-Received: by 2002:a05:6e02:550:b0:361:92f6:c72f with SMTP id i16-20020a056e02055000b0036192f6c72fmr1558682ils.44.1705489899987; Wed, 17 Jan 2024 03:11:39 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705489899; cv=pass; d=google.com; s=arc-20160816; b=FyCkSFrUosKnYAeSZVhUt19JwbkDbiYiLUzBlgtj6xFyLTf7NaWH/r+hNXa6hKKedC RWthpjewcZVymg9+0n7Wj0ggHh4dx5dCSHSNE+opFtvxHLcxrCElIeXmtQwdurgLPZRE nN4jwbJEarg30XfkaPJXfpez6P39c5naEzL7CYr0c071f3hR8udsd5EGmgPQiHkf8pJO hzS4OxSisXXuC2fltF0RPoXc6b993jT0cqrsxPKVp0jeLQbV3wkg3njxUpuaDx19omax 2Xmm/1izrItjGygbWrJbQ0OOI8LiBb4ZNiDGYdxzUm1+IA7whzp1pJEbeGzGKCDr2LS5 5kvA== 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:references:in-reply-to:message-id :date:subject:cc:to:from; bh=nGoHOx77IC0IWpGhGKKWVdnLI+1o21bPiiG3veH0Uls=; fh=EvR41b01nAjTv94pCV1QdzfpeHL6jIcxejUnN6KALZM=; b=pL7mePMuX8RqE9R2nLoDtJSO9dSjqE6ytahvBOvdkVowWk8jWCvRl+1tR1YlCH0f9J +GdK82B8HSEUSKht9LQ5pj8gZljJvkeiKQyn9pcn8grp5h4ZutweyTOhejR+i89pQpXU dnvLO3PjdeTELKAjhNyt63n+CXrk95t17LR7gToiRT6FUhRHT1DYoGXvqm+FHZ7+ELhl PEZx4jAgDkUmmSnuJaXYVjK03HmonGge0vzA/Okbm8FcXeWETkcmYMuC/hKNU+K6EGim d/O5vxmk4YzAiL/lfmL9DNEK1jQYQf3ZzELp1sLv7uVFbym+MSndAtQGe62Ww/pAUkJE dF+w== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=loongson.cn); spf=pass (google.com: domain of linux-kernel+bounces-28890-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-28890-ouuuleilei=gmail.com@vger.kernel.org" Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id x38-20020a634a26000000b005c200b11630si13535842pga.45.2024.01.17.03.11.39 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jan 2024 03:11:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-28890-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=loongson.cn); spf=pass (google.com: domain of linux-kernel+bounces-28890-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-28890-ouuuleilei=gmail.com@vger.kernel.org" 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 sv.mirrors.kernel.org (Postfix) with ESMTPS id B515528224B for <ouuuleilei@gmail.com>; Wed, 17 Jan 2024 11:11:39 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DDB571EB48; Wed, 17 Jan 2024 11:10:17 +0000 (UTC) Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1A6DE1EB21; Wed, 17 Jan 2024 11:10:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705489816; cv=none; b=NrN0Jrya2clQUELOXNNYmBKOJ86tQqD7f+Qr75rrSAeeqYmyrIviyoqGRTG05oJO5rVGV5h47h9zihWp0zm4N6gtvKrPOpPBc0xJmxstV36TWLlNGuzJXXF3mC80hmqiQYgfTXyCvUzLtfkyrscc21GKMwnlZiiE1pwNnCzkI6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705489816; c=relaxed/simple; bh=Hk5UpisSZLGFNyFw4ZvpOxdO81V2SRW39DUJ6gwVWtc=; h=Received:Received:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:Content-Transfer-Encoding: X-CM-TRANSID:X-CM-SenderInfo:X-Coremail-Antispam; b=NY2XVPJAFDo8jGVjN8EyolkChq7cNrg+fgG6ns1OA2DOUEb3koRKpD0yt4MQC7WY4OqTPQ1oERh4Vvz3XzWYpA1ufGNaTsCGf1Svkt9Ti0cUwab5hA8IB5z0rWhSNGGR2mYPKlu4+VSjh0WdkslLGuQgG6b908v0PAP1yTwIxbw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [113.200.148.30]) by gateway (Coremail) with SMTP id _____8CxruuNtadldiYBAA--.5302S3; Wed, 17 Jan 2024 19:10:05 +0800 (CST) Received: from linux.localdomain (unknown [113.200.148.30]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Bx7c6Jtadl+1MGAA--.32440S5; Wed, 17 Jan 2024 19:10:04 +0800 (CST) From: Tiezhu Yang <yangtiezhu@loongson.cn> To: Alexei Starovoitov <ast@kernel.org>, Daniel Borkmann <daniel@iogearbox.net>, Andrii Nakryiko <andrii@kernel.org> Cc: Eduard Zingerman <eddyz87@gmail.com>, John Fastabend <john.fastabend@gmail.com>, Jiri Olsa <jolsa@kernel.org>, Hou Tao <houtao@huaweicloud.com>, Song Liu <song@kernel.org>, bpf@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v5 3/3] selftests/bpf: Skip callback tests if jit is disabled in test_verifier Date: Wed, 17 Jan 2024 19:10:00 +0800 Message-ID: <20240117111000.12763-4-yangtiezhu@loongson.cn> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240117111000.12763-1-yangtiezhu@loongson.cn> References: <20240117111000.12763-1-yangtiezhu@loongson.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: AQAAf8Bx7c6Jtadl+1MGAA--.32440S5 X-CM-SenderInfo: p1dqw3xlh2x3gn0dqz5rrqw2lrqou0/ X-Coremail-Antispam: 1Uk129KBj93XoWxGFW3tr1UtrW5ur1xGF1fKrX_yoWrXr1fpF WkGF1qkF18XFyI93y2y3WfWF1Yyw1kXayUGryYg3y5Z3WkAr17Xrn7KFy3ZF9xWrWYva4f Zw4xuFW8Gw4UJagCm3ZEXasCq-sJn29KB7ZKAUJUUUUr529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUBIb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_Xr0_Ar1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Gr0_Cr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2kKe7AKxVWUXVWUAwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07 AIYIkI8VC2zVCFFI0UMc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWU tVWrXwAv7VC2z280aVAFwI0_Gr0_Cr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7V AKI48JMxkF7I0En4kS14v26r126r1DMxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY 6r1j6r4UMxCIbckI1I0E14v26r1Y6r17MI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7 xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xII jxv20xvE14v26r4j6ryUMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAIw2 0EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Gr0_Cr1lIxAIcVC2z280aVCY1x02 67AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7IU0epB3UUUUU== X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788335777159632691 X-GMAIL-MSGID: 1788335777159632691 |
Series |
Skip callback tests if jit is disabled in test_verifier
|
|
Commit Message
Tiezhu Yang
Jan. 17, 2024, 11:10 a.m. UTC
If CONFIG_BPF_JIT_ALWAYS_ON is not set and bpf_jit_enable is 0, there exist 6 failed tests. [root@linux bpf]# echo 0 > /proc/sys/net/core/bpf_jit_enable [root@linux bpf]# echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled [root@linux bpf]# ./test_verifier | grep FAIL #106/p inline simple bpf_loop call FAIL #107/p don't inline bpf_loop call, flags non-zero FAIL #108/p don't inline bpf_loop call, callback non-constant FAIL #109/p bpf_loop_inline and a dead func FAIL #110/p bpf_loop_inline stack locations for loop vars FAIL #111/p inline bpf_loop call in a big program FAIL Summary: 768 PASSED, 15 SKIPPED, 6 FAILED The test log shows that callbacks are not allowed in non-JITed programs, interpreter doesn't support them yet, thus these tests should be skipped if jit is disabled, just handle this case in do_test_single(). After including bpf/libbpf_internal.h, there exist some build errors: error: attempt to use poisoned "u32" error: attempt to use poisoned "u64" replace u32 and u64 with __u32 and __u64 to fix them. With this patch: [root@linux bpf]# echo 0 > /proc/sys/net/core/bpf_jit_enable [root@linux bpf]# echo 0 > /proc/sys/kernel/unprivileged_bpf_disabled [root@linux bpf]# ./test_verifier | grep FAIL Summary: 768 PASSED, 21 SKIPPED, 0 FAILED Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Acked-by: Hou Tao <houtao1@huawei.com> --- tools/testing/selftests/bpf/test_verifier.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)
Comments
On Wed, Jan 17, 2024 at 3:10 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote: > [...] > @@ -1622,6 +1624,16 @@ static void do_test_single(struct bpf_test *test, bool unpriv, > alignment_prevented_execution = 0; > > if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { > + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { > + for (i = 0; i < prog_len; i++, prog++) { > + if (!insn_is_pseudo_func(prog)) > + continue; > + printf("SKIP (callbacks are not allowed in non-JITed programs)\n"); > + skips++; > + goto close_fds; > + } > + } > + I would put this chunk above "alignment_prevented_execution = 0;". @@ -1619,6 +1621,16 @@ static void do_test_single(struct bpf_test *test, bool unpriv, goto close_fds; } + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { + for (i = 0; i < prog_len; i++, prog++) { + if (!insn_is_pseudo_func(prog)) + continue; + printf("SKIP (callbacks are not allowed in non-JITed programs)\n"); + skips++; + goto close_fds; + } + } + alignment_prevented_execution = 0; if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { Other than this, Acked-by: Song Liu <song@kernel.org> Thanks, Song
Hi Song, On 1/18/2024 1:20 AM, Song Liu wrote: > On Wed, Jan 17, 2024 at 3:10 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote: > [...] >> @@ -1622,6 +1624,16 @@ static void do_test_single(struct bpf_test *test, bool unpriv, >> alignment_prevented_execution = 0; >> >> if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { >> + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { >> + for (i = 0; i < prog_len; i++, prog++) { >> + if (!insn_is_pseudo_func(prog)) >> + continue; >> + printf("SKIP (callbacks are not allowed in non-JITed programs)\n"); >> + skips++; >> + goto close_fds; >> + } >> + } >> + > I would put this chunk above "alignment_prevented_execution = 0;". > > @@ -1619,6 +1621,16 @@ static void do_test_single(struct bpf_test > *test, bool unpriv, > goto close_fds; > } > > + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { > + for (i = 0; i < prog_len; i++, prog++) { > + if (!insn_is_pseudo_func(prog)) > + continue; > + printf("SKIP (callbacks are not allowed in > non-JITed programs)\n"); > + skips++; > + goto close_fds; > + } > + } > + > alignment_prevented_execution = 0; > > if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { > > Other than this, The check was placed before the checking of expected_ret in v3. However I suggested Tiezhu to move it after the checking of expected_ret due to the following two reasons: 1) when the expected result is REJECT, the return value in about one third of these test cases is -EINVAL. And I think we should not waste the cpu to check the pseudo func and exit prematurely, instead we should let test_verifier check expected_err. 2) As for now all expected_ret of these failed cases are ACCEPT when jit is disabled, so I think it will be enough for current situation and we can revise it later if the checking of pseudo func is too later. So wdyt ? > > Acked-by: Song Liu <song@kernel.org> > > Thanks, > Song > > .
Hi, On Wed, Jan 17, 2024 at 5:11 PM Hou Tao <houtao@huaweicloud.com> wrote: > > Hi Song, > > On 1/18/2024 1:20 AM, Song Liu wrote: > > On Wed, Jan 17, 2024 at 3:10 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote: > > [...] > >> @@ -1622,6 +1624,16 @@ static void do_test_single(struct bpf_test *test, bool unpriv, > >> alignment_prevented_execution = 0; > >> > >> if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { > >> + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { > >> + for (i = 0; i < prog_len; i++, prog++) { > >> + if (!insn_is_pseudo_func(prog)) > >> + continue; > >> + printf("SKIP (callbacks are not allowed in non-JITed programs)\n"); > >> + skips++; > >> + goto close_fds; > >> + } > >> + } > >> + > > I would put this chunk above "alignment_prevented_execution = 0;". > > > > @@ -1619,6 +1621,16 @@ static void do_test_single(struct bpf_test > > *test, bool unpriv, > > goto close_fds; > > } > > > > + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { > > + for (i = 0; i < prog_len; i++, prog++) { > > + if (!insn_is_pseudo_func(prog)) > > + continue; > > + printf("SKIP (callbacks are not allowed in > > non-JITed programs)\n"); > > + skips++; > > + goto close_fds; > > + } > > + } > > + > > alignment_prevented_execution = 0; > > > > if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { > > > > Other than this, > > The check was placed before the checking of expected_ret in v3. However > I suggested Tiezhu to move it after the checking of expected_ret due to I missed this part while reading the history of the set. > the following two reasons: > 1) when the expected result is REJECT, the return value in about one > third of these test cases is -EINVAL. And I think we should not waste > the cpu to check the pseudo func and exit prematurely, instead we should > let test_verifier check expected_err. I was thinking jit_disabled is not a common use case so that it is OK for this path to be a little expensive. > 2) As for now all expected_ret of these failed cases are ACCEPT when jit > is disabled, so I think it will be enough for current situation and we > can revise it later if the checking of pseudo func is too later. That said, I won't object if we ship this version as-is. Thanks, Song
Hi, On 1/18/2024 9:27 AM, Song Liu wrote: > Hi, > > On Wed, Jan 17, 2024 at 5:11 PM Hou Tao <houtao@huaweicloud.com> wrote: >> Hi Song, >> >> On 1/18/2024 1:20 AM, Song Liu wrote: >>> On Wed, Jan 17, 2024 at 3:10 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote: >>> [...] >>>> @@ -1622,6 +1624,16 @@ static void do_test_single(struct bpf_test *test, bool unpriv, >>>> alignment_prevented_execution = 0; >>>> >>>> if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { >>>> + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { >>>> + for (i = 0; i < prog_len; i++, prog++) { >>>> + if (!insn_is_pseudo_func(prog)) >>>> + continue; >>>> + printf("SKIP (callbacks are not allowed in non-JITed programs)\n"); >>>> + skips++; >>>> + goto close_fds; >>>> + } >>>> + } >>>> + >>> I would put this chunk above "alignment_prevented_execution = 0;". >>> >>> @@ -1619,6 +1621,16 @@ static void do_test_single(struct bpf_test >>> *test, bool unpriv, >>> goto close_fds; >>> } >>> >>> + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { >>> + for (i = 0; i < prog_len; i++, prog++) { >>> + if (!insn_is_pseudo_func(prog)) >>> + continue; >>> + printf("SKIP (callbacks are not allowed in >>> non-JITed programs)\n"); >>> + skips++; >>> + goto close_fds; >>> + } >>> + } >>> + >>> alignment_prevented_execution = 0; >>> >>> if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { >>> >>> Other than this, >> The check was placed before the checking of expected_ret in v3. However >> I suggested Tiezhu to move it after the checking of expected_ret due to > I missed this part while reading the history of the set. > >> the following two reasons: >> 1) when the expected result is REJECT, the return value in about one >> third of these test cases is -EINVAL. And I think we should not waste >> the cpu to check the pseudo func and exit prematurely, instead we should >> let test_verifier check expected_err. > I was thinking jit_disabled is not a common use case so that it is OK for > this path to be a little expensive. > >> 2) As for now all expected_ret of these failed cases are ACCEPT when jit >> is disabled, so I think it will be enough for current situation and we >> can revise it later if the checking of pseudo func is too later. > That said, I won't object if we ship this version as-is. I see and thanks for the explanation. > Thanks, > Song
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 1a09fc34d093..c7f57b5b04a7 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -41,6 +41,7 @@ #include "test_btf.h" #include "../../../include/linux/filter.h" #include "testing_helpers.h" +#include "bpf/libbpf_internal.h" #ifndef ENOTSUPP #define ENOTSUPP 524 @@ -74,6 +75,7 @@ 1ULL << CAP_BPF) #define UNPRIV_SYSCTL "kernel/unprivileged_bpf_disabled" static bool unpriv_disabled = false; +static bool jit_disabled; static int skips; static bool verbose = false; static int verif_log_level = 0; @@ -1143,8 +1145,8 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type, } while (*fixup_map_xskmap); } if (*fixup_map_stacktrace) { - map_fds[12] = create_map(BPF_MAP_TYPE_STACK_TRACE, sizeof(u32), - sizeof(u64), 1); + map_fds[12] = create_map(BPF_MAP_TYPE_STACK_TRACE, sizeof(__u32), + sizeof(__u64), 1); do { prog[*fixup_map_stacktrace].imm = map_fds[12]; fixup_map_stacktrace++; @@ -1203,7 +1205,7 @@ static void do_test_fixup(struct bpf_test *test, enum bpf_prog_type prog_type, } if (*fixup_map_reuseport_array) { map_fds[19] = __create_map(BPF_MAP_TYPE_REUSEPORT_SOCKARRAY, - sizeof(u32), sizeof(u64), 1, 0); + sizeof(__u32), sizeof(__u64), 1, 0); do { prog[*fixup_map_reuseport_array].imm = map_fds[19]; fixup_map_reuseport_array++; @@ -1622,6 +1624,16 @@ static void do_test_single(struct bpf_test *test, bool unpriv, alignment_prevented_execution = 0; if (expected_ret == ACCEPT || expected_ret == VERBOSE_ACCEPT) { + if (fd_prog < 0 && saved_errno == EINVAL && jit_disabled) { + for (i = 0; i < prog_len; i++, prog++) { + if (!insn_is_pseudo_func(prog)) + continue; + printf("SKIP (callbacks are not allowed in non-JITed programs)\n"); + skips++; + goto close_fds; + } + } + if (fd_prog < 0) { printf("FAIL\nFailed to load prog '%s'!\n", strerror(saved_errno)); @@ -1844,6 +1856,8 @@ int main(int argc, char **argv) return EXIT_FAILURE; } + jit_disabled = !is_jit_enabled(); + /* Use libbpf 1.0 API mode */ libbpf_set_strict_mode(LIBBPF_STRICT_ALL);