Skip to content

Commit

Permalink
Include package version along with kernel release in stack traces
Browse files Browse the repository at this point in the history
For distribution binary packages we assume
$DISTRIBUTION_OFFICIAL_BUILD, $DISTRIBUTOR and $DISTRIBUTION_VERSION
are set.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: WangYuli <wangyuli@uniontech.com>
  • Loading branch information
bwhacks authored and MingcongBai committed Jan 10, 2025
1 parent 01fa257 commit d61a642
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 11 deletions.
14 changes: 11 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1197,7 +1197,8 @@ PHONY += prepare archprepare

archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
asm-generic $(version_h) include/generated/utsrelease.h \
include/generated/compile.h include/generated/autoconf.h remove-stale-files
include/generated/compile.h include/generated/autoconf.h \
include/generated/package.h remove-stale-files

prepare0: archprepare
$(Q)$(MAKE) $(build)=scripts/mod
Expand Down Expand Up @@ -1255,8 +1256,12 @@ define filechk_version.h
echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
endef

$(version_h): private PATCHLEVEL := $(or $(PATCHLEVEL), 0)
$(version_h): private SUBLEVEL := $(or $(SUBLEVEL), 0)
define filechk_package.h
echo \#define LINUX_PACKAGE_ID \" $(DISTRIBUTOR) $(DISTRIBUTION_VERSION)\"
endef

$(version_h): PATCHLEVEL := $(or $(PATCHLEVEL), 0)
$(version_h): SUBLEVEL := $(or $(SUBLEVEL), 0)
$(version_h): FORCE
$(call filechk,version.h)

Expand All @@ -1269,6 +1274,9 @@ filechk_compile.h = $(srctree)/scripts/mkcompile_h \
include/generated/compile.h: FORCE
$(call filechk,compile.h)

include/generated/package.h: $(srctree)/Makefile FORCE
$(call filechk,package.h)

PHONY += headerdep
headerdep:
$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
Expand Down
6 changes: 4 additions & 2 deletions arch/powerpc/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include <linux/uaccess.h>
#include <linux/pkeys.h>
#include <linux/seq_buf.h>
#include <generated/package.h>

#include <asm/interrupt.h>
#include <asm/io.h>
Expand Down Expand Up @@ -1560,8 +1561,9 @@ static void __show_regs(struct pt_regs *regs)

printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
regs->nip, regs->link, regs->ctr);
printk("REGS: %px TRAP: %04lx %s (%s)\n",
regs, regs->trap, print_tainted(), init_utsname()->release);
printk("REGS: %px TRAP: %04lx %s (%s%s)\n",
regs, regs->trap, print_tainted(), init_utsname()->release,
LINUX_PACKAGE_ID);
printk("MSR: "REG" ", regs->msr);
print_msr_bits(regs->msr);
pr_cont(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer);
Expand Down
6 changes: 4 additions & 2 deletions arch/x86/um/sysrq_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,17 @@
#include <linux/sched.h>
#include <linux/sched/debug.h>
#include <linux/utsname.h>
#include <generated/package.h>
#include <asm/current.h>
#include <asm/ptrace.h>

void show_regs(struct pt_regs *regs)
{
printk("\n");
print_modules();
printk(KERN_INFO "Pid: %d, comm: %.20s %s %s\n", task_pid_nr(current),
current->comm, print_tainted(), init_utsname()->release);
printk(KERN_INFO "Pid: %d, comm: %.20s %s %s%s\n", task_pid_nr(current),
current->comm, print_tainted(), init_utsname()->release,
LINUX_PACKAGE_ID);
printk(KERN_INFO "RIP: %04lx:%pS\n", PT_REGS_CS(regs) & 0xffff,
(void *)PT_REGS_IP(regs));
printk(KERN_INFO "RSP: %016lx EFLAGS: %08lx\n", PT_REGS_SP(regs),
Expand Down
6 changes: 4 additions & 2 deletions kernel/hung_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <linux/sched/sysctl.h>

#include <trace/events/sched.h>
#include <generated/package.h>

/*
* The number of tasks checked:
Expand Down Expand Up @@ -132,10 +133,11 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
sysctl_hung_task_warnings--;
pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n",
t->comm, t->pid, (jiffies - t->last_switch_time) / HZ);
pr_err(" %s %s %.*s\n",
pr_err(" %s %s %.*s%s\n",
print_tainted(), init_utsname()->release,
(int)strcspn(init_utsname()->version, " "),
init_utsname()->version);
init_utsname()->version,
LINUX_PACKAGE_ID);
pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\""
" disables this message.\n");
sched_show_task(t);
Expand Down
7 changes: 5 additions & 2 deletions lib/dump_stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/kexec.h>
#include <linux/utsname.h>
#include <linux/stop_machine.h>
#include <generated/package.h>

static char dump_stack_arch_desc_str[128];

Expand Down Expand Up @@ -54,15 +55,17 @@ void __init dump_stack_set_arch_desc(const char *fmt, ...)
*/
void dump_stack_print_info(const char *log_lvl)
{
printk("%sCPU: %d UID: %u PID: %d Comm: %.20s %s%s %s %.*s" BUILD_ID_FMT "\n",
printk("%sCPU: %d UID: %u PID: %d Comm: %.20s %s%s %s %.*s %s" BUILD_ID_FMT "\n",
log_lvl, raw_smp_processor_id(),
__kuid_val(current_real_cred()->euid),
current->pid, current->comm,
kexec_crash_loaded() ? "Kdump: loaded " : "",
print_tainted(),
init_utsname()->release,
(int)strcspn(init_utsname()->version, " "),
init_utsname()->version, BUILD_ID_VAL);
init_utsname()->version,
LINUX_PACKAGE_ID,
BUILD_ID_VAL);

if (get_taint())
printk("%s%s\n", log_lvl, print_tainted_verbose());
Expand Down

0 comments on commit d61a642

Please sign in to comment.