resolve_btfids: Fix the --fatal_warnings exit status

The resolve_btfids --fatal_warnings option is intended to make the tool
exit with a non-zero status if any warnings are reported. main()
initializes err to -1 and uses 'goto out' to return this status when
a sub-operation fails. If no error occurs,
'if (!(fatal_warnings && warnings)) err = 0;' modifies the final status
depending on whether any warnings have been reported.

Commit 522397d05e ("resolve_btfids: Change in-place update with raw
binary output") broke this logic by assigning the return values of newly
added sub-operations to err. As a result, successful sub-operations
overwrite the initial err value of -1 with 0, causing the tool to exit
successfully even when --fatal_warnings is enabled and warnings have been
reported.

Fix the issue by setting the final value of err unconditionally, so the
code doesn't depend on its previous value.

Fixes: 522397d05e ("resolve_btfids: Change in-place update with raw binary output")
Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Ihor Solodrai <ihor.solodrai@linux.dev>
Link: https://lore.kernel.org/bpf/20261008-resolve_btfids-warnings-v1-1-0d4e613ffa6e@suse.com
This commit is contained in:
Petr Pavlu authored and Daniel Borkmann committed 2026-10-15 00:13:08 +02:00
1 parent 3ead4ead07
commit 201a454df9
1 file changed
+1 -2
+1 -2
View File
@@ -2210,8 +2210,7 @@ dump_btf:
goto out;
}
if (!(fatal_warnings && warnings))
err = 0;
err = fatal_warnings && warnings ? -1 : 0;
out:
free_btf_links(&btf_links);
/*