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 Yatsenkoint 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 Yatsenkoint 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 Yatsenkoint 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