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