perf cpumap: Make counter as unsigned ints
authorKhem Raj <raj.khem@gmail.com>
Mon, 23 Jan 2023 21:04:10 +0000 (13:04 -0800)
committerJaehoon Chung <jh80.chung@samsung.com>
Mon, 24 Jul 2023 23:25:19 +0000 (08:25 +0900)
These are loop counters which is inherently unsigned. Therefore make
them unsigned. Moreover it also fixes alloc-size-larger-than
error with gcc-13, where malloc can be called with (-1) due to tmp_len
being an int type.

Fixes
| cpumap.c:366:20: error: argument 1 range [1844674406511961702418446744073709551612] exceeds maximum object size 9223372036854775807 [-Werror=alloc-size-larger-than=]
|   366 |         tmp_cpus = malloc(tmp_len * sizeof(struct perf_cpu));
|       |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Upstream-Status: Submitted [https://lore.kernel.org/linux-perf-users/20230123211310.127532-1-raj.khem@gmail.com/T/#u]

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Change-Id: I7ecc661339efd49179dd4c1823f4969cee0b0515
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
tools/lib/perf/cpumap.c

index 6cd0be7c1bb438e50011600ec5e1d898bba9059b..d960880dd903c62ddd294bc3132541e3eeddcd41 100644 (file)
@@ -351,8 +351,8 @@ struct perf_cpu_map *perf_cpu_map__merge(struct perf_cpu_map *orig,
                                         struct perf_cpu_map *other)
 {
        struct perf_cpu *tmp_cpus;
-       int tmp_len;
-       int i, j, k;
+       unsigned int tmp_len;
+       unsigned int i, j, k;
        struct perf_cpu_map *merged;
 
        if (perf_cpu_map__is_subset(orig, other))
@@ -369,7 +369,7 @@ struct perf_cpu_map *perf_cpu_map__merge(struct perf_cpu_map *orig,
 
        /* Standard merge algorithm from wikipedia */
        i = j = k = 0;
-       while (i < orig->nr && j < other->nr) {
+       while (i < (unsigned int)orig->nr && j < (unsigned int)other->nr) {
                if (orig->map[i].cpu <= other->map[j].cpu) {
                        if (orig->map[i].cpu == other->map[j].cpu)
                                j++;
@@ -378,10 +378,10 @@ struct perf_cpu_map *perf_cpu_map__merge(struct perf_cpu_map *orig,
                        tmp_cpus[k++] = other->map[j++];
        }
 
-       while (i < orig->nr)
+       while (i < (unsigned int)orig->nr)
                tmp_cpus[k++] = orig->map[i++];
 
-       while (j < other->nr)
+       while (j < (unsigned int)other->nr)
                tmp_cpus[k++] = other->map[j++];
        assert(k <= tmp_len);