Commit f0e5ba0b authored by KP Singh's avatar KP Singh Committed by Alexei Starovoitov

bpf: Fix tests for local_storage

The {inode,sk}_storage_result checking if the correct value was retrieved
was being clobbered unconditionally by the return value of the
bpf_{inode,sk}_storage_delete call.

Also, consistently use the newly added BPF_LOCAL_STORAGE_GET_F_CREATE
flag.

Fixes: cd324d7a ("bpf: Add selftests for local_storage")
Signed-off-by: default avatarKP Singh <kpsingh@google.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarSong Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20201106103747.2780972-7-kpsingh@chromium.org
parent 3ca1032a
...@@ -58,20 +58,22 @@ int BPF_PROG(unlink_hook, struct inode *dir, struct dentry *victim) ...@@ -58,20 +58,22 @@ int BPF_PROG(unlink_hook, struct inode *dir, struct dentry *victim)
{ {
__u32 pid = bpf_get_current_pid_tgid() >> 32; __u32 pid = bpf_get_current_pid_tgid() >> 32;
struct dummy_storage *storage; struct dummy_storage *storage;
int err;
if (pid != monitored_pid) if (pid != monitored_pid)
return 0; return 0;
storage = bpf_inode_storage_get(&inode_storage_map, victim->d_inode, 0, storage = bpf_inode_storage_get(&inode_storage_map, victim->d_inode, 0,
BPF_SK_STORAGE_GET_F_CREATE); BPF_LOCAL_STORAGE_GET_F_CREATE);
if (!storage) if (!storage)
return 0; return 0;
if (storage->value == DUMMY_STORAGE_VALUE) if (storage->value != DUMMY_STORAGE_VALUE)
inode_storage_result = -1; inode_storage_result = -1;
inode_storage_result = err = bpf_inode_storage_delete(&inode_storage_map, victim->d_inode);
bpf_inode_storage_delete(&inode_storage_map, victim->d_inode); if (!err)
inode_storage_result = err;
return 0; return 0;
} }
...@@ -82,19 +84,23 @@ int BPF_PROG(socket_bind, struct socket *sock, struct sockaddr *address, ...@@ -82,19 +84,23 @@ int BPF_PROG(socket_bind, struct socket *sock, struct sockaddr *address,
{ {
__u32 pid = bpf_get_current_pid_tgid() >> 32; __u32 pid = bpf_get_current_pid_tgid() >> 32;
struct dummy_storage *storage; struct dummy_storage *storage;
int err;
if (pid != monitored_pid) if (pid != monitored_pid)
return 0; return 0;
storage = bpf_sk_storage_get(&sk_storage_map, sock->sk, 0, storage = bpf_sk_storage_get(&sk_storage_map, sock->sk, 0,
BPF_SK_STORAGE_GET_F_CREATE); BPF_LOCAL_STORAGE_GET_F_CREATE);
if (!storage) if (!storage)
return 0; return 0;
if (storage->value == DUMMY_STORAGE_VALUE) if (storage->value != DUMMY_STORAGE_VALUE)
sk_storage_result = -1; sk_storage_result = -1;
sk_storage_result = bpf_sk_storage_delete(&sk_storage_map, sock->sk); err = bpf_sk_storage_delete(&sk_storage_map, sock->sk);
if (!err)
sk_storage_result = err;
return 0; return 0;
} }
...@@ -109,7 +115,7 @@ int BPF_PROG(socket_post_create, struct socket *sock, int family, int type, ...@@ -109,7 +115,7 @@ int BPF_PROG(socket_post_create, struct socket *sock, int family, int type,
return 0; return 0;
storage = bpf_sk_storage_get(&sk_storage_map, sock->sk, 0, storage = bpf_sk_storage_get(&sk_storage_map, sock->sk, 0,
BPF_SK_STORAGE_GET_F_CREATE); BPF_LOCAL_STORAGE_GET_F_CREATE);
if (!storage) if (!storage)
return 0; return 0;
...@@ -131,7 +137,7 @@ int BPF_PROG(file_open, struct file *file) ...@@ -131,7 +137,7 @@ int BPF_PROG(file_open, struct file *file)
return 0; return 0;
storage = bpf_inode_storage_get(&inode_storage_map, file->f_inode, 0, storage = bpf_inode_storage_get(&inode_storage_map, file->f_inode, 0,
BPF_LOCAL_STORAGE_GET_F_CREATE); BPF_LOCAL_STORAGE_GET_F_CREATE);
if (!storage) if (!storage)
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment