Re: [PATCH] udev: allow for udev attribute reading bug.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux