brintos

brintos / linux-shallow public Read only

0
0
Text · 1.1 KiB · 932b8ec Raw
59 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2 3/*4 * Copyright 2021 Google LLC.5 */6 7#include <errno.h>8#include <linux/bpf.h>9#include <bpf/bpf_helpers.h>10 11__u32 invocations = 0;12__u32 assertion_error = 0;13__u32 retval_value = 0;14__u32 ctx_retval_value = 0;15__u32 page_size = 0;16 17SEC("cgroup/getsockopt")18int get_retval(struct bpf_sockopt *ctx)19{20	retval_value = bpf_get_retval();21	ctx_retval_value = ctx->retval;22	__sync_fetch_and_add(&invocations, 1);23 24	/* optval larger than PAGE_SIZE use kernel's buffer. */25	if (ctx->optlen > page_size)26		ctx->optlen = 0;27 28	return 1;29}30 31SEC("cgroup/getsockopt")32int set_eisconn(struct bpf_sockopt *ctx)33{34	__sync_fetch_and_add(&invocations, 1);35 36	if (bpf_set_retval(-EISCONN))37		assertion_error = 1;38 39	/* optval larger than PAGE_SIZE use kernel's buffer. */40	if (ctx->optlen > page_size)41		ctx->optlen = 0;42 43	return 1;44}45 46SEC("cgroup/getsockopt")47int clear_retval(struct bpf_sockopt *ctx)48{49	__sync_fetch_and_add(&invocations, 1);50 51	ctx->retval = 0;52 53	/* optval larger than PAGE_SIZE use kernel's buffer. */54	if (ctx->optlen > page_size)55		ctx->optlen = 0;56 57	return 1;58}59