scripts/sorttable: Have the ORC code use the _r() functions to read
authorSteven Rostedt <rostedt@goodmis.org>
Sun, 5 Jan 2025 16:22:15 +0000 (11:22 -0500)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 8 Jan 2025 03:23:05 +0000 (22:23 -0500)
The ORC code reads the section information directly from the file. This
currently works because the default read function is for 64bit little
endian machines. But if for some reason that ever changes, this will
break. Instead of having a surprise breakage, use the _r() functions that
will read the values from the file properly.

Cc: bpf <bpf@vger.kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nicolas Schier <nicolas@fjasle.eu>
Cc: Zheng Yejian <zhengyejian1@huawei.com>
Cc: Martin Kelly <martin.kelly@crowdstrike.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lore.kernel.org/20250105162344.721480386@goodmis.org
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
scripts/sorttable.h

index 18d07fdb27165acf489f197c18133c6d3c5e9f99..58f7ab5f5644658d52705904c49336bfb78c8dd8 100644 (file)
@@ -299,14 +299,14 @@ static int do_sort(Elf_Ehdr *ehdr,
 #if defined(SORTTABLE_64) && defined(UNWINDER_ORC_ENABLED)
                /* locate the ORC unwind tables */
                if (!strcmp(secstrings + idx, ".orc_unwind_ip")) {
-                       orc_ip_size = s->sh_size;
+                       orc_ip_size = _r(&s->sh_size);
                        g_orc_ip_table = (int *)((void *)ehdr +
-                                                  s->sh_offset);
+                                                  _r(&s->sh_offset));
                }
                if (!strcmp(secstrings + idx, ".orc_unwind")) {
-                       orc_size = s->sh_size;
+                       orc_size = _r(&s->sh_size);
                        g_orc_table = (struct orc_entry *)((void *)ehdr +
-                                                            s->sh_offset);
+                                                            _r(&s->sh_offset));
                }
 #endif
        } /* for loop */