Bug#1087931: bookworm-pu: package criu/3.17.1-2+deb12u1
Hi,
On Wed, Nov 20, 2024 at 11:08:12PM +0100, Salvatore Bonaccorso wrote:
> Hi Forian,
>
> Thanks for your time!
>
> On Wed, Nov 20, 2024 at 09:33:53PM +0100, Florian Weimer wrote:
> > * Salvatore Bonaccorso:
> >
> > > Hi Florian,
> > >
> > > On Wed, Nov 20, 2024 at 02:05:46PM +0100, Florian Weimer wrote:
> > >> * Salvatore Bonaccorso:
> > >>
> > >> > [ Changes ]
> > >> > Quoting the upsream commit is likely the best to explain the changes:
> > >> >
> > >> > | cr-restore: rseq: dynamically handle *libc with rseq
> > >> > | Before this patch we assumed that CRIU is compiled against
> > >> > | the same GLibc as it runs with. But as we see from real
> > >> > | world examples like #1935 it's not always true.
> > >> > |
> > >> > | The idea of this patch is to detect rseq configuration
> > >> > | for the main CRIU process and use it to unregister
> > >> > | rseq for all further child processes. It's correct,
> > >> > | because we restore pstree using clone*() syscalls,
> > >> > | don't use exec*() (!) syscalls, so rseq gets inherited
> > >> > | in the kernel and rseq configuration remains the same
> > >> > | for all children processes.
> > >>
> > >> There's are further commit you should consider picking up:
> > >>
> > >> commit 089345f77a34d1bc7ef146d650636afcd3cdda21
> > >> Author: Florian Weimer <fweimer@redhat.com>
> > >> Date: Wed Jul 10 18:34:50 2024 +0200
> > >>
> > >> Adjust to glibc __rseq_size semantic change
> > >>
> > >> In commit 2e456ccf0c34a056e3ccafac4a0c7effef14d918 ("Linux: Make
> > >> __rseq_size useful for feature detection (bug 31965)") glibc 2.40
> > >> changed the meaning of __rseq_size slightly: it is now the size
> > >> of the active/feature area (20 bytes initially), and not the size
> > >> of the entire initially defined struct (32 bytes including padding).
> > >> The reason for the change is that the size including padding does not
> > >> allow detection of newly added features while previously unused
> > >> padding is consumed.
> > >>
> > >> The prep_libc_rseq_info change in criu/cr-restore.c is not necessary
> > >> on kernels which have full ptrace support for obtaining rseq
> > >> information because the code is not used. On older kernels, it is
> > >> a correctness fix because with size 20 (the new value), rseq
> > >> registeration would fail.
> > >>
> > >> The two other changes are required to make rseq unregistration work
> > >> in tests.
> > >>
> > >> Signed-off-by: Florian Weimer <fweimer@redhat.com>
> > >
> > > Do you consider this optional, or required for the fix to land in
> > > bookrworm?
> >
> > The mentioned glibc change is probably in bookworm already. I think
> > it's this one from 2.36-9+deb12u8:
> >
> > - Fixes rseq extension mechanism.
> >
> > I think you need the test changes of the criu patch to get a clean
> > run. The non-test changes are dormant with sufficiently recent
> > kernels that contain full ptrace support.
>
> Which, if I got the bit rights, should be since around upstream
> 90f093fa8ea4 ("rseq, ptrace: Add PTRACE_GET_RSEQ_CONFIGURATION
> request") in v5.13-rc1.
>
> https://criu.org/Rseq
>
> Notabne: We do not run the testsuite during build for criu, and only
> recently it got added as autopkgtest, which makes the whole now way
> more confortable. For bookworm we almost have no coverage at all :-(
To get some more confidence I did run the test suite similarly we do
now in the unstable autopkgtest (plus additionally first patching the
rseq test with the additional commit):
./zdtm.py run --criu-bin=/usr/sbin/criu --crit-bin=/usr/bin/crit --keep-going -a -x apparmor_stacking -x fd01 -x netns_lock_iptables
With that all tests pass (modulo the one skipped).
(Only on amd64 tested).
Regards,
Salvatore
Reply to: