在 2020年08月11日 16:23, Mathias Krause 写道: > Hi Lianbo, > > Am 11.08.20 um 04:08 schrieb lijiang: >> 在 2020年07月31日 00:00, crash-utility-request@xxxxxxxxxx 写道: >>> Message: 1 >>> Date: Thu, 30 Jul 2020 15:34:59 +0200 >>> From: Mathias Krause <minipli@xxxxxxxxxxxxxx> >>> To: crash-utility@xxxxxxxxxx >>> Subject: [PATCH RESEND] Basic support for PaX's split >>> module layout >>> Message-ID: <20200730133459.7868-1-minipli@xxxxxxxxxxxxxx> >>> Content-Type: text/plain; charset=US-ASCII >>> >>> PaX and grsecurity kernels split module memory into dedicated r/x and >>> r/w mappings using '*_rw' and '*_rx' named member variables in 'struct >>> module'. To add basic support for such kernels detect the split layout >>> by testing for the corresponding structure members and use these >>> instead. >>> >>> So far we limit ourself to only track module code mappings for such >>> kernels as adding support for separate data mappings violates lots of >>> invariants in the rest of our code base, thereby would require a major >>> rework. However, with that patch applied, module code references can be >>> resolved in backtraces, memory and code dumps, which makes it already >>> very useful for analyzing such kernels. >>> >>> Signed-off-by: Mathias Krause <minipli@xxxxxxxxxxxxxx> >>> --- >>> Resend as the original posting got stuck in the mail queue. >>> >>> defs.h | 13 +++++++++++ >>> kernel.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++---- >>> symbols.c | 20 ++++++++-------- >>> 3 files changed, 86 insertions(+), 15 deletions(-) >>> >>> diff --git a/defs.h b/defs.h >>> index d7adb23b86d5..160974ed554a 100644 >>> --- a/defs.h >>> +++ b/defs.h >>> @@ -654,12 +654,15 @@ struct new_utsname { >>> #define TIMER_BASES (0x20ULL) >>> #define IRQ_DESC_TREE_RADIX (0x40ULL) >>> #define IRQ_DESC_TREE_XARRAY (0x80ULL) >>> +#define KMOD_PAX (0x100ULL) >>> >>> #define XEN() (kt->flags & ARCH_XEN) >>> #define OPENVZ() (kt->flags & ARCH_OPENVZ) >>> #define PVOPS() (kt->flags & ARCH_PVOPS) >>> #define PVOPS_XEN() (kt->flags & ARCH_PVOPS_XEN) >>> >>> +#define PAX_MODULE_SPLIT() (kt->flags2 & KMOD_PAX) >>> + >>> #define XEN_MACHINE_TO_MFN(m) ((ulonglong)(m) >> PAGESHIFT()) >>> #define XEN_PFN_TO_PSEUDO(p) ((ulonglong)(p) << PAGESHIFT()) >>> >>> @@ -1346,7 +1349,11 @@ struct offset_table { /* stash of commonly-used offsets */ >>> long module_gpl_syms; >>> long module_num_gpl_syms; >>> long module_module_core; >>> + long module_module_core_rw; >>> + long module_module_core_rx; >>> long module_core_size; >>> + long module_core_size_rw; >>> + long module_core_size_rx; >>> long module_core_text_size; >>> long module_num_symtab; >>> long module_symtab; >>> @@ -1776,6 +1783,8 @@ struct offset_table { /* stash of commonly-used offsets */ >>> long mm_struct_rss_stat; >>> long mm_rss_stat_count; >>> long module_module_init; >>> + long module_module_init_rw; >>> + long module_module_init_rx; >>> long module_init_text_size; >>> long cpu_context_save_fp; >>> long cpu_context_save_sp; >>> @@ -1793,6 +1802,8 @@ struct offset_table { /* stash of commonly-used offsets */ >>> long unwind_idx_insn; >>> long signal_struct_nr_threads; >>> long module_init_size; >>> + long module_init_size_rw; >>> + long module_init_size_rx; >>> long module_percpu; >>> long radix_tree_node_slots; >>> long s390_stack_frame_back_chain; >>> @@ -2313,6 +2324,8 @@ struct array_table { >>> * in the offset table, size table or array_table. >>> */ >>> #define OFFSET(X) (OFFSET_verify(offset_table.X, (char *)__FUNCTION__, __FILE__, __LINE__, #X)) >>> +#define MODULE_OFFSET(X,Y) (PAX_MODULE_SPLIT() ? OFFSET(Y) : OFFSET(X)) >>> +#define MODULE_OFFSET2(X,T) MODULE_OFFSET(X, X##_##T) >> The above definition has a code style issue(space required after that ','), but we could correct >> it when this patch is applied. > > I just wanted to stick with the coding style nearby, like with > MEMBER_OFFSET(), MEMBER_EXISTS(), MEMBER_SIZE(), etc. all have no space That's true. > between the arguments. But I've no strong opinion about it. Feel free to > adapt. > No worry. :-) Thanks. Lianbo >> >> Otherwise, it looks good to me. >> Acked-by: Lianbo Jiang <lijiang@xxxxxxxxxx> > > Thanks for the review! > > Mathias > >> >> Thanks. >> Lianbo >> >>> [...] > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility