@@ -6023,6 +6023,7 @@ unsigned long trace_adjust_address(struct trace_array *tr, unsigned long addr)
struct trace_module_delta *module_delta;
struct trace_scratch *tscratch;
struct trace_mod_entry *entry;
+ unsigned long raddr;
int idx = 0, nr_entries;
/* If we don't have last boot delta, return the address */
@@ -6034,8 +6035,11 @@ unsigned long trace_adjust_address(struct trace_array *tr, unsigned long addr)
tscratch = tr->scratch;
/* if there is no tscrach, module_delta must be NULL. */
module_delta = READ_ONCE(tr->module_delta);
- if (!module_delta || tscratch->entries[0].mod_addr > addr)
- return addr + tr->text_delta;
+ if (!module_delta || tscratch->entries[0].mod_addr > addr) {
+ raddr = addr + tr->text_delta;
+ return is_kernel_core_data(raddr) || is_kernel_rodata(raddr) ||
+ __is_kernel(raddr) ? raddr : addr;
+ }
/* Note that entries must be sorted. */
nr_entries = tscratch->nr_entries;