powerpc/xmon: Fix tmpstr length check in scanhex
authorMadhavan Srinivasan <maddy@linux.ibm.com>
Mon, 26 Aug 2024 06:42:17 +0000 (12:12 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 27 Aug 2024 07:10:55 +0000 (17:10 +1000)
commit0405e128110d47a40443936e68dc32d7bc4ccc0b
tree902817218ed931a1624edc879c698fd260264f3d
parentb7d47339d00d89af559a7068f4a640fc828177ad
powerpc/xmon: Fix tmpstr length check in scanhex

If a function name is greater than 63 characters long, xmon command
may not find them. For example, here is a test that executed an illegal
instruction in a kernel function and one of call stack function has a
name greater than 63 characters long:

  cpu 0x0: Vector: 700 (Program Check) at [c00000000a6577e0]
      pc: c0000000001aacb8: check__allowed__function__name__for__symbol__r4+0x8/0x10
      lr: c00000000019c1e0: check__allowed__function__name__for__symbol__r1+0x20/0x40
      sp: c00000000a657a80
     msr: 800000000288b033
    current = 0xc00000000a439900
    paca    = 0xc000000003e90000  irqmask: 0x03  irq_happened: 0x01
  .....
  [link register   ] c00000000019c1e0 check__allowed__function__name__for__symbol__r1+0x20/0x40
  [c00000000a657a80c00000000a439900 (unreliable)
  [c00000000a657aa0c0000000001021d8 check__allowed__function__name__for__symbol__r2_resolution_symbol+0x38/0x4c
  [c00000000a657ac0c00000000019b424 power_pmu_event_init+0xa4/0xa50

and when executing a dump instruction (di) command for long function
name, xmon fails to find the function symbol:

  0:mon> di $check__allowed__function__name__for__symbol__r2_resolution_symbol
  unknown symbol 'check__allowed__function__name__for__symbol__r2_resolution_symb'
  0000000000000000  ********

This is because in scanhex(), tmpstr loop index is checked only for
a upper bound of 63.

Fix it by replacing the upper bound value with (KSYM_NAME_LEN-1).

With fix:

  0:mon> di $check__allowed__function__name__for__symbol__r2_resolution_symbol
  c0000000001021a0  3c4c0249 addis   r2,r12,585
  c0000000001021a4  3842ae60 addi    r2,r2,-20896
  c0000000001021a8  7c0802a6 mflr    r0
  c0000000001021ac  60000000 nop
  .....

Reported-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Closes: https://lore.kernel.org/linuxppc-dev/CANiq72=QeTgtZL4k9=4CJP6C_Hv=rh3fsn3B9S3KFoPXkyWk3w@mail.gmail.com/
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240826064217.46658-1-maddy@linux.ibm.com
arch/powerpc/xmon/xmon.c