Control: found -1 2:2.1.0-5+deb10u2
Control: tag -1 moreinfo

Hi kibi,

On Sat, 11 Mar 2023 at 15:16:01 +0100, Cyril Brulebois wrote:
> Guilhem Moulin <guil...@debian.org> (2023-03-11):
>> On Sat, 11 Mar 2023 at 08:26:27 -0500, Jérôme Charaoui wrote:
>>> Today I upgraded a small KVM machine with a LUKS2 encrypted root and 1GiB of
>>> RAM to bookworm, and was very surprised to be confronted with an OOM
>>> immediately upon entering my LUKS password in the initramfs prompt:
>>> […]
>>> The problem appears to be perhaps related to #924560, but in this instance,
>>> the issue causing an unbootable system post-upgrade.
>>
>> No, this is related to #1028250 and 
>> https://gitlab.com/cryptsetup/cryptsetup/-/issues/802#note_1287298872 .
>> Don't think we can do anything in src:cryptsetup for existing volumes
>> unfortunately.  You might need to manually lower the parameters of your
>> PBKDF.
>
> Existing systems failing to boot after an upgrade doesn't seem to be
> “only” important to me…

I fail to see how that's different from an existing resource-constrained
system (sarge recommends for 64MiB RAM for desktop i386) being unusable
after dist-upgrading to a more recent Debian release.  Granted I haven't
tried it, but I very much doubt GNOME would still work with that little
memory :-)

Anyway, while it definitely isn't ideal (not very future proof) that the
key slots were created with a memory cost close to the whole available
memory, there is actually not that much difference in resident set size
before and after the upgrade.  The test environment is a VM with 1024M
RAM, and initialized with d-i's debian-10.12.0-amd64-netinst.iso and
“Encrypted LVM” partition scheme.  In my case the PBKDF benchmark chose
the following parameters (close to half the amount of physical memory
indeed):

        ~# cryptsetup luksDump /dev/vda5 | grep -A3 PBKDF:
                PBKDF:      argon2i
                Time cost:  4
                Memory:     504962
                Threads:    2

        ## buster (cryptsetup 2:2.1.0-5+deb10u2, linux 4.19+105+deb10u18)
        ~# command time cryptsetup luksOpen --test-passphrase /dev/vda5 <<<test
        1.98user 0.09system 0:01.13elapsed 182%CPU (0avgtext+0avgdata 
534408maxresident)k
        566inputs+0outputs (0major+2212minor)pagefaults 0swaps

        ## dist-upgrade to bullseye (cryptsetup 2:2.3.7-1+deb11u1, linux 
5.10.162-1)
        ~# command time cryptsetup luksOpen --test-passphrase /dev/vda5 <<<test
        1.93user 0.11system 0:01.14elapsed 179%CPU (0avgtext+0avgdata 
534012maxresident)k
        566inputs+0outputs (0major+2185minor)pagefaults 0swaps

        ## dist-upgrade to bookworm (cryptsetup 2:2.6.1-1, linux 6.1.12-1)
        ~# command time cryptsetup luksOpen --test-passphrase /dev/vda5 <<<test
        2.05user 0.08system 0:01.17elapsed 183%CPU (0avgtext+0avgdata 
512940maxresident)k
        6102inputs+0outputs (37major+1649minor)pagefaults 0swaps

So one could argue it's not a cryptsetup regression, at least not since
memory-hard KDFs are used by default (i.e. since buster).  The kernel
happens to kill cryptsetup because it's the main memory consumer at that
point (again due to unfortunate KDF parameters), but the reason why it
ran out of memory in the first place, and didn't with earlier releases,
appears to be independent from cryptsetup.

>> Lowering the severity, because this shouldn't block the transition of -2
>> into bookworm (which fixes an unrelated and arguably much more severe RC
>> bug).
>
> That's not really how RC bugs work: bugs aren't less RC because it makes
> sense for a specific version to migrate…
>
> Either the bug appeared specifically in the version it was filed against,
> and it makes sense to block the migration since that's a new RC bug in
> that particular version, and the RC-ness stays.
>
> Or the bug was already there in the version currently in testing, and that
> means that's not a regression, and the RC-ness stays. You only need to
> record the bug as also being found in the previous version (possibly
> plural) to make sure britney knows it's not a regression.

Ah cool didn't know that, thanks for the information.  Marking this as
found all the way back to buster then.  I'm indeed able to trigger the
OOM-killer on a buster system when I artificially fill the memory so the
memory cost exceeds what remains.  Furthermore I don't see what can be
done about existing keyslots, and that includes everything created since
buster.

> Sure, we can discuss the severity of the bug I filed. But #1032734 really
> can't be “just” important.

Tagging ‘moreinfo’ then.  I can definitely see how one can reproduce
this theoretically (and possibly in the future when the kernel's memory
requirement increase high enough), and mentioned that in the upstream
bug, but I'm unable to find a reproducer after dist-upgrading bullseye
systems to bookworm (all created from d-i's debian-11.6.0-amd64-netinst.iso,
and “Encrypted LVM” partition scheme, on VMs with 1024M RAM).

Jérôme, what memory cost is the keyslot using?  (Paste the output of
`cryptsetup luksDump /dev/vda5 | grep -A3 PBKDF:`.)  Would also be
interested to see by how much the amount of memory available to
cryptsetup has changed before and after the uprade.  Please edit
/usr/share/initramfs-tools/scripts/local-top/cryptroot and add `free` at
the begining of the setup_mapping() function (patch attached).  My own
findings are as follows (again on a minimal netinst system without
changing any default).  cryptsetup isn't even close to memory
exhaustion.

        ## bullseye (cryptsetup 2:2.3.7-1+deb11u1, linux 5.10.162-1)
        ~# cryptsetup luksDump /dev/vda5 | grep -A3 PBKDF:
                PBKDF:      argon2i
                Time cost:  4
                Memory:     499892
                Threads:    2
        ~# systemctl reboot
        Loading Linux 5.10.0-21-amd64 ...
        Loading initial ramdisk ...
                      total        used        free      shared  buff/cache   
available
        Mem:         999776       39276      843280          52      117220     
 777124
        Swap:             0           0           0
        Please unlock disk vda5_crypt:
        1.90user 0.18system 0:04.19elapsed 49%CPU (0avgtext+0avgdata 
525900maxresident)k
        566inputs+0outputs (0major+2400minor)pagefaults 0swaps
        cryptsetup: vda5_crypt: set up successfully

        ## pin src:cryptsetup to 2:2.3.7-1+deb11u1 and dist-upgrade everything 
else to bookworm
        Loading Linux 6.1.0-5-amd64 ...
        Loading initial ramdisk ...
                      total        used        free      shared  buff/cache   
available
        Mem:         993508       48892      748520          56      196096     
 683768
        Swap:             0           0           0
        Please unlock disk vda5_crypt:
        1.94user 0.21system 0:18.21elapsed 11%CPU (0avgtext+0avgdata 
525592maxresident)k
        566inputs+0outputs (0major+2402minor)pagefaults 0swaps
        cryptsetup: vda5_crypt: set up successfully

        ## remove the pin and finalize the dist-upgrade (cryptsetup 2:2.6.1-1, 
linux 6.1.12-1)
        Loading Linux 6.1.0-5-amd64 ...
        Loading initial ramdisk ...
                      total        used        free      shared  buff/cache   
available
        Mem:         993508       40672      759596          52      193240     
 694828
        Swap:             0           0           0
        Please unlock disk vda5_crypt:
        2.04user 0.12system 0:04.57elapsed 47%CPU (0avgtext+0avgdata 
507772maxresident)k
        566inputs+0outputs (0major+1382minor)pagefaults 0swaps
        cryptsetup: vda5_crypt: set up successfully

-- 
Guilhem.

Attachment: signature.asc
Description: PGP signature

Reply via email to