From: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> Since MEM_RDONLY and PTR_UNTRUSTED can be present together in register type now, try to print multiple tags using the prefix buffer. Since all 5 cannot be present together, 32 bytes is still enough room for any possible combination. Instead of tracking the current position into the buffer, simply rely on snprintf, which also ensures nul termination. Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> Signed-off-by: Lorenzo Bianconi <lorenzo@xxxxxxxxxx> --- kernel/bpf/verifier.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index aedac2ac02b9..e0be76861736 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -564,16 +564,12 @@ static const char *reg_type_str(struct bpf_verifier_env *env, strncpy(postfix, "_or_null", 16); } - if (type & MEM_RDONLY) - strncpy(prefix, "rdonly_", 32); - if (type & MEM_ALLOC) - strncpy(prefix, "alloc_", 32); - if (type & MEM_USER) - strncpy(prefix, "user_", 32); - if (type & MEM_PERCPU) - strncpy(prefix, "percpu_", 32); - if (type & PTR_UNTRUSTED) - strncpy(prefix, "untrusted_", 32); + snprintf(prefix, sizeof(prefix), "%s%s%s%s%s", + (type & MEM_RDONLY ? "rdonly_" : ""), + (type & MEM_ALLOC ? "alloc_" : ""), + (type & MEM_USER ? "user_" : ""), + (type & MEM_PERCPU ? "percpu_" : ""), + (type & PTR_UNTRUSTED ? "untrusted_" : "")); snprintf(env->type_str_buf, TYPE_STR_BUF_LEN, "%s%s%s", prefix, str[base_type(type)], postfix); -- 2.35.3