On Thu, Sep 19 2019, David F. wrote: > does this apply to eudev as well? I'm thinking of upgrading from an > older udev to eudev on our boot media. Apparently not. udev_device_get_sysattr_value() calls a single size = read(fd, value, sizeof(value)); rather than fread(). NeilBrown > > On Tue, Sep 17, 2019 at 11:11 PM NeilBrown <neilb@xxxxxxx> wrote: >> >> >> There is a bug in udev (which will hopefully get fixed, but >> we should allow for it anways). >> When reading a sysfs attribute, it first reads the whole >> value of the attribute, then reads again expecting to get >> a read of 0 bytes, like you would with an ordinary file. >> If the sysfs attribute changed between these two reads, it can >> get a mixture of two values. >> >> In particular, if it reads when 'array_state' is changing from >> 'clear' to 'inactive', it can find the value as "clear\nve". >> >> This causes the test for "|clear|active" to fail, so systemd is allowed >> to think that the array is ready - when it isn't. >> >> So change the pattern to allow for this but adding a wildcard at >> the end. >> Also don't allow for an empty string - reading array_state will >> never return an empty string - if it exists at all, it will be >> non-empty. >> >> Signed-off-by: NeilBrown <neilb@xxxxxxx> >> --- >> udev-md-raid-arrays.rules | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/udev-md-raid-arrays.rules b/udev-md-raid-arrays.rules >> index d3916651cf5c..c8fa8e89ef69 100644 >> --- a/udev-md-raid-arrays.rules >> +++ b/udev-md-raid-arrays.rules >> @@ -14,7 +14,7 @@ ENV{DEVTYPE}=="partition", GOTO="md_ignore_state" >> # never leave state 'inactive' >> ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" >> TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end" >> -ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" >> +ATTR{md/array_state}=="clear*|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end" >> LABEL="md_ignore_state" >> >> IMPORT{program}="BINDIR/mdadm --detail --no-devices --export $devnode" >> -- >> 2.14.0.rc0.dirty >>
Attachment:
signature.asc
Description: PGP signature