mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
tracing: Have the histogram compare functions convert to u64 first
commit106f41f5a3upstream. The compare functions of the histogram code would be specific for the size of the value being compared (byte, short, int, long long). It would reference the value from the array via the type of the compare, but the value was stored in a 64 bit number. This is fine for little endian machines, but for big endian machines, it would end up comparing zeros or all ones (depending on the sign) for anything but 64 bit numbers. To fix this, first derference the value as a u64 then convert it to the type being compared. Link: http://lkml.kernel.org/r/20191211103557.7bed6928@gandalf.local.home Cc: stable@vger.kernel.org Fixes:08d43a5fa0("tracing: Add lock-free tracing_map") Acked-by: Tom Zanussi <zanussi@kernel.org> Reported-by: Sven Schnelle <svens@stackframe.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Chris
parent
0f64be40ce
commit
25bd1b0f06
@@ -90,8 +90,8 @@ static int tracing_map_cmp_atomic64(void *val_a, void *val_b)
|
||||
#define DEFINE_TRACING_MAP_CMP_FN(type) \
|
||||
static int tracing_map_cmp_##type(void *val_a, void *val_b) \
|
||||
{ \
|
||||
type a = *(type *)val_a; \
|
||||
type b = *(type *)val_b; \
|
||||
type a = (type)(*(u64 *)val_a); \
|
||||
type b = (type)(*(u64 *)val_b); \
|
||||
\
|
||||
return (a > b) ? 1 : ((a < b) ? -1 : 0); \
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user