mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
UPSTREAM: bpf: Sanitize the bpf_struct_ops tcp-cc name
The bpf_struct_ops tcp-cc name should be sanitized in order to
avoid problematic chars (e.g. whitespaces).
This patch reuses the bpf_obj_name_cpy() for accepting the same set
of characters in order to keep a consistent bpf programming experience.
A "size" param is added. Also, the strlen is returned on success so
that the caller (like the bpf_tcp_ca here) can error out on empty name.
The existing callers of the bpf_obj_name_cpy() only need to change the
testing statement to "if (err < 0)". For all these existing callers,
the err will be overwritten later, so no extra change is needed
for the new strlen return value.
v3:
- reverse xmas tree style
v2:
- Save the orig_src to avoid "end - size" (Andrii)
Fixes: 0baf26b0fcd7 ("bpf: tcp: Support tcp_congestion_ops in bpf")
Change-Id: I5f1d0bad34d94e4ced7338af2bd828329e95fc90
Signed-off-by: Martin KaFai Lau <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
Acked-by: Andrii Nakryiko <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
This commit is contained in:
parent
1fec73b447
commit
5816ee7d64
3 changed files with 17 additions and 16 deletions
|
|
@ -184,7 +184,6 @@ static int bpf_tcp_ca_init_member(const struct btf_type *t,
|
|||
{
|
||||
const struct tcp_congestion_ops *utcp_ca;
|
||||
struct tcp_congestion_ops *tcp_ca;
|
||||
size_t tcp_ca_name_len;
|
||||
int prog_fd;
|
||||
u32 moff;
|
||||
|
||||
|
|
@ -199,13 +198,11 @@ static int bpf_tcp_ca_init_member(const struct btf_type *t,
|
|||
tcp_ca->flags = utcp_ca->flags;
|
||||
return 1;
|
||||
case offsetof(struct tcp_congestion_ops, name):
|
||||
tcp_ca_name_len = strnlen(utcp_ca->name, sizeof(utcp_ca->name));
|
||||
if (!tcp_ca_name_len ||
|
||||
tcp_ca_name_len == sizeof(utcp_ca->name))
|
||||
if (bpf_obj_name_cpy(tcp_ca->name, utcp_ca->name,
|
||||
sizeof(tcp_ca->name)) <= 0)
|
||||
return -EINVAL;
|
||||
if (tcp_ca_find(utcp_ca->name))
|
||||
return -EEXIST;
|
||||
memcpy(tcp_ca->name, utcp_ca->name, sizeof(tcp_ca->name));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue