]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
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)
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

index bd4813bad317eb6ed7591768bc327e3645241a5b..e6cddbb2305f8d07d2cad538b93a1d7e3743a4e9 100644 (file)
@@ -3543,7 +3543,7 @@ scanhex(unsigned long *vp)
                }
        } else if (c == '$') {
                int i;
-               for (i=0; i<63; i++) {
+               for (i = 0; i < (KSYM_NAME_LEN - 1); i++) {
                        c = inchar();
                        if (isspace(c) || c == '\0') {
                                termch = c;