sync_file_range fails in nspawn containers on arm, ppc

Bug #1840640 reported by Steve Dodd on 2019-08-19
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
systemd (Ubuntu)
Undecided
Unassigned
Bionic
Medium
Dan Streetman
Disco
Medium
Dan Streetman

Bug Description

[impact]

calling the glibc function sync_file_range() on a armhf nspawn container fails.

[test case]

see sample C program from original description below. compile and run that inside a nspawn container on armhf and it will fail.

nspawn instructions:
sudo apt install debootstrap systemd-container
sudo -i
debootstrap --arch=armhf bionic ~/bionic-tree/
systemd-nspawn -D ~/bionic-tree/

[regression potential]

this only adjusts nspawn to allow the sync_file_range2 syscall which is used on armhf, so the regression potential is very low. any possible regressions would likely be when calling sync_file_range().

[other info]

original description:
---

ARM has two sync_file_range syscalls, sync_file_range and sync_file_range2. The former is apparently not used, and glibc calls the latter whenever a userspace program calls sync_file_range. I'm guessing systemd-nspawn doesn't know this, because the follow code consistently fails in an nspawn container on ARM:

#define _GNU_SOURCE
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

void main()
{
        int f = open("/tmp/syncrange.test",O_CREAT|O_RDWR,0666);
        int r=sync_file_range(f, 0, 0, 0);
        if (r)
                perror("sync_file_range");
        close(f);
}

This seems to be causing problems specifically for borg(backup) and postgres:

https://github.com/borgbackup/borg/issues/4710
https://www.postgresql.org/message-id/flat/CA%2BhUKG%2BydOUT4zjxb6QmJWy8U9WbC-q%2BJWV7wLsEY9Df%3Dmw0Mw%40mail.gmail.com#ac8f14897647dc7eae3c7e7cbed36d93

The solution should be to cherrypick https://github.com/systemd/systemd/pull/13352, I am currently waiting for systemd to rebuild on a slow ARM box. Any chance of an SRU?

ProblemType: Bug
DistroRelease: Ubuntu 18.04
Package: systemd-container 237-3ubuntu10.24
Uname: Linux 4.14.66+ armv7l
NonfreeKernelModules: extcon_usb_gpio
ApportVersion: 2.20.9-0ubuntu7.7
Architecture: armhf
Date: Mon Aug 19 11:10:48 2019
ProcEnviron:
 TERM=screen
 PATH=(custom, no user)
 LANG=en_GB.UTF-8
 SHELL=/bin/bash
SourcePackage: systemd
UpgradeStatus: No upgrade log present (probably fresh install)

Steve Dodd (anarchetic) wrote :
Dimitri John Ledkov (xnox) wrote :

this is cherrypickable, yes.

Dan Streetman (ddstreet) on 2019-09-30
Changed in systemd (Ubuntu):
status: New → Fix Released
tags: added: next-ddstreet systemd
Dan Streetman (ddstreet) on 2019-10-02
tags: added: ddstreet disco
removed: next-ddstreet
Dan Streetman (ddstreet) on 2019-10-02
Changed in systemd (Ubuntu Disco):
assignee: nobody → Dan Streetman (ddstreet)
Changed in systemd (Ubuntu Bionic):
assignee: nobody → Dan Streetman (ddstreet)
Changed in systemd (Ubuntu Disco):
importance: Undecided → Medium
Changed in systemd (Ubuntu Bionic):
importance: Undecided → Medium
Changed in systemd (Ubuntu Disco):
status: New → In Progress
Changed in systemd (Ubuntu Bionic):
status: New → In Progress
Dan Streetman (ddstreet) wrote :

I'm having trouble reproducing this on a Bionic nspawn container on arm64; what host release, and container release, are you using? Are you using the latest glibc and systemd?

Can't check at the moment, but details should have been added by apport.

Is it possible arm64 abi is different from armhf (32bit?)

On Thu, 3 Oct 2019, 22:41 Dan Streetman, <email address hidden>
wrote:

> I'm having trouble reproducing this on a Bionic nspawn container on
> arm64; what host release, and container release, are you using? Are you
> using the latest glibc and systemd?
>
> --
> You received this bug notification because you are subscribed to the bug
> report.
> https://bugs.launchpad.net/bugs/1840640
>
> Title:
> sync_file_range fails in nspawn containers on arm, ppc
>
> To manage notifications about this bug go to:
>
> https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1840640/+subscriptions
>

Dan Streetman (ddstreet) wrote :

> Is it possible arm64 abi is different from armhf (32bit?)

ah, that was it, thanks, I can reproduce it now :)

Dan Streetman (ddstreet) on 2019-10-10
description: updated
description: updated
Steve Langasek (vorlon) wrote :

The test case here should explain to the tester how to set up an nspawn container to reproduce this.

Changed in systemd (Ubuntu Disco):
status: In Progress → Incomplete
Changed in systemd (Ubuntu Bionic):
status: In Progress → Incomplete
description: updated

Hello Steve, or anyone else affected,

Accepted systemd into disco-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/systemd/240-6ubuntu5.8 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested and change the tag from verification-needed-disco to verification-done-disco. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-disco. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in systemd (Ubuntu Disco):
status: Incomplete → Triaged
Changed in systemd (Ubuntu Bionic):
status: Incomplete → Triaged
status: Triaged → Confirmed
status: Confirmed → In Progress
Changed in systemd (Ubuntu Disco):
status: Triaged → In Progress
status: In Progress → Fix Committed
tags: added: verification-needed verification-needed-disco

All autopkgtests for the newly accepted systemd (240-6ubuntu5.8) for disco have finished running.
The following regressions have been reported in tests triggered by the package:

prometheus-bind-exporter/unknown (armhf)
php7.2/7.2.24-0ubuntu0.19.04.1 (armhf)
gvfs/1.40.1-1ubuntu0.1 (ppc64el)
pdns-recursor/unknown (armhf)
webhook/unknown (armhf)
munin/2.0.47-1ubuntu3 (armhf, arm64)
systemd/240-6ubuntu5.8 (ppc64el)

Please visit the excuses page listed below and investigate the failures, proceeding afterwards as per the StableReleaseUpdates policy regarding autopkgtest regressions [1].

https://people.canonical.com/~ubuntu-archive/proposed-migration/disco/update_excuses.html#systemd

[1] https://wiki.ubuntu.com/StableReleaseUpdates#Autopkgtest_Regressions

Thank you!

Steve Dodd (anarchetic) wrote :

@vorlon, will do my best to test the disco version, but I don't currently have an ARM disco environment, and usual health battles mean it'll probably be a struggle to set one up - I'll have a go though!

The bionic version I will of course be all over :)

Steve Dodd (anarchetic) wrote :

OK, I've had a go, but oddly I can't reproduce this in a disco VM at the moment, which makes testing the fix tricky..

Steve Dodd (anarchetic) wrote :

OK, so my kernel didn't have seccomp support compiled in and systemd just silently fails to set seccomp filters in that case.

Have now reproduced the bug on an armhf disco VM, and verified that the package in proposed, 240-6ubuntu5.8 fixes it.

tags: added: verification-done-disco
removed: verification-needed-disco

Hello Steve, or anyone else affected,

Accepted systemd into bionic-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/systemd/237-3ubuntu10.32 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested and change the tag from verification-needed-bionic to verification-done-bionic. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-bionic. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in systemd (Ubuntu Bionic):
status: In Progress → Fix Committed
tags: added: verification-needed-bionic

All autopkgtests for the newly accepted systemd (237-3ubuntu10.32) for bionic have finished running.
The following regressions have been reported in tests triggered by the package:

gvfs/1.36.1-0ubuntu1.3.3 (ppc64el)
linux/unknown (ppc64el)

Please visit the excuses page listed below and investigate the failures, proceeding afterwards as per the StableReleaseUpdates policy regarding autopkgtest regressions [1].

https://people.canonical.com/~ubuntu-archive/proposed-migration/bionic/update_excuses.html#systemd

[1] https://wiki.ubuntu.com/StableReleaseUpdates#Autopkgtest_Regressions

Thank you!

Hello Steve, or anyone else affected,

Accepted systemd into bionic-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/systemd/237-3ubuntu10.33 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested and change the tag from verification-needed-bionic to verification-done-bionic. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-bionic. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

All autopkgtests for the newly accepted systemd (237-3ubuntu10.33) for bionic have finished running.
The following regressions have been reported in tests triggered by the package:

gvfs/1.36.1-0ubuntu1.3.3 (ppc64el, amd64)
dovecot/1:2.2.33.2-1ubuntu4.5 (armhf)
umockdev/0.11.1-1 (ppc64el)

Please visit the excuses page listed below and investigate the failures, proceeding afterwards as per the StableReleaseUpdates policy regarding autopkgtest regressions [1].

https://people.canonical.com/~ubuntu-archive/proposed-migration/bionic/update_excuses.html#systemd

[1] https://wiki.ubuntu.com/StableReleaseUpdates#Autopkgtest_Regressions

Thank you!

Steve Dodd (anarchetic) wrote :

Just tested on bionic, looks good - thanks everyone!

tags: added: verification-done verification-done-bionic
removed: verification-needed verification-needed-bionic
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers