]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64/scs: Fix handling of advance_loc4
authorPepper Gray <hello@peppergray.xyz>
Tue, 10 Mar 2026 13:44:28 +0000 (14:44 +0100)
committerWill Deacon <will@kernel.org>
Fri, 13 Mar 2026 14:15:34 +0000 (14:15 +0000)
DW_CFA_advance_loc4 is defined but no handler is implemented. Its
CFA opcode defaults to EDYNSCS_INVALID_CFA_OPCODE triggering an
error which wrongfully prevents modules from loading.

Link: https://bugs.gentoo.org/971060
Signed-off-by: Pepper Gray <hello@peppergray.xyz>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/pi/patch-scs.c

index bbe7d30ed12b32737be7998592a5c9fe28b71aae..dac568e4a54f23ad2db7f5c78b5db1439bb795a7 100644 (file)
@@ -192,6 +192,14 @@ static int scs_handle_fde_frame(const struct eh_frame *frame,
                        size -= 2;
                        break;
 
+               case DW_CFA_advance_loc4:
+                       loc += *opcode++ * code_alignment_factor;
+                       loc += (*opcode++ << 8) * code_alignment_factor;
+                       loc += (*opcode++ << 16) * code_alignment_factor;
+                       loc += (*opcode++ << 24) * code_alignment_factor;
+                       size -= 4;
+               break;
+
                case DW_CFA_def_cfa:
                case DW_CFA_offset_extended:
                        size = skip_xleb128(&opcode, size);