From: Kuniyuki Iwashima Date: Sat, 14 Aug 2021 01:57:16 +0000 (+0900) Subject: bpf: Support "%c" in bpf_bprintf_prepare(). X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=3478cfcfcddff0f3aad82891be2992e51c4f7936;p=linux.git bpf: Support "%c" in bpf_bprintf_prepare(). /proc/net/unix uses "%c" to print a single-byte character to escape '\0' in the name of the abstract UNIX domain socket. The following selftest uses it, so this patch adds support for "%c". Note that it does not support wide character ("%lc" and "%llc") for simplicity. Signed-off-by: Kuniyuki Iwashima Signed-off-by: Andrii Nakryiko Acked-by: Yonghong Song Link: https://lore.kernel.org/bpf/20210814015718.42704-3-kuniyu@amazon.co.jp --- diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index 32761be481430..4e8540716187f 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -907,6 +907,20 @@ fmt_str: tmp_buf += err; num_spec++; + continue; + } else if (fmt[i] == 'c') { + if (!tmp_buf) + goto nocopy_fmt; + + if (tmp_buf_end == tmp_buf) { + err = -ENOSPC; + goto out; + } + + *tmp_buf = raw_args[num_spec]; + tmp_buf++; + num_spec++; + continue; }