From 61eef5677eb636f510c4442e4402759d3c2106aa Mon Sep 17 00:00:00 2001
From: Luis Gerhorst <privat@luisgerhorst.de>
Date: Tue, 20 Jul 2021 16:55:38 +0200
Subject: [PATCH] bpftask: Mark task/iterdents64 programs as sleepable

---
 kernel/bpf/verifier.c  | 5 +++--
 tools/lib/bpf/libbpf.c | 6 ++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 7bfa2fdb64fbc..59746a9c71fb1 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -11870,8 +11870,9 @@ static int check_attach_btf_id(struct bpf_verifier_env *env)
 	u64 key;
 
 	if (prog->aux->sleepable && prog->type != BPF_PROG_TYPE_TRACING &&
-	    prog->type != BPF_PROG_TYPE_LSM) {
-		verbose(env, "Only fentry/fexit/fmod_ret and lsm programs can be sleepable\n");
+	    prog->type != BPF_PROG_TYPE_LSM && prog->type != BPF_PROG_TYPE_TASK &&
+	    prog->type != BPF_PROG_TYPE_ITERDENTS64) {
+		verbose(env, "Only fentry/fexit/fmod_ret, lsm, and task/iterdents64 programs can be sleepable\n");
 		return -EINVAL;
 	}
 
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 902a2d6694b41..bd2f5d0b1bf42 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -8615,8 +8615,10 @@ static const struct bpf_sec_def section_defs[] = {
 	BPF_PROG_SEC("struct_ops",		BPF_PROG_TYPE_STRUCT_OPS),
 	BPF_EAPROG_SEC("sk_lookup/",		BPF_PROG_TYPE_SK_LOOKUP,
 						BPF_SK_LOOKUP),
-	BPF_PROG_SEC("task", BPF_PROG_TYPE_TASK),
-	BPF_PROG_SEC("iterdents64", BPF_PROG_TYPE_ITERDENTS64),
+	SEC_DEF("task", TASK,
+		.is_sleepable = true),
+	SEC_DEF("iterdents64", ITERDENTS64,
+		.is_sleepable = true),
 };
 
 #undef BPF_PROG_SEC_IMPL
-- 
GitLab