Skip to content

authvar: Remove unreachable free() - #128

Merged
vathpela merged 1 commit into
rhboot:mainfrom
cpackham-atlnz:build-fix
Aug 6, 2026
Merged

authvar: Remove unreachable free()#128
vathpela merged 1 commit into
rhboot:mainfrom
cpackham-atlnz:build-fix

Conversation

@cpackham-atlnz

@cpackham-atlnz cpackham-atlnz commented Nov 4, 2025

Copy link
Copy Markdown

When building using GCC 15 the following error is hit

  authvar.c: In function 'main':
  authvar.c:450:17: error: 'free' called on a pointer to an unallocated object '"NSS Certificate DB"' [-Werror=free-nonheap-object]
    450 |                 free(tokenname);
        |                 ^
  authvar.c:270:15: note: assigned here
    270 |         char *tokenname = "NSS Certificate DB";
        |               ^
  lto1: all warnings being treated as errors
  lto-wrapper: fatal error: gcc returned 1 exit status

This might be a false positive since the tokenname != origtoken condition should never be satisfied but it might also be an indication that lto or other optimisations have elided some code that they shouldn't have. Regardless tokenname is allocated on the stack and never modified so the call to free() and the origtoken local aren't needed and can be dropped.

@cpackham-atlnz

Copy link
Copy Markdown
Author

I first hit this with pesign-113 which ONIE packages. I can't reproduce the original error with pesign/main on fedora:rawhide as I suspect the optimization behaviour may have changed (there are certainly some cflags changes between 113 and main). Nevertheless the code is still unreachable so removing it is probably still a good idea.

@vathpela

vathpela commented Aug 6, 2026

Copy link
Copy Markdown
Member

Thanks for this. Unfortunately gcc has led you to misidentify the problem, which is that the poptOptions stanza for specifying the token is missing.

So I've fixed that here, and given you credit in the commit message for pointing it out.

Chris Packham noticed that with GCC 15, when building authvar with
`-flto`, it produced the following compiler warning/error:

  authvar.c: In function 'main':
  authvar.c:450:17: error: 'free' called on a pointer to an unallocated object '"NSS Certificate DB"' [-Werror=free-nonheap-object]
    450 |                 free(tokenname);
        |                 ^
  authvar.c:270:15: note: assigned here
    270 |         char *tokenname = "NSS Certificate DB";
        |               ^
  lto1: all warnings being treated as errors
  lto-wrapper: fatal error: gcc returned 1 exit status

This is happening because the entry in the poptOptions array for setting
the token is missing, and therefore we never use the code to set
anything other than the original, so this allocation never happens.

This adds that stanza.  Thanks to Chris for noticing.

Signed-off-by: Peter Jones <pjones@redhat.com>
@vathpela
vathpela merged commit b68165f into rhboot:main Aug 6, 2026
1 check passed
@cpackham-atlnz
cpackham-atlnz deleted the build-fix branch August 6, 2026 20:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants