"mdev: remove undocumented subsystem/devname matching hack" disaster.

Piotr Karbowski piotr.karbowski at gmail.com
Tue Apr 23 16:34:57 UTC 2013


On 04/02/2013 04:08 PM, Piotr Karbowski wrote:
> On 04/02/2013 03:46 PM, Denys Vlasenko wrote:
>> On Tue, Apr 2, 2013 at 3:31 PM, Piotr Karbowski
>> <piotr.karbowski at gmail.com>wrote:
>>
>>> On 04/02/2013 02:35 PM, Denys Vlasenko wrote:
>>>
>>>> The invocation which sets wrong ownership has $DEVNAME set:
>>>>
>>>> mdev[730]: 56.531462 ACTION:add SUBSYSTEM:sound DEVNAME:snd/controlC0
>>>> DEVPATH:/devices/pci0000:00/**0000:00:1b.0/sound/card0/**controlC0
>>>> mdev[730]: dev 116,5
>>>> ...
>>>>
>>>> If $DEVNAME is set, we don't guess device name to be basename
>>>> of $DEVPATH, we use $DEVNAME instead
>>>> (because it looks like a better choice).
>>>>
>>>> "snd/controlC0" won't match "control.*       root:audio 660 =snd/"
>>>> Last catch-all rule gets matched instead:
>>>>
>>>> mdev[730]: rule matched, line 111
>>>> mdev[730]: mknod snd/controlC0 (116,5) 20660 0:0
>>>> mdev[730]: running: /opt/mdev/helpers/catch-all
>>>>
>>>> This looks less than ideal, but I don't see immediate ways
>>>> to improve it. Ideas?
>>>>
>>>>
>>> Well, that's awkward, because mdev -s  see 'controlC0' but the mdev as
>>> hotplug agent after modprobe see it as snd/controlC0. I can imagine that
>>> this affect everything not only sound system. Would it be possible to
>>> restore how it was handled in older mdev? Otherwise that would
>>> require some
>>> heavy lifting regexes to handle it and some of the results can be far
>>> from
>>> desired result.
>>>
>>
>> It would require duplication of rules, yes.
>> I don't like this detail either.
>>
>> In some cases you can have one rule
>> by matching $DEVPATH:
>> DEVPATH=.*/control.*;.*   ....
>
> reworking most if not all rules with DEVPATH= does not looks really nice.
>
>>
>>> Woudn't it be better to 'basename' it? Because if the module is
>>> loaded or
>>> compiled in-kernel, it will be just 'controlC0', and I was pretty sure
>>> kernel never-ever provide subdir in DEVNAME,
>>>
>>
>> Looks like kernel provides subdirs in $DEVNAME (now).
>>
>>
>>> even the msr/cpuid support in kernel with help desc about /dev/cpu
>>> used to
>>> be created in bare /dev. The old mdev was using basename, and I see
>>> no real
>>> reason to not keep this as-it-was, what you think?
>>>
>>
>>> From $DEVNAMEs I saw it looks like using it makes sense:
>> kernel already tells us the subdir, no need to code it up
>> in the rules.
>
> If so, then mdev -s needs a way to support this, somehow to get the
> snd/X, if that's not possible, I would highly suggest to basename $MDEV.
>
> Other, ugly but possible workaround would be for me to put a thingy in
> catch-all script to check if $MDEV contain slash (and since it hit
> catch-all it wasn't handled), if it does, then basename it, export MDEV,
> DEVPATH etc and exec /sbin/mdev. Sounds better than in-mdev basenaming it?

Hey Denys, any news or comment on this? I'd like to roll out new mdev on 
some of my deployments however I don't want do any workaround like 
described above if thats not desired solution to this very issue.

-- Piotr.


More information about the busybox mailing list