xref: /linux/tools/testing/selftests/bpf/progs/crypto_basic.c (revision 621cde16e49b3ecf7d59a8106a20aaebfb4a59a9)
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(&params, 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(&params, 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