Kay Sievers [Wed, 22 Apr 2009 01:50:11 +0000 (03:50 +0200)]
libudev: monitor - add client socket filter for subsystem value
Messages send back by the udev daemon to the netlink socket are
multiplexed by the kernel and delivered to multiple clients. The
clients can upload a socket filter to let the kernel drop messages
not belonging to a certain subsystem. This prevent needless wakeups
and message processing for users who are only interested in a
subset of available events.
Recent kernels allow untrusted users to listen to the netlink
messages.
The messages send by the udev daemon are versioned, to prevent any
custom software reading them without libudev. The message wire format
may change with any udev version update.
libudev: monitor - ignore messages from unusual sources
For added protection, ignore any unicast message received on the
netlink socket or any multicast message on the kernel group not
received from the kernel.
Signed-off-by: Scott James Remnant <scott@ubuntu.com>
Alan Jenkins [Mon, 6 Apr 2009 09:18:41 +0000 (10:18 +0100)]
avoid leaking netlink socket fd to external programs
The netlink socket is now used by udev event processes. We should take
care not to pass it to the programs they execute. This is the same way
the inotify fd was handled.
Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Kay Sievers [Sun, 29 Mar 2009 02:24:39 +0000 (04:24 +0200)]
send monitor events back to netlink socket
Instead of of our own private monitor socket, we send the
processed event back to our netlink socket, to the multicast
group 2 -- so any number of users can listen to udev events,
just like they can listen to kernel emitted events on group 1.
Kay Sievers [Wed, 18 Mar 2009 17:42:16 +0000 (18:42 +0100)]
udevadm: test - handling trailing '/' in devpath
On Wed, Mar 18, 2009 at 16:00, Matthias Schwarzott <zzam@gentoo.org> wrote:
found out how the error occurs:
It is a difference between
A. udevadm test /sys/class/mem/null/
and
B. udevadm test /sys/class/mem/null
Case A was the case that showed the error behaviour. It seems udevadm is
confused by the trailing slash. This behaviour seems to be there since ages.
Adam Buchbinder [Mon, 16 Mar 2009 20:22:53 +0000 (16:22 -0400)]
create_floppy_devices: expand manpage
Include a table of what the CMOS types are, and note that nothing
will be created unless the -t option is specified. Also clean up
the formatting and bump the date.
Signed-off-by: Adam Buchbinder <adam.buchbinder@gmail.com>
udevadm: settle - synchronise with the udev daemon
There's still a slight race condition when using udevadm settle, if the
udev daemon has a pending inotify event but hasn't yet generated the
"change" uevent for it, the kernel and udev sequence numbers will match
and settle will exit.
Now udevadm settle will send a control message to udevd, which will
respond by sending SIGUSR1 back to the waiting udevadm settle once it
has completed the main loop iteration in which it received the control
message.
If there were no pending inotify events, this will simply wake up the
udev daemon and allow settle to continue. If there are pending inotify
events, they are handled first in the main loop so when settle is
continued they will have been turned into uevents and the kernel
sequence number will have been incremented.
Since the inotify event is pending for udevd when the close() system
call returns (it's queued as part of the kernel handling for that system
call), and since the kernel sequence number is incremented by writing to
the uevent file (as udevd does), this solves the race.
When the settle continues, if there were pending inotify events that
udevd had not read, they are now pending uevents which settle can wait
for.
Signed-off-by: Scott James Remnant <scott@ubuntu.com>
Kay Sievers [Tue, 3 Mar 2009 19:11:09 +0000 (20:11 +0100)]
volume_id: ntfs - fix uuid setting
In my scenario, the ntfs prober did *not* detect the presence of a
ntfs filesystem (i.e. vol_id --probe-all returned *only* ext3).
However, if you examine the source of the ntfs prober, it overwrites
the uuid field of the volume_id object long before it actually
decides there's a valid filesystem there - this resulted in vol_id
returning the rather bizarre combination of type=ext3, but a uuid
populated by the ntfs prober.
Michael Prokop [Tue, 3 Mar 2009 15:50:58 +0000 (16:50 +0100)]
fix compile error in debug mode
When building with './configure --enable-debug && make' it fails with:
udev-rules.c: In function ‘dump_token’:
udev-rules.c:366: error: ‘struct <anonymous>’ has no member named ‘i’
David Zeuthen [Tue, 17 Feb 2009 19:15:17 +0000 (14:15 -0500)]
*_id: add model/vendor enc strings
So ID_MODEL and ID_VENDOR are pretty useful keys. However since we fix
them up (removing leading/trailing whitespace, converts spaces to
underscores) for use in device naming etc. we also force these fixups on
the desktop shell. And this looks pretty ugly.
The attached patch introduces the ID_MODEL_ENC and ID_VENDOR_ENC keys
that contains the encoded version of the raw strings obtained. It's
pretty similar in spirit to ID_FS_LABEL and its cousin ID_FS_LABEL_ENC.
With this patch a desktop shell can fix up these strings as it sees fit.
Note that some fixup is still needed though, for example
Note the trailing and leading whitespace. Anyway with the attached patch
the desktop shell should be able to display "INTEL SSDSA2MH080G1GC"
rather than "INTEL_SSDSA2MH080G1GC" to the user.
This allows you to re-process the rules if the content of the device
has been changed, most useful for block subsystem to cause vol_id to
be run again.
Kay Sievers [Thu, 5 Feb 2009 13:03:17 +0000 (14:03 +0100)]
rules: fix md "change"/"remove" handling
On Thu, Feb 5, 2009 at 08:43, Harald Hoyer <harald@redhat.com> wrote:
> Radek Vykydal <rvykydal@redhat.com> encountered a problem with md devices.
> If the raid is about to be removed a "change" and "remove" event is sent.
Karel Zak [Fri, 23 Jan 2009 23:37:22 +0000 (00:37 +0100)]
vol_id: fix ddf version string
The version string in DDF suberblock does not include the null terminator
and the snprintf() function writes at most "size" bytes *including* the
null byte.
old version:
ID_FS_VERSION=02.00.0
new version:
ID_FS_VERSION=02.00.00