The errno value from getgrnam_r here is ERANGE which is documented as
"Insufficient buffer space supplied".
When I call get getgrnam_r with a large enough buffer everything
works. Indicating that the problem is that sysconf is returning
a value too small.
A quick google search tells me that sysconf(_S_GETGR_R_SIZE_MAX)
is documented as:
> sysconf(_S_GETGR_R_SIZE_MAX) returns either -1 or a good
> suggested starting value for buflen. It does not return the
> worst case possible for buflen.
In my case I have a group with about 50 users in /etc/group
and that is what triggered the problem in udev and caused
all of the udevs group lookups to fail.
The following patch which dynamically allocates the group member buffer
should fix this problem.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
enumeration: move ALSA control devices to the end of the enumerated devices of each card
Generally ALSA control devices should be the last ones to be processed
for ACL changes and similar operations because they can then be used as
indicators that ACL management finished for all device nodes of a
specific card.
This patch simple moves each controlC device behind all the pcmC devices
(and similar).
Kay Sievers [Fri, 24 Jul 2009 16:06:22 +0000 (18:06 +0200)]
hid2hci: rewrite (and break) rules and device handling
We must never access random devices in /dev which do not belong to
the event we are handling. Hard-coding /dev/hidrawX, and looping over all
devices is absolutely not acceptable --> hook into hidraw events.
We can not relay on (rather random) properties merged into the parent
device by earlier rules --> use libudev to find the sibling device
with a matching interface.
Libusb does not fit into udev's use case. We never want want to scan
and open() all usb devices in the system, just to find the device
we are already handling the event for --> put all the stupid scanning
into a single function and prepare for a fixed libusb or drop it later.
Martin Pitt [Thu, 23 Jul 2009 17:00:38 +0000 (19:00 +0200)]
extras/keymap: Fix crash for unknown keys
The keymap table has some holes in it, which caused the interactive mode to
crash for unknown keys. In these cases, print the numeric key code instead.
What's odd is that this is a huawei modem, not an option modem, so one would
expect it to work better with usb_modeswitch and it's -H (huawei) mode - but
that's not the case, I've tested that as well.
Martin Pitt [Sat, 18 Jul 2009 13:02:25 +0000 (15:02 +0200)]
keymap: inline one-line key maps
Remove key map files which have only one override. Instead, use keymap tools'
new feature of specifying scancode/keyname pairs directly at the command line.
Also add a comment to 95-keymap.rules about how to specify key mappings in the
rules.
Kay Sievers [Mon, 13 Jul 2009 01:09:05 +0000 (03:09 +0200)]
udevd: handle SIGCHLD before the worker event message
We may need to handle SIGCHLD before the queued worker message. The last
reference, from the SIGCHLD or the worker message will clean up the worker
context. In case we receive an unexpected SIGCHLD with an error, we let
the event fail and clean up the worker context.
Kay Sievers [Sat, 11 Jul 2009 16:21:26 +0000 (18:21 +0200)]
udevd: make sure a worker finishes event handling before exiting
Persistent network rules write out new rules files. When rules change,
we need to kill all workers to update the in-memory copy of the rules.
We need to make sure, that a worker finshes its work for all device
messages it has accepted, before it exits after a SIGTERM from the main
process.
Kay Sievers [Wed, 8 Jul 2009 12:13:20 +0000 (14:13 +0200)]
udevd: detach event from worker if we kill a worker
Jul 8 09:36:41 udevd[663]: worker [5491] did not accept message, kill it
Jul 8 09:36:41 udevd[663]: worker [5491] unexpectedly returned with 0
Jul 8 09:36:41 udevd[663]: worker [5551] unexpectedly returned with 0
Jul 8 09:36:41 kernel: [ 156.832086] <6>udevd[663]: segfault at 4 ip 00959fbc sp bfbe7b78 error 6 in udevd[94f000+1c000]
Ian Campbell [Mon, 6 Jul 2009 13:54:52 +0000 (14:54 +0100)]
scsi_id: correct error handling in prepend_vendor_model
The callers of prepend_vendor_model both expect < 0 to be returned on
error and the index to be returned otherwise. However
prepend_vendor_model actually returns 1 on error. Fix this by correctly
returning -1.
Older kernels (before e5b3cd42: "SCSI: sanitize INQUIRY strings")
truncated the model field in sysfs (or propagated bad results from the
target) to less than the expected/required 16 characters which meant
that the SCSI id was mangled into:
# /sbin/scsi_id -g -s /block/sdg
S146cee20VIRTUAL-DISK
when it should have been:
# /sbin/scsi_id -g -s /block/sdg
SIET VIRTUAL-DISK 146cee20
Notice how the serial number has been pasted over the vendor+model at
index 1 instead of being added at the end.
In the former case:
# cat /sys/devices/platform/host5/session1/target5:0:0/5:0:0:1/model | od -t c -t x1 0000000 V I R T U A L - D I S K \n
56 49 52 54 55 41 4c 2d 44 49 53 4b 0a
But it should have been:
# cat /sys/devices/platform/host5/session1/target5:0:0/5:0:0:1/model | od -t c -t x1 0000000 V I R T U A L - D I S K
56 49 52 54 55 41 4c 2d 44 49 53 4b 20 20 20 20 0000020 \n
0a
Kay Sievers [Sun, 5 Jul 2009 21:56:24 +0000 (23:56 +0200)]
build: add *exec* to the internal rootlibdir name
Automake like variables with *exec* in the directory names,
to decide, that it isn't *data*:
http://www.gnu.org/software/hello/manual/automake/The-Two-Parts-of-Install.html#The-Two-Parts-of-Install
Jon Masters [Thu, 2 Jul 2009 00:21:03 +0000 (20:21 -0400)]
firmware: search for third party or sysadmin supplied firmware updates
We currently search /lib/firmware and /lib/firmware/`uname -r` for firmware
files for device drivers loaded by the currently running kernel. These are
often packaged by distributions as a subpackage of the kernel or as a
separate package containing firmware. But these files cannot easily be
updated by third parties or sysadmins independently of that package.
This patch causes udev to also look for firmware files in an "updates"
directory, which is almost identical in purpose to the module-init-tools
"updates" directories insomuch as local changes can go in here and will
take preference over firmware supplied by any distribution.
Stefan Richter [Wed, 1 Jul 2009 19:41:43 +0000 (21:41 +0200)]
rules: set group ownership of new firewire driver device files
The newer firewire-core driver exposes per-device character device files,
called /dev/fw[0-9]*, in contrast to the older raw1394, video1394, dv1394
drivers which created one global file or per-controller files.
This allows to set ownership, permissions, or/ and access control lists
for each device file based on device type markers obtained from sysfs.
The "units" attribute which is used for this purpose has become available
in Linux 2.6.31(-rc1) by commit 0210b66dd88a2a1e451901b00378a2068b6ccb35.
The added rules match identifiers of
- IIDC devices:
industrial cameras and some webcams,
- AV/C devices:
camcorders, set-top boxes, TV sets, audio devices, and similar
devices.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Kay Sievers [Sun, 28 Jun 2009 00:59:48 +0000 (02:59 +0200)]
rules: make ata_id properties the default for all ATA block devices
We need to call ata_id as the default for libata sd* devices. We
want ID_BUS=ata, and the ATA device proeprties, and be independent
of the SCSI emulation with the truncated values. The links
in /dev/disk/by-id/{ata-*,scsi-*} are still the same.
Martin Pitt [Fri, 26 Jun 2009 06:17:23 +0000 (08:17 +0200)]
hid2hci: narrow matches to real HCI devices
The previous rules just checked bInterfaceProtocol but not the actual device
and interface class. This caused the hci rules to be applied for Dell USB hubs
and attached input devices like keyboards and mouses as well, breaking them
completely.
Tighten the match to also check device and interface class/subclass.
Kay Sievers [Wed, 17 Jun 2009 19:57:40 +0000 (21:57 +0200)]
extras: delete man pages for private udev tools
These are mostly dummy man pages, without real content, some even
outdated. None of these tools are part of any offered public interface,
and they should not pretend to be by offering a man page.