Split out a helper to do the fault free access to the string pointer
to get it out of a crazy indentation level.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 kernel/trace/bpf_trace.c | 42 +++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index f5231ffea85b9..9d4080590f711 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -321,6 +321,28 @@ static const struct bpf_func_proto 
*bpf_get_probe_write_proto(void)
        return &bpf_probe_write_user_proto;
 }
 
+static void bpf_trace_copy_string(char *buf, void *unsafe_ptr, char fmt_ptype,
+               size_t bufsz)
+{
+       void __user *user_ptr = (__force void __user *)unsafe_ptr;
+
+       buf[0] = 0;
+
+       switch (fmt_ptype) {
+       case 's':
+#ifdef CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
+               strncpy_from_unsafe(buf, unsafe_ptr, bufsz);
+               break;
+#endif
+       case 'k':
+               strncpy_from_kernel_nofault(buf, unsafe_ptr, bufsz);
+               break;
+       case 'u':
+               strncpy_from_user_nofault(buf, user_ptr, bufsz);
+               break;
+       }
+}
+
 /*
  * Only limited trace_printk() conversion specifiers allowed:
  * %d %i %u %x %ld %li %lu %lx %lld %lli %llu %llx %p %pks %pus %s
@@ -403,24 +425,8 @@ BPF_CALL_5(bpf_trace_printk, char *, fmt, u32, fmt_size, 
u64, arg1,
                                break;
                        }
 
-                       buf[0] = 0;
-                       switch (fmt_ptype) {
-                       case 's':
-#ifdef CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
-                               strncpy_from_unsafe(buf, unsafe_ptr,
-                                                   sizeof(buf));
-                               break;
-#endif
-                       case 'k':
-                               strncpy_from_kernel_nofault(buf, unsafe_ptr,
-                                                          sizeof(buf));
-                               break;
-                       case 'u':
-                               strncpy_from_user_nofault(buf,
-                                       (__force void __user *)unsafe_ptr,
-                                                        sizeof(buf));
-                               break;
-                       }
+                       bpf_trace_copy_string(buf, unsafe_ptr, fmt_ptype,
+                                       sizeof(buf));
                        goto fmt_next;
                }
 
-- 
2.26.2

Reply via email to