On Fri, Feb 2, 2024 at 3:41 PM Ian Rogers <irogers@xxxxxxxxxx> wrote: > > Potential corner cases could cause a cpumap to be allocated with size > 0, but an empty cpumap should be represented as NULL. Add a path in > perf_cpu_map__alloc to ensure this. > > Suggested-by: James Clark <james.clark@xxxxxxx> > Closes: https://lore.kernel.org/lkml/2cd09e7c-eb88-6726-6169-647dcd0a8101@xxxxxxx/ > Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx> > --- > tools/lib/perf/cpumap.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/tools/lib/perf/cpumap.c b/tools/lib/perf/cpumap.c > index ba49552952c5..cae799ad44e1 100644 > --- a/tools/lib/perf/cpumap.c > +++ b/tools/lib/perf/cpumap.c > @@ -18,9 +18,13 @@ void perf_cpu_map__set_nr(struct perf_cpu_map *map, int nr_cpus) > > struct perf_cpu_map *perf_cpu_map__alloc(int nr_cpus) > { > - RC_STRUCT(perf_cpu_map) *cpus = malloc(sizeof(*cpus) + sizeof(struct perf_cpu) * nr_cpus); > + RC_STRUCT(perf_cpu_map) *cpus; > struct perf_cpu_map *result; > > + if (nr_cpus == 0) > + return NULL; But allocation failure also returns NULL. Then callers should check what's the expected result. Thanks, Namhyung > + > + cpus = malloc(sizeof(*cpus) + sizeof(struct perf_cpu) * nr_cpus); > if (ADD_RC_CHK(result, cpus)) { > cpus->nr = nr_cpus; > refcount_set(&cpus->refcnt, 1); > -- > 2.43.0.594.gd9cf4e227d-goog >