159290Sjlemon// SPDX-License-Identifier: GPL-2.0
272969Sjlemon/* Copyright (c) 2020 Facebook */
359290Sjlemon#include "bpf_iter.h"
459290Sjlemon#include <bpf/bpf_helpers.h>
559290Sjlemon#include <bpf/bpf_tracing.h>
659290Sjlemon
759290Sjlemonchar _license[] SEC("license") = "GPL";
859290Sjlemon
959290Sjlemonstruct key_t {
1059290Sjlemon	int a;
1159290Sjlemon	int b;
1259290Sjlemon	int c;
1359290Sjlemon};
1459290Sjlemon
1559290Sjlemonstruct {
1659290Sjlemon	__uint(type, BPF_MAP_TYPE_HASH);
1759290Sjlemon	__uint(max_entries, 3);
1859290Sjlemon	__type(key, struct key_t);
1959290Sjlemon	__type(value, __u64);
2059290Sjlemon} hashmap1 SEC(".maps");
2159290Sjlemon
2259290Sjlemon__u32 key_sum = 0;
2359290Sjlemon
2459290SjlemonSEC("iter/bpf_map_elem")
2559290Sjlemonint dump_bpf_hash_map(struct bpf_iter__bpf_map_elem *ctx)
2699090Sbde{
2759290Sjlemon	void *key = ctx->key;
2859290Sjlemon
2959290Sjlemon	if (key == (void *)0)
3059290Sjlemon		return 0;
3159290Sjlemon
3259290Sjlemon	/* out of bound access w.r.t. hashmap1 */
3359290Sjlemon	key_sum += *(__u32 *)(key + sizeof(struct key_t));
3459290Sjlemon	return 0;
3559290Sjlemon}
3659290Sjlemon