]> git.ipfire.org Git - thirdparty/systemd.git/commit
repart: when copying files into vfat or similar, do not set ownership 42345/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@amutable.com>
Wed, 27 May 2026 16:28:21 +0000 (18:28 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@amutable.com>
Wed, 3 Jun 2026 14:02:58 +0000 (16:02 +0200)
commitfe2b35bd587864186b6a2a814711ace062ebc2ec
tree27b7885fe100b7b636b574110a0eb5e7d905b834
parent230a38ea52d321a301e84739f627f1408967e7e2
repart: when copying files into vfat or similar, do not set ownership

$ mkdir /var/tmp/files
$ touch /var/tmp/files/a
$ mkdir /var/tmp/conf
$ cat >>/var/tmp/conf/esp.conf
[Partition]
Type=esp
Format=vfat
CopyFiles=/var/tmp/files:/
$ truncate /var/tmp/disk -s 300M
$ sudo systemd-repart --dry-run=no --empty=require --definitions=/var/tmp/conf /var/tmp/disk
...
Populating vfat filesystem.
Failed to copy '...' to '/run/systemd/mount-root/': Operation not permitted
(sd-copy) failed with exit status 1.

The issue is that if there's a file owned by non-root and we try to copy
it into a newly-created DOS partition, fchown fails:
  fchown(11</run/systemd/mount-root/...>, 1000, 1000) = -1 EPERM (Operation not permitted)
We want to ignore file ownership in such cases, so pass our own UID/GID
to copy_tree_at(), which turns the fchown into a noop and let's the
operation pass through.

Fixes #38863.
src/basic/mountpoint-util.c
src/basic/mountpoint-util.h
src/repart/repart.c