xref: /linux/tools/testing/selftests/bpf/progs/file_reader_fail.c (revision 015e7b0b0e8e51f7321ec2aafc1d7fc0a8a5536f)
1*784cdf93SMykyta Yatsenko // SPDX-License-Identifier: GPL-2.0
2*784cdf93SMykyta Yatsenko /* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
3*784cdf93SMykyta Yatsenko 
4*784cdf93SMykyta Yatsenko #include <vmlinux.h>
5*784cdf93SMykyta Yatsenko #include <string.h>
6*784cdf93SMykyta Yatsenko #include <stdbool.h>
7*784cdf93SMykyta Yatsenko #include <bpf/bpf_tracing.h>
8*784cdf93SMykyta Yatsenko #include "bpf_misc.h"
9*784cdf93SMykyta Yatsenko 
10*784cdf93SMykyta Yatsenko char _license[] SEC("license") = "GPL";
11*784cdf93SMykyta Yatsenko 
12*784cdf93SMykyta Yatsenko int err;
13*784cdf93SMykyta Yatsenko void *user_ptr;
14*784cdf93SMykyta Yatsenko 
15*784cdf93SMykyta Yatsenko SEC("lsm/file_open")
16*784cdf93SMykyta Yatsenko __failure
17*784cdf93SMykyta Yatsenko __msg("Unreleased reference id=")
on_nanosleep_unreleased_ref(void * ctx)18*784cdf93SMykyta Yatsenko int on_nanosleep_unreleased_ref(void *ctx)
19*784cdf93SMykyta Yatsenko {
20*784cdf93SMykyta Yatsenko 	struct task_struct *task = bpf_get_current_task_btf();
21*784cdf93SMykyta Yatsenko 	struct file *file = bpf_get_task_exe_file(task);
22*784cdf93SMykyta Yatsenko 	struct bpf_dynptr dynptr;
23*784cdf93SMykyta Yatsenko 
24*784cdf93SMykyta Yatsenko 	if (!file)
25*784cdf93SMykyta Yatsenko 		return 0;
26*784cdf93SMykyta Yatsenko 
27*784cdf93SMykyta Yatsenko 	err = bpf_dynptr_from_file(file, 0, &dynptr);
28*784cdf93SMykyta Yatsenko 	return err ? 1 : 0;
29*784cdf93SMykyta Yatsenko }
30*784cdf93SMykyta Yatsenko 
31*784cdf93SMykyta Yatsenko SEC("xdp")
32*784cdf93SMykyta Yatsenko __failure
33*784cdf93SMykyta Yatsenko __msg("Expected a dynptr of type file as arg #0")
xdp_wrong_dynptr_type(struct xdp_md * xdp)34*784cdf93SMykyta Yatsenko int xdp_wrong_dynptr_type(struct xdp_md *xdp)
35*784cdf93SMykyta Yatsenko {
36*784cdf93SMykyta Yatsenko 	struct bpf_dynptr dynptr;
37*784cdf93SMykyta Yatsenko 
38*784cdf93SMykyta Yatsenko 	bpf_dynptr_from_xdp(xdp, 0, &dynptr);
39*784cdf93SMykyta Yatsenko 	bpf_dynptr_file_discard(&dynptr);
40*784cdf93SMykyta Yatsenko 	return 0;
41*784cdf93SMykyta Yatsenko }
42*784cdf93SMykyta Yatsenko 
43*784cdf93SMykyta Yatsenko SEC("xdp")
44*784cdf93SMykyta Yatsenko __failure
45*784cdf93SMykyta Yatsenko __msg("Expected an initialized dynptr as arg #0")
xdp_no_dynptr_type(struct xdp_md * xdp)46*784cdf93SMykyta Yatsenko int xdp_no_dynptr_type(struct xdp_md *xdp)
47*784cdf93SMykyta Yatsenko {
48*784cdf93SMykyta Yatsenko 	struct bpf_dynptr dynptr;
49*784cdf93SMykyta Yatsenko 
50*784cdf93SMykyta Yatsenko 	bpf_dynptr_file_discard(&dynptr);
51*784cdf93SMykyta Yatsenko 	return 0;
52*784cdf93SMykyta Yatsenko }
53