}
 
 /* Returns true if the string is safe to dereference from an event */
-static bool trace_safe_str(struct trace_iterator *iter, const char *str)
+static bool trace_safe_str(struct trace_iterator *iter, const char *str,
+                          bool star, int len)
 {
        unsigned long addr = (unsigned long)str;
        struct trace_event *trace_event;
        struct trace_event_call *event;
 
+       /* Ignore strings with no length */
+       if (star && !len)
+               return true;
+
        /* OK if part of the event data */
        if ((addr >= (unsigned long)iter->ent) &&
            (addr < (unsigned long)iter->ent + iter->ent_size))
                 * instead. See samples/trace_events/trace-events-sample.h
                 * for reference.
                 */
-               if (WARN_ONCE(!trace_safe_str(iter, str),
+               if (WARN_ONCE(!trace_safe_str(iter, str, star, len),
                              "fmt: '%s' current_buffer: '%s'",
                              fmt, show_buffer(&iter->seq))) {
                        int ret;