[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#977877: console-setup: setupcon --setup-dir ... generates temporary file name inside etc/console-setup directory



Hi,

On Sun, Sep 07, 2025 at 12:19:58AM +0200, Philip Hands wrote:
> <Adithya.Balakumar@toshiba-tsip.com> writes:
> AFAICS $TMPFILE (configured to be tmpkbd.*) is being used in the (outer)
> setupcon script in order to record the commands used in the (initrd)
> setupcon that is being written to "$setupdir"/bin/setupcon

Yes.

> $TMPFILE is then used to store a list of things that will need to be
> copied to the initrd, and that list is then used to create
> "$setupdir"/morefiles, but $TMPFILE looks like it ought to be in either
> /run or /tmp, and those should be removed by the trap, so if it's ending
> up under $setupdir, what is copying it there?

>From my analysis, setupcon has a code path, which:

- only runs if no /etc/console-setup/cached* exist
- and KMAP is not set in config

Then it proceeds to use a tempfile (created in /tmp) and call 
loadkeys with this.
Example commands it wants to use for me:
   kbd_mode -a
   loadkeys /tmp/tmpkbd.KLgbbu > /dev/null

setupcon with --setup-dir at the very end then analyzed all commands 
it wants to use, and tries to *copy* all mentioned filenames into 
the initramfs.
This happens around line 1371-1376 and in the fileargs function.

> Your patch seems to assume that it is being copied in fileargs(), which
> seems to imply that the tmpkbd.* filename is being passed as an argument
> to one of the run() calls (if I'm reading the script correctly), but I
> don't see where that's happening, and I don't yet understand why it's
> happening.

Indeed this is what happens. I think it only happens as I described 
above. It's this if-branch:
https://salsa.debian.org/installer-team/console-setup/-/blob/a7bea22f15d7927921beef4858e95b4f7f885307/setupcon#L1261

> If that _is_ what's happening, and if there's a good reason for it, then
> I would think that the right place to fix the nondeterminism would be in
> the run() call that's causing the copy to be made, rather than by
> modifying the filename in fileargs(), [..]

Agreed.

> > Now, this script ('/bin/setupcon') is used in the initrd by the 'keymap' initrd script [2].
> > In fact the 'keymap' hook script [3] is what is calling the setupcon script with the --setup-dir option.
> >
> > In my use case, this issue surfaced due to the use of the cryptsetup-initramfs package which triggers the run of the 'keymap' hook script by setting 'KEYMAP=y' here[4].
> >
> > There *maybe*(speculating, not sure) more packages which triggers this 'keymap' hook script.
> >
> > Apologies for this long answer. I hope this gives some context.
> 
> No, that's great, thanks -- anyway, my reply is longer :-/
> 
> The question that's still bothering me is:
> 
>   Does anything within the resulting initrd actually make use of the
>   'keymap.*' file, and if so, where?

I'm not sure which file you mean now with 'keymap.*'. But all 
commands that setupcon would run are also copied into the 
built-setupcon (including some patching of referenced filenames).

Chris


Reply to: