Linux has deprecated[1] strncpy(), and the use in skel_map_create()
is best replaced with strscpy(). Since we still need to build this
file in userspace, leave the strncpy() in place in that case. This
is the last use of strncpy() in the kernel.

Link: https://github.com/KSPP/linux/issues/90 [1]
Signed-off-by: Kees Cook <[email protected]>
---
 v5: Just ifdef for the kernel and use strscpy() there (Alexei)
 v4: https://lore.kernel.org/lkml/[email protected]/
 v3: https://lore.kernel.org/lkml/[email protected]/
 v2: https://lore.kernel.org/lkml/[email protected]/
 v1: https://lore.kernel.org/lkml/[email protected]/
Cc: Alexei Starovoitov <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: sun jian <[email protected]>
Cc: Andrii Nakryiko <[email protected]>
Cc: Eduard Zingerman <[email protected]>
Cc: Daniel Borkmann <[email protected]>
Cc: Martin KaFai Lau <[email protected]>
Cc: Song Liu <[email protected]>
Cc: Yonghong Song <[email protected]>
Cc: John Fastabend <[email protected]>
Cc: KP Singh <[email protected]>
Cc: Stanislav Fomichev <[email protected]>
Cc: Hao Luo <[email protected]>
Cc: <[email protected]>
---
 tools/lib/bpf/skel_internal.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/lib/bpf/skel_internal.h b/tools/lib/bpf/skel_internal.h
index 6a8f5c7a02eb..74503d358bc8 100644
--- a/tools/lib/bpf/skel_internal.h
+++ b/tools/lib/bpf/skel_internal.h
@@ -243,7 +243,12 @@ static inline int skel_map_create(enum bpf_map_type 
map_type,
        attr.excl_prog_hash = (unsigned long) excl_prog_hash;
        attr.excl_prog_hash_size = excl_prog_hash_sz;
 
+#ifdef __KERNEL__
+       if (strscpy(attr.map_name, map_name) < 0)
+               return -EINVAL;
+#else
        strncpy(attr.map_name, map_name, sizeof(attr.map_name));
+#endif
        attr.key_size = key_size;
        attr.value_size = value_size;
        attr.max_entries = max_entries;
-- 
2.34.1


Reply via email to