1*91541ab1SVadim Fedorenko // SPDX-License-Identifier: GPL-2.0
2*91541ab1SVadim Fedorenko /* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
3*91541ab1SVadim Fedorenko
4*91541ab1SVadim Fedorenko #include "vmlinux.h"
5*91541ab1SVadim Fedorenko #include <bpf/bpf_helpers.h>
6*91541ab1SVadim Fedorenko #include <bpf/bpf_tracing.h>
7*91541ab1SVadim Fedorenko #include "bpf_misc.h"
8*91541ab1SVadim Fedorenko #include "bpf_kfuncs.h"
9*91541ab1SVadim Fedorenko #include "crypto_common.h"
10*91541ab1SVadim Fedorenko
11*91541ab1SVadim Fedorenko int status;
12*91541ab1SVadim Fedorenko SEC("syscall")
crypto_release(void * ctx)13*91541ab1SVadim Fedorenko int crypto_release(void *ctx)
14*91541ab1SVadim Fedorenko {
15*91541ab1SVadim Fedorenko struct bpf_crypto_params params = {
16*91541ab1SVadim Fedorenko .type = "skcipher",
17*91541ab1SVadim Fedorenko .algo = "ecb(aes)",
18*91541ab1SVadim Fedorenko .key_len = 16,
19*91541ab1SVadim Fedorenko };
20*91541ab1SVadim Fedorenko
21*91541ab1SVadim Fedorenko struct bpf_crypto_ctx *cctx;
22*91541ab1SVadim Fedorenko int err = 0;
23*91541ab1SVadim Fedorenko
24*91541ab1SVadim Fedorenko status = 0;
25*91541ab1SVadim Fedorenko
26*91541ab1SVadim Fedorenko cctx = bpf_crypto_ctx_create(¶ms, sizeof(params), &err);
27*91541ab1SVadim Fedorenko
28*91541ab1SVadim Fedorenko if (!cctx) {
29*91541ab1SVadim Fedorenko status = err;
30*91541ab1SVadim Fedorenko return 0;
31*91541ab1SVadim Fedorenko }
32*91541ab1SVadim Fedorenko
33*91541ab1SVadim Fedorenko bpf_crypto_ctx_release(cctx);
34*91541ab1SVadim Fedorenko
35*91541ab1SVadim Fedorenko return 0;
36*91541ab1SVadim Fedorenko }
37*91541ab1SVadim Fedorenko
38*91541ab1SVadim Fedorenko SEC("syscall")
39*91541ab1SVadim Fedorenko __failure __msg("Unreleased reference")
crypto_acquire(void * ctx)40*91541ab1SVadim Fedorenko int crypto_acquire(void *ctx)
41*91541ab1SVadim Fedorenko {
42*91541ab1SVadim Fedorenko struct bpf_crypto_params params = {
43*91541ab1SVadim Fedorenko .type = "skcipher",
44*91541ab1SVadim Fedorenko .algo = "ecb(aes)",
45*91541ab1SVadim Fedorenko .key_len = 16,
46*91541ab1SVadim Fedorenko };
47*91541ab1SVadim Fedorenko struct bpf_crypto_ctx *cctx;
48*91541ab1SVadim Fedorenko int err = 0;
49*91541ab1SVadim Fedorenko
50*91541ab1SVadim Fedorenko status = 0;
51*91541ab1SVadim Fedorenko
52*91541ab1SVadim Fedorenko cctx = bpf_crypto_ctx_create(¶ms, sizeof(params), &err);
53*91541ab1SVadim Fedorenko
54*91541ab1SVadim Fedorenko if (!cctx) {
55*91541ab1SVadim Fedorenko status = err;
56*91541ab1SVadim Fedorenko return 0;
57*91541ab1SVadim Fedorenko }
58*91541ab1SVadim Fedorenko
59*91541ab1SVadim Fedorenko cctx = bpf_crypto_ctx_acquire(cctx);
60*91541ab1SVadim Fedorenko if (!cctx)
61*91541ab1SVadim Fedorenko return -EINVAL;
62*91541ab1SVadim Fedorenko
63*91541ab1SVadim Fedorenko bpf_crypto_ctx_release(cctx);
64*91541ab1SVadim Fedorenko
65*91541ab1SVadim Fedorenko return 0;
66*91541ab1SVadim Fedorenko }
67*91541ab1SVadim Fedorenko
68*91541ab1SVadim Fedorenko char __license[] SEC("license") = "GPL";
69