diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 7bfa2fdb64fbc790719f53902560192fc4c90b5e..59746a9c71fb1fa4b2d86d5087fd0c9eaed91a26 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 902a2d6694b4141ef8e44329793a7090bf6106e0..bd2f5d0b1bf42c0876f00c604583583d80a54542 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