Message ID | 20220624135902.520748-2-geomatsi@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | perf: RISC-V: fix access beyond allocated array | expand |
> The root cause could be related to the interpretation of the number of > counters reported by SBI firmware. For instance, if we assume that unused > timer counter with index 1 is not reported, then the range is correct > and larger array needs to be allocated. > > This is not the case though since SBI firmware is supposed to report the > total number of firmware and hardware counters including special or > unused ones like the timer counter. So just fix the range in for-loop. Hi Atish, Just a friendly reminder. Regards, Sergey
On Fri, Jun 24, 2022 at 6:59 AM Sergey Matyukevich <geomatsi@gmail.com> wrote: > > From: Sergey Matyukevich <sergey.matyukevich@syntacore.com> > > The root cause could be related to the interpretation of the number of > counters reported by SBI firmware. For instance, if we assume that unused > timer counter with index 1 is not reported, then the range is correct > and larger array needs to be allocated. > > This is not the case though since SBI firmware is supposed to report the > total number of firmware and hardware counters including special or > unused ones like the timer counter. So just fix the range in for-loop. > > Signed-off-by: Sergey Matyukevich <sergey.matyukevich@syntacore.com> > --- > drivers/perf/riscv_pmu_sbi.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c > index dca3537a8dcc..a5d25b51beac 100644 > --- a/drivers/perf/riscv_pmu_sbi.c > +++ b/drivers/perf/riscv_pmu_sbi.c > @@ -457,7 +457,7 @@ static int pmu_sbi_get_ctrinfo(int nctr) > if (!pmu_ctr_list) > return -ENOMEM; > > - for (i = 0; i <= nctr; i++) { > + for (i = 0; i < nctr; i++) { > ret = sbi_ecall(SBI_EXT_PMU, SBI_EXT_PMU_COUNTER_GET_INFO, i, 0, 0, 0, 0, 0); > if (ret.error) > /* The logical counter ids are not expected to be contiguous */ > -- > 2.36.1 > LGTM. Reviewed-by: Atish Patra <atishp@rivosinc.com>
On Sun, Jul 10, 2022 at 11:43 PM Sergey Matyukevich <geomatsi@gmail.com> wrote: > > > The root cause could be related to the interpretation of the number of > > counters reported by SBI firmware. For instance, if we assume that unused > > timer counter with index 1 is not reported, then the range is correct > > and larger array needs to be allocated. > > > > This is not the case though since SBI firmware is supposed to report the > > total number of firmware and hardware counters including special or > > unused ones like the timer counter. So just fix the range in for-loop. > > Hi Atish, > > Just a friendly reminder. > Sorry. I thought I already sent the RB tag. > Regards, > Sergey
diff --git a/drivers/perf/riscv_pmu_sbi.c b/drivers/perf/riscv_pmu_sbi.c index dca3537a8dcc..a5d25b51beac 100644 --- a/drivers/perf/riscv_pmu_sbi.c +++ b/drivers/perf/riscv_pmu_sbi.c @@ -457,7 +457,7 @@ static int pmu_sbi_get_ctrinfo(int nctr) if (!pmu_ctr_list) return -ENOMEM; - for (i = 0; i <= nctr; i++) { + for (i = 0; i < nctr; i++) { ret = sbi_ecall(SBI_EXT_PMU, SBI_EXT_PMU_COUNTER_GET_INFO, i, 0, 0, 0, 0, 0); if (ret.error) /* The logical counter ids are not expected to be contiguous */