aboutsummaryrefslogtreecommitdiffstats
path: root/tc/tc_bpf.c
diff options
context:
space:
mode:
Diffstat (limited to 'tc/tc_bpf.c')
-rw-r--r--tc/tc_bpf.c54
1 files changed, 19 insertions, 35 deletions
diff --git a/tc/tc_bpf.c b/tc/tc_bpf.c
index 7eb1cd74..90739327 100644
--- a/tc/tc_bpf.c
+++ b/tc/tc_bpf.c
@@ -90,9 +90,8 @@ static int bpf(int cmd, union bpf_attr *attr, unsigned int size)
static int bpf_map_update(int fd, const void *key, const void *value,
uint64_t flags)
{
- union bpf_attr attr;
+ union bpf_attr attr = {};
- memset(&attr, 0, sizeof(attr));
attr.map_fd = fd;
attr.key = bpf_ptr_to_u64(key);
attr.value = bpf_ptr_to_u64(value);
@@ -247,7 +246,7 @@ static int bpf_map_selfcheck_pinned(int fd, const struct bpf_elf_map *map,
int length)
{
char file[PATH_MAX], buff[4096];
- struct bpf_elf_map tmp, zero;
+ struct bpf_elf_map tmp = {}, zero = {};
unsigned int val;
FILE *fp;
@@ -259,7 +258,6 @@ static int bpf_map_selfcheck_pinned(int fd, const struct bpf_elf_map *map,
return -EIO;
}
- memset(&tmp, 0, sizeof(tmp));
while (fgets(buff, sizeof(buff), fp)) {
if (sscanf(buff, "map_type:\t%u", &val) == 1)
tmp.type = val;
@@ -278,7 +276,6 @@ static int bpf_map_selfcheck_pinned(int fd, const struct bpf_elf_map *map,
if (!memcmp(&tmp, map, length)) {
return 0;
} else {
- memset(&zero, 0, sizeof(zero));
/* If kernel doesn't have eBPF-related fdinfo, we cannot do much,
* so just accept it. We know we do have an eBPF fd and in this
* case, everything is 0. It is guaranteed that no such map exists
@@ -469,7 +466,7 @@ done:
static int bpf_obj_get(const char *pathname)
{
- union bpf_attr attr;
+ union bpf_attr attr = {};
char tmp[PATH_MAX];
if (strlen(pathname) > 2 && pathname[0] == 'm' &&
@@ -479,7 +476,6 @@ static int bpf_obj_get(const char *pathname)
pathname = tmp;
}
- memset(&attr, 0, sizeof(attr));
attr.pathname = bpf_ptr_to_u64(pathname);
return bpf(BPF_OBJ_GET, &attr, sizeof(attr));
@@ -810,9 +806,8 @@ static int bpf_map_create(enum bpf_map_type type, uint32_t size_key,
uint32_t size_value, uint32_t max_elem,
uint32_t flags)
{
- union bpf_attr attr;
+ union bpf_attr attr = {};
- memset(&attr, 0, sizeof(attr));
attr.map_type = type;
attr.key_size = size_key;
attr.value_size = size_value;
@@ -826,9 +821,8 @@ static int bpf_prog_load(enum bpf_prog_type type, const struct bpf_insn *insns,
size_t size_insns, const char *license, char *log,
size_t size_log)
{
- union bpf_attr attr;
+ union bpf_attr attr = {};
- memset(&attr, 0, sizeof(attr));
attr.prog_type = type;
attr.insns = bpf_ptr_to_u64(insns);
attr.insn_cnt = size_insns / sizeof(struct bpf_insn);
@@ -845,9 +839,8 @@ static int bpf_prog_load(enum bpf_prog_type type, const struct bpf_insn *insns,
static int bpf_obj_pin(int fd, const char *pathname)
{
- union bpf_attr attr;
+ union bpf_attr attr = {};
- memset(&attr, 0, sizeof(attr));
attr.pathname = bpf_ptr_to_u64(pathname);
attr.bpf_fd = fd;
@@ -1632,7 +1625,7 @@ static bool bpf_pinning_reserved(uint32_t pinning)
static void bpf_hash_init(struct bpf_elf_ctx *ctx, const char *db_file)
{
struct bpf_hash_entry *entry;
- char subpath[PATH_MAX];
+ char subpath[PATH_MAX] = {};
uint32_t pinning;
FILE *fp;
int ret;
@@ -1641,7 +1634,6 @@ static void bpf_hash_init(struct bpf_elf_ctx *ctx, const char *db_file)
if (!fp)
return;
- memset(subpath, 0, sizeof(subpath));
while ((ret = bpf_read_pin_mapping(fp, &pinning, subpath))) {
if (ret == -1) {
fprintf(stderr, "Database %s is corrupted at: %s\n",
@@ -1869,16 +1861,14 @@ static int
bpf_map_set_send(int fd, struct sockaddr_un *addr, unsigned int addr_len,
const struct bpf_map_data *aux, unsigned int entries)
{
- struct bpf_map_set_msg msg;
+ struct bpf_map_set_msg msg = {
+ .aux.uds_ver = BPF_SCM_AUX_VER,
+ .aux.num_ent = entries,
+ };
int *cmsg_buf, min_fd;
char *amsg_buf;
int i;
- memset(&msg, 0, sizeof(msg));
-
- msg.aux.uds_ver = BPF_SCM_AUX_VER;
- msg.aux.num_ent = entries;
-
strncpy(msg.aux.obj_name, aux->obj, sizeof(msg.aux.obj_name));
memcpy(&msg.aux.obj_st, aux->st, sizeof(msg.aux.obj_st));
@@ -1952,8 +1942,13 @@ bpf_map_set_recv(int fd, int *fds, struct bpf_map_aux *aux,
int bpf_send_map_fds(const char *path, const char *obj)
{
struct bpf_elf_ctx *ctx = &__ctx;
- struct sockaddr_un addr;
- struct bpf_map_data bpf_aux;
+ struct sockaddr_un addr = { .sun_family = AF_UNIX };
+ struct bpf_map_data bpf_aux = {
+ .fds = ctx->map_fds,
+ .ent = ctx->maps,
+ .st = &ctx->stat,
+ .obj = obj,
+ };
int fd, ret;
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
@@ -1963,8 +1958,6 @@ int bpf_send_map_fds(const char *path, const char *obj)
return -1;
}
- memset(&addr, 0, sizeof(addr));
- addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, path, sizeof(addr.sun_path));
ret = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
@@ -1974,13 +1967,6 @@ int bpf_send_map_fds(const char *path, const char *obj)
return -1;
}
- memset(&bpf_aux, 0, sizeof(bpf_aux));
-
- bpf_aux.fds = ctx->map_fds;
- bpf_aux.ent = ctx->maps;
- bpf_aux.st = &ctx->stat;
- bpf_aux.obj = obj;
-
ret = bpf_map_set_send(fd, &addr, sizeof(addr), &bpf_aux,
bpf_maps_count(ctx));
if (ret < 0)
@@ -1995,7 +1981,7 @@ int bpf_send_map_fds(const char *path, const char *obj)
int bpf_recv_map_fds(const char *path, int *fds, struct bpf_map_aux *aux,
unsigned int entries)
{
- struct sockaddr_un addr;
+ struct sockaddr_un addr = { .sun_family = AF_UNIX };
int fd, ret;
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
@@ -2005,8 +1991,6 @@ int bpf_recv_map_fds(const char *path, int *fds, struct bpf_map_aux *aux,
return -1;
}
- memset(&addr, 0, sizeof(addr));
- addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, path, sizeof(addr.sun_path));
ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr));