Projects
openEuler:22.03:LTS:LoongArch
systemd
_service:tar_scm_kernel_repo:backport-core-devi...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm_kernel_repo:backport-core-device-verify-device-syspath-on-switching-root.patch of Package systemd
From b6c86ae28149c4abb2f0bd6acab13153382da9e7 Mon Sep 17 00:00:00 2001 From: Yu Watanabe <watanabe.yu+github@gmail.com> Date: Wed, 26 Oct 2022 01:18:05 +0900 Subject: [PATCH] core/device: verify device syspath on switching root Otherwise, if a device is removed while switching root, then the corresponding .device unit will never go to inactive state. This replaces the code dropped by cf1ac0cfe44997747b0f857a1d0b67cea1298272. Fixes #25106. --- src/core/device.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/core/device.c b/src/core/device.c index 7e354b2b4a..6e07f2745b 100644 --- a/src/core/device.c +++ b/src/core/device.c @@ -305,6 +305,19 @@ static int device_coldplug(Unit *u) { found &= ~DEVICE_FOUND_UDEV; if (state == DEVICE_PLUGGED) state = DEVICE_TENTATIVE; + + /* Also check the validity of the device syspath. Without this check, if the device was + * removed while switching root, it would never go to inactive state, as both Device.found + * and Device.enumerated_found do not have the DEVICE_FOUND_UDEV flag, so device_catchup() in + * device_update_found_one() does nothing in most cases. See issue #25106. Note that the + * syspath field is only serialized when systemd is sufficiently new and the device has been + * already processed by udevd. */ + if (d->deserialized_sysfs) { + _cleanup_(sd_device_unrefp) sd_device *dev = NULL; + + if (sd_device_new_from_syspath(&dev, d->deserialized_sysfs) < 0) + state = DEVICE_DEAD; + } } if (d->found == found && d->state == state) -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.