Commit 568fb6f4 authored by Christophe Leroy's avatar Christophe Leroy Committed by Daniel Thompson

kdb: print real address of pointers instead of hashed addresses

Since commit ad67b74d ("printk: hash addresses printed with %p"),
all pointers printed with %p are printed with hashed addresses
instead of real addresses in order to avoid leaking addresses in
dmesg and syslog. But this applies to kdb too, with is unfortunate:

    Entering kdb (current=0x(ptrval), pid 329) due to Keyboard Entry
    kdb> ps
    15 sleeping system daemon (state M) processes suppressed,
    use 'ps A' to see all.
    Task Addr       Pid   Parent [*] cpu State Thread     Command
    0x(ptrval)      329      328  1    0   R  0x(ptrval) *sh

    0x(ptrval)        1        0  0    0   S  0x(ptrval)  init
    0x(ptrval)        3        2  0    0   D  0x(ptrval)  rcu_gp
    0x(ptrval)        4        2  0    0   D  0x(ptrval)  rcu_par_gp
    0x(ptrval)        5        2  0    0   D  0x(ptrval)  kworker/0:0
    0x(ptrval)        6        2  0    0   D  0x(ptrval)  kworker/0:0H
    0x(ptrval)        7        2  0    0   D  0x(ptrval)  kworker/u2:0
    0x(ptrval)        8        2  0    0   D  0x(ptrval)  mm_percpu_wq
    0x(ptrval)       10        2  0    0   D  0x(ptrval)  rcu_preempt

The whole purpose of kdb is to debug, and for debugging real addresses
need to be known. In addition, data displayed by kdb doesn't go into
dmesg.

This patch replaces all %p by %px in kdb in order to display real
addresses.

Fixes: ad67b74d ("printk: hash addresses printed with %p")
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
parent dded2e15
...@@ -1192,7 +1192,7 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, ...@@ -1192,7 +1192,7 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs,
if (reason == KDB_REASON_DEBUG) { if (reason == KDB_REASON_DEBUG) {
/* special case below */ /* special case below */
} else { } else {
kdb_printf("\nEntering kdb (current=0x%p, pid %d) ", kdb_printf("\nEntering kdb (current=0x%px, pid %d) ",
kdb_current, kdb_current ? kdb_current->pid : 0); kdb_current, kdb_current ? kdb_current->pid : 0);
#if defined(CONFIG_SMP) #if defined(CONFIG_SMP)
kdb_printf("on processor %d ", raw_smp_processor_id()); kdb_printf("on processor %d ", raw_smp_processor_id());
...@@ -1208,7 +1208,7 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, ...@@ -1208,7 +1208,7 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs,
*/ */
switch (db_result) { switch (db_result) {
case KDB_DB_BPT: case KDB_DB_BPT:
kdb_printf("\nEntering kdb (0x%p, pid %d) ", kdb_printf("\nEntering kdb (0x%px, pid %d) ",
kdb_current, kdb_current->pid); kdb_current, kdb_current->pid);
#if defined(CONFIG_SMP) #if defined(CONFIG_SMP)
kdb_printf("on processor %d ", raw_smp_processor_id()); kdb_printf("on processor %d ", raw_smp_processor_id());
...@@ -2048,7 +2048,7 @@ static int kdb_lsmod(int argc, const char **argv) ...@@ -2048,7 +2048,7 @@ static int kdb_lsmod(int argc, const char **argv)
if (mod->state == MODULE_STATE_UNFORMED) if (mod->state == MODULE_STATE_UNFORMED)
continue; continue;
kdb_printf("%-20s%8u 0x%p ", mod->name, kdb_printf("%-20s%8u 0x%px ", mod->name,
mod->core_layout.size, (void *)mod); mod->core_layout.size, (void *)mod);
#ifdef CONFIG_MODULE_UNLOAD #ifdef CONFIG_MODULE_UNLOAD
kdb_printf("%4d ", module_refcount(mod)); kdb_printf("%4d ", module_refcount(mod));
...@@ -2059,7 +2059,7 @@ static int kdb_lsmod(int argc, const char **argv) ...@@ -2059,7 +2059,7 @@ static int kdb_lsmod(int argc, const char **argv)
kdb_printf(" (Loading)"); kdb_printf(" (Loading)");
else else
kdb_printf(" (Live)"); kdb_printf(" (Live)");
kdb_printf(" 0x%p", mod->core_layout.base); kdb_printf(" 0x%px", mod->core_layout.base);
#ifdef CONFIG_MODULE_UNLOAD #ifdef CONFIG_MODULE_UNLOAD
{ {
...@@ -2341,7 +2341,7 @@ void kdb_ps1(const struct task_struct *p) ...@@ -2341,7 +2341,7 @@ void kdb_ps1(const struct task_struct *p)
return; return;
cpu = kdb_process_cpu(p); cpu = kdb_process_cpu(p);
kdb_printf("0x%p %8d %8d %d %4d %c 0x%p %c%s\n", kdb_printf("0x%px %8d %8d %d %4d %c 0x%px %c%s\n",
(void *)p, p->pid, p->parent->pid, (void *)p, p->pid, p->parent->pid,
kdb_task_has_cpu(p), kdb_process_cpu(p), kdb_task_has_cpu(p), kdb_process_cpu(p),
kdb_task_state_char(p), kdb_task_state_char(p),
...@@ -2354,7 +2354,7 @@ void kdb_ps1(const struct task_struct *p) ...@@ -2354,7 +2354,7 @@ void kdb_ps1(const struct task_struct *p)
} else { } else {
if (KDB_TSK(cpu) != p) if (KDB_TSK(cpu) != p)
kdb_printf(" Error: does not match running " kdb_printf(" Error: does not match running "
"process table (0x%p)\n", KDB_TSK(cpu)); "process table (0x%px)\n", KDB_TSK(cpu));
} }
} }
} }
...@@ -2687,7 +2687,7 @@ int kdb_register_flags(char *cmd, ...@@ -2687,7 +2687,7 @@ int kdb_register_flags(char *cmd,
for_each_kdbcmd(kp, i) { for_each_kdbcmd(kp, i) {
if (kp->cmd_name && (strcmp(kp->cmd_name, cmd) == 0)) { if (kp->cmd_name && (strcmp(kp->cmd_name, cmd) == 0)) {
kdb_printf("Duplicate kdb command registered: " kdb_printf("Duplicate kdb command registered: "
"%s, func %p help %s\n", cmd, func, help); "%s, func %px help %s\n", cmd, func, help);
return 1; return 1;
} }
} }
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
int kdbgetsymval(const char *symname, kdb_symtab_t *symtab) int kdbgetsymval(const char *symname, kdb_symtab_t *symtab)
{ {
if (KDB_DEBUG(AR)) if (KDB_DEBUG(AR))
kdb_printf("kdbgetsymval: symname=%s, symtab=%p\n", symname, kdb_printf("kdbgetsymval: symname=%s, symtab=%px\n", symname,
symtab); symtab);
memset(symtab, 0, sizeof(*symtab)); memset(symtab, 0, sizeof(*symtab));
symtab->sym_start = kallsyms_lookup_name(symname); symtab->sym_start = kallsyms_lookup_name(symname);
...@@ -88,7 +88,7 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab) ...@@ -88,7 +88,7 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab)
char *knt1 = NULL; char *knt1 = NULL;
if (KDB_DEBUG(AR)) if (KDB_DEBUG(AR))
kdb_printf("kdbnearsym: addr=0x%lx, symtab=%p\n", addr, symtab); kdb_printf("kdbnearsym: addr=0x%lx, symtab=%px\n", addr, symtab);
memset(symtab, 0, sizeof(*symtab)); memset(symtab, 0, sizeof(*symtab));
if (addr < 4096) if (addr < 4096)
...@@ -149,7 +149,7 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab) ...@@ -149,7 +149,7 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab)
symtab->mod_name = "kernel"; symtab->mod_name = "kernel";
if (KDB_DEBUG(AR)) if (KDB_DEBUG(AR))
kdb_printf("kdbnearsym: returns %d symtab->sym_start=0x%lx, " kdb_printf("kdbnearsym: returns %d symtab->sym_start=0x%lx, "
"symtab->mod_name=%p, symtab->sym_name=%p (%s)\n", ret, "symtab->mod_name=%px, symtab->sym_name=%px (%s)\n", ret,
symtab->sym_start, symtab->mod_name, symtab->sym_name, symtab->sym_start, symtab->mod_name, symtab->sym_name,
symtab->sym_name); symtab->sym_name);
...@@ -887,13 +887,13 @@ void debug_kusage(void) ...@@ -887,13 +887,13 @@ void debug_kusage(void)
__func__, dah_first); __func__, dah_first);
if (dah_first) { if (dah_first) {
h_used = (struct debug_alloc_header *)debug_alloc_pool; h_used = (struct debug_alloc_header *)debug_alloc_pool;
kdb_printf("%s: h_used %p size %d\n", __func__, h_used, kdb_printf("%s: h_used %px size %d\n", __func__, h_used,
h_used->size); h_used->size);
} }
do { do {
h_used = (struct debug_alloc_header *) h_used = (struct debug_alloc_header *)
((char *)h_free + dah_overhead + h_free->size); ((char *)h_free + dah_overhead + h_free->size);
kdb_printf("%s: h_used %p size %d caller %p\n", kdb_printf("%s: h_used %px size %d caller %px\n",
__func__, h_used, h_used->size, h_used->caller); __func__, h_used, h_used->size, h_used->caller);
h_free = (struct debug_alloc_header *) h_free = (struct debug_alloc_header *)
(debug_alloc_pool + h_free->next); (debug_alloc_pool + h_free->next);
...@@ -902,7 +902,7 @@ void debug_kusage(void) ...@@ -902,7 +902,7 @@ void debug_kusage(void)
((char *)h_free + dah_overhead + h_free->size); ((char *)h_free + dah_overhead + h_free->size);
if ((char *)h_used - debug_alloc_pool != if ((char *)h_used - debug_alloc_pool !=
sizeof(debug_alloc_pool_aligned)) sizeof(debug_alloc_pool_aligned))
kdb_printf("%s: h_used %p size %d caller %p\n", kdb_printf("%s: h_used %px size %d caller %px\n",
__func__, h_used, h_used->size, h_used->caller); __func__, h_used, h_used->size, h_used->caller);
out: out:
spin_unlock(&dap_lock); spin_unlock(&dap_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment