libperf xyarray: Add bounds checks to xyarray__entry()
xyarray__entry() is missing any bounds checking yet often the x and y parameters come from external callers. Add bounds checks and an unchecked __xyarray__entry(). Committer notes: Make the 'x' and 'y' arguments to the new xyarray__entry() that does bounds check to be of type 'size_t', so that we cover also the case where 'x' and 'y' could be negative, which is needed anyway as having them as 'int' breaks the build with: /home/acme/git/perf/tools/lib/perf/include/internal/xyarray.h: In function ‘xyarray__entry’: /home/acme/git/perf/tools/lib/perf/include/internal/xyarray.h:28:8: error: comparison of integer expressions of different signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Werror=sign-compare] 28 | if (x >= xy->max_x || y >= xy->max_y) | ^~ /home/acme/git/perf/tools/lib/perf/include/internal/xyarray.h:28:26: error: comparison of integer expressions of different signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Werror=sign-compare] 28 | if (x >= xy->max_x || y >= xy->max_y) | ^~ cc1: all warnings being treated as errors Signed-off-by: Rob Herring <robh@kernel.org> Suggested-by: Arnaldo Carvalho de Melo <acme@kernel.org> Suggested-by: Namhyung Kim <namhyung@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lore.kernel.org/lkml/20210414195758.4078803-1-robh@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
47d01e7b99
commit
818869489b
@ -18,11 +18,18 @@ struct xyarray *xyarray__new(int xlen, int ylen, size_t entry_size);
|
|||||||
void xyarray__delete(struct xyarray *xy);
|
void xyarray__delete(struct xyarray *xy);
|
||||||
void xyarray__reset(struct xyarray *xy);
|
void xyarray__reset(struct xyarray *xy);
|
||||||
|
|
||||||
static inline void *xyarray__entry(struct xyarray *xy, int x, int y)
|
static inline void *__xyarray__entry(struct xyarray *xy, int x, int y)
|
||||||
{
|
{
|
||||||
return &xy->contents[x * xy->row_size + y * xy->entry_size];
|
return &xy->contents[x * xy->row_size + y * xy->entry_size];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void *xyarray__entry(struct xyarray *xy, size_t x, size_t y)
|
||||||
|
{
|
||||||
|
if (x >= xy->max_x || y >= xy->max_y)
|
||||||
|
return NULL;
|
||||||
|
return __xyarray__entry(xy, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int xyarray__max_y(struct xyarray *xy)
|
static inline int xyarray__max_y(struct xyarray *xy)
|
||||||
{
|
{
|
||||||
return xy->max_y;
|
return xy->max_y;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user