Skip to content

Commit 11db7ea

Browse files
committed
keventd: ship curated udev rules derived from eudev 3.2.14
Add 27 stock rules installed to /lib/udev/rules.d/. Rules invoking /lib/udev/<helper> fall back to keventd builtins (path_id, usb_id, blkid, hwdb, kmod, net_id, input_id) when the helper binary is absent; user-supplied helpers in /lib/udev/ still take precedence. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
1 parent 5f1b862 commit 11db7ea

29 files changed

Lines changed: 916 additions & 0 deletions

configure.ac

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,9 @@ AC_ARG_WITH(random-seed,
168168
AC_ARG_WITH(keventd,
169169
AS_HELP_STRING([--with-keventd], [Enable built-in keventd device manager, default: yes]),, [with_keventd=yes])
170170

171+
AC_ARG_WITH(udev-rules,
172+
AS_HELP_STRING([--without-udev-rules], [Skip install of curated udev rules under /lib/udev/rules.d, default: yes when keventd enabled]),, [with_udev_rules=yes])
173+
171174
AC_ARG_WITH(sulogin,
172175
AS_HELP_STRING([--with-sulogin@<:@=USER@:>@], [Enable built-in sulogin, optional USER to request password for (default root), default: no.]),[sulogin=$withval],[with_sulogin=no])
173176

@@ -350,6 +353,7 @@ AS_IF([test "x$with_plugin_path" != "xno"], [
350353
AM_CONDITIONAL(BASH, [test "x$bash_dir" != "xno"])
351354
AM_CONDITIONAL(STATIC, [test "x$enable_static" = "xyes"])
352355
AM_CONDITIONAL(KEVENTD, [test "x$with_keventd" != "xno"])
356+
AM_CONDITIONAL(UDEV_RULES, [test "x$with_keventd" != "xno" -a "x$with_udev_rules" != "xno"])
353357
AM_CONDITIONAL(SULOGIN, [test "x$with_sulogin" != "xno"])
354358
AM_CONDITIONAL(WATCHDOGD, [test "x$with_watchdog" != "xno"])
355359
AM_CONDITIONAL(LIBSYSTEMD, [test "x$with_libsystemd" != "xno"])

keventd/Makefile.am

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,39 @@ keventd_CFLAGS += $(lite_CFLAGS)
1818
keventd_CFLAGS += $(blkid_CFLAGS)
1919
keventd_LDADD = $(lite_LIBS)
2020
keventd_LDADD += $(blkid_LIBS)
21+
22+
# Curated udev rules derived from eudev 3.2.14 (GPL-2.0-or-later).
23+
# Installed to /lib/udev/rules.d/ so existing third-party rules and
24+
# local overrides under /etc/udev/rules.d/ coexist with standard udev
25+
# precedence. See .notes/curated-rules-manifest.md.
26+
if UDEV_RULES
27+
udevrulesdir = $(prefix)/lib/udev/rules.d
28+
dist_udevrules_DATA = \
29+
rules.d/50-udev-default.rules \
30+
rules.d/60-autosuspend.rules \
31+
rules.d/60-block.rules \
32+
rules.d/60-cdrom_id.rules \
33+
rules.d/60-drm.rules \
34+
rules.d/60-evdev.rules \
35+
rules.d/60-fido-id.rules \
36+
rules.d/60-input-id.rules \
37+
rules.d/60-persistent-alsa.rules \
38+
rules.d/60-persistent-input.rules \
39+
rules.d/60-persistent-storage.rules \
40+
rules.d/60-persistent-storage-tape.rules \
41+
rules.d/60-persistent-v4l.rules \
42+
rules.d/60-sensor.rules \
43+
rules.d/60-serial.rules \
44+
rules.d/64-btrfs.rules \
45+
rules.d/70-camera.rules \
46+
rules.d/70-joystick.rules \
47+
rules.d/70-memory.rules \
48+
rules.d/70-mouse.rules \
49+
rules.d/70-touchpad.rules \
50+
rules.d/75-net-description.rules \
51+
rules.d/75-probe_mtd.rules \
52+
rules.d/78-sound-card.rules \
53+
rules.d/80-drivers.rules \
54+
rules.d/80-net-name-slot.rules \
55+
rules.d/81-net-dhcp.rules
56+
endif
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/50-udev-default.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
# run a command on remove events
8+
ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}"
9+
ACTION=="remove", GOTO="default_end"
10+
11+
SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"
12+
13+
# select "system RTC" or just use the first one
14+
SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"
15+
SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"
16+
17+
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
18+
ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"
19+
20+
ACTION!="add", GOTO="default_end"
21+
22+
SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
23+
SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666"
24+
SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620"
25+
SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620"
26+
SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620"
27+
SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620"
28+
SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty"
29+
KERNEL=="tty[A-Z]*[0-9]|ttymxc[0-9]*|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
30+
31+
SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
32+
33+
SUBSYSTEM=="input", GROUP="input"
34+
SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664"
35+
36+
SUBSYSTEM=="video4linux", GROUP="video"
37+
SUBSYSTEM=="graphics", GROUP="video"
38+
SUBSYSTEM=="drm", KERNEL!="renderD*", GROUP="video"
39+
SUBSYSTEM=="dvb", GROUP="video"
40+
SUBSYSTEM=="media", GROUP="video"
41+
SUBSYSTEM=="cec", GROUP="video"
42+
43+
SUBSYSTEM=="drm", KERNEL=="renderD*", GROUP="video", MODE="0666"
44+
SUBSYSTEM=="kfd", GROUP="video", MODE="0666"
45+
46+
SUBSYSTEM=="misc", KERNEL=="sgx_enclave", GROUP="sgx", MODE="0660"
47+
SUBSYSTEM=="misc", KERNEL=="sgx_vepc", GROUP="sgx", MODE="0660"
48+
49+
# When using static_node= with non-default permissions, also update
50+
# tmpfiles.d/static-nodes-permissions.conf.in to keep permissions synchronized.
51+
52+
SUBSYSTEM=="sound", GROUP="audio", \
53+
OPTIONS+="static_node=snd/seq", OPTIONS+="static_node=snd/timer"
54+
55+
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"
56+
57+
SUBSYSTEM=="firewire", TEST=="units", TEST=="model", \
58+
IMPORT{builtin}="hwdb 'ieee1394:node:ven$attr{vendor}mo$attr{model}units$attr{units}'"
59+
60+
SUBSYSTEM=="firewire", TEST=="units", TEST!="model", \
61+
IMPORT{builtin}="hwdb 'ieee1394:node:ven$attr{vendor}units$attr{units}'"
62+
63+
SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_MIDI}=="1", GROUP="audio"
64+
SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_AUDIO}=="1", GROUP="audio"
65+
SUBSYSTEM=="firewire", TEST=="units", ENV{IEEE1394_UNIT_FUNCTION_VIDEO}=="1", GROUP="video"
66+
67+
KERNEL=="parport[0-9]*", GROUP="lp"
68+
SUBSYSTEM=="printer", KERNEL=="lp*", GROUP="lp"
69+
SUBSYSTEM=="ppdev", GROUP="lp"
70+
KERNEL=="lp[0-9]*", GROUP="lp"
71+
KERNEL=="irlpt[0-9]*", GROUP="lp"
72+
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", GROUP="lp"
73+
74+
SUBSYSTEM=="block", GROUP="disk"
75+
SUBSYSTEM=="block", KERNEL=="sr[0-9]*", GROUP="cdrom"
76+
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom"
77+
KERNEL=="sch[0-9]*", GROUP="cdrom"
78+
KERNEL=="pktcdvd[0-9]*", GROUP="cdrom"
79+
KERNEL=="pktcdvd", GROUP="cdrom"
80+
81+
SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape"
82+
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="0", GROUP="disk"
83+
KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk"
84+
KERNEL=="loop-control", GROUP="disk", OPTIONS+="static_node=loop-control"
85+
KERNEL=="btrfs-control", GROUP="disk"
86+
KERNEL=="rawctl", GROUP="disk"
87+
SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk"
88+
SUBSYSTEM=="aoe", GROUP="disk", MODE="0220"
89+
SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440"
90+
91+
KERNEL=="rfkill", MODE="0664"
92+
KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun"
93+
94+
KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse"
95+
96+
# The static_node is required on s390x and ppc (they are using MODULE_ALIAS)
97+
KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"
98+
99+
KERNEL=="vfio", MODE="0666", OPTIONS+="static_node=vfio/vfio"
100+
101+
KERNEL=="vsock", MODE="0666"
102+
KERNEL=="vhost-vsock", GROUP="kvm", MODE="0666", OPTIONS+="static_node=vhost-vsock"
103+
104+
KERNEL=="vhost-net", GROUP="kvm", MODE="0666", OPTIONS+="static_node=vhost-net"
105+
106+
KERNEL=="udmabuf", GROUP="kvm"
107+
108+
SUBSYSTEM=="ptp", ATTR{clock_name}=="KVM virtual PTP", SYMLINK += "ptp_kvm"
109+
110+
SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK += "ptp_hyperv"
111+
112+
SUBSYSTEM!="dmi", GOTO="dmi_end"
113+
ENV{ID_VENDOR}="$attr{sys_vendor}"
114+
ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="|product_name", ENV{ID_MODEL}="$attr{product_name}"
115+
ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="product_version", ENV{ID_MODEL}="$attr{product_version}"
116+
# fallback to board information
117+
ENV{ID_VENDOR}=="", ENV{ID_VENDOR}="$attr{board_vendor}"
118+
ENV{ID_MODEL}=="", ENV{ID_MODEL}="$attr{board_name}"
119+
LABEL="dmi_end"
120+
121+
LABEL="default_end"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-autosuspend.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
ACTION!="add", GOTO="autosuspend_end"
8+
9+
# I2C rules
10+
SUBSYSTEM=="i2c", ATTR{name}=="cyapa", \
11+
ATTR{power/control}="on", GOTO="autosuspend_end"
12+
13+
# Enable autosuspend if hwdb says so. Here we are relying on
14+
# the hwdb import done earlier based on MODALIAS.
15+
ENV{ID_AUTOSUSPEND}=="1", TEST=="power/control", \
16+
ATTR{power/control}="auto"
17+
18+
# Disable USB persist if hwdb says so.
19+
ENV{ID_PERSIST}=="0", TEST=="power/persist", \
20+
ATTR{power/persist}="0"
21+
22+
LABEL="autosuspend_end"

keventd/rules.d/60-block.rules

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-block.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
# enable in-kernel media-presence polling
8+
ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", \
9+
ATTR{parameters/events_dfl_poll_msecs}="2000"
10+
11+
# forward scsi device event to corresponding block device
12+
ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"
13+
14+
# watch metadata changes, caused by tools closing the device node which was opened for writing
15+
ACTION!="remove", SUBSYSTEM=="block", \
16+
KERNEL=="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|ubi*|scm*|pmem*|nbd*|zd*", \
17+
OPTIONS+="watch"

keventd/rules.d/60-cdrom_id.rules

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-cdrom_id.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
ACTION=="remove", GOTO="cdrom_end"
8+
SUBSYSTEM!="block", GOTO="cdrom_end"
9+
KERNEL!="sr[0-9]*|vdisk*|xvd*", GOTO="cdrom_end"
10+
ENV{DEVTYPE}!="disk", GOTO="cdrom_end"
11+
12+
# unconditionally tag device as CDROM
13+
KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1"
14+
15+
# stop automatically any mount units bound to the device if the media eject
16+
# button is pressed.
17+
ENV{ID_CDROM}=="1", ENV{SYSTEMD_MOUNT_DEVICE_BOUND}="1"
18+
19+
# media eject button pressed
20+
ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
21+
22+
# import device and media properties and lock tray to
23+
# enable the receiving of media eject button events
24+
IMPORT{program}="cdrom_id --lock-media $devnode"
25+
26+
# ejecting a CD does not remove the device node, so mark the systemd device
27+
# unit as inactive while there is no medium; this automatically cleans up of
28+
# stale mounts after ejecting
29+
ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}!="?*", ENV{SYSTEMD_READY}="0"
30+
31+
KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100"
32+
33+
LABEL="cdrom_end"

keventd/rules.d/60-drm.rules

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-drm.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
ACTION!="remove", SUBSYSTEM=="drm", SUBSYSTEMS=="pci|usb|platform", IMPORT{builtin}="path_id"
8+
9+
# by-path
10+
ENV{ID_PATH}=="?*", KERNEL=="card*", SYMLINK+="dri/by-path/$env{ID_PATH}-card"
11+
ENV{ID_PATH}=="?*", KERNEL=="controlD*", SYMLINK+="dri/by-path/$env{ID_PATH}-control"
12+
ENV{ID_PATH}=="?*", KERNEL=="renderD*", SYMLINK+="dri/by-path/$env{ID_PATH}-render"

keventd/rules.d/60-evdev.rules

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-evdev.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
ACTION=="remove", GOTO="evdev_end"
8+
KERNEL!="event*", GOTO="evdev_end"
9+
10+
# skip later rules when we find something for this input device
11+
IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=evdev:", \
12+
RUN{builtin}+="keyboard", GOTO="evdev_end"
13+
14+
# AT keyboard matching by the machine's DMI data
15+
DRIVERS=="atkbd", \
16+
IMPORT{builtin}="hwdb 'evdev:atkbd:$attr{[dmi/id]modalias}'", \
17+
RUN{builtin}+="keyboard", GOTO="evdev_end"
18+
19+
# device matching the input device name + properties + the machine's DMI data
20+
KERNELS=="input*", \
21+
IMPORT{builtin}="hwdb 'evdev:name:$attr{name}:phys:$attr{phys}:ev:$attr{capabilities/ev}:$attr{[dmi/id]modalias}'", \
22+
RUN{builtin}+="keyboard", GOTO="evdev_end"
23+
24+
# device matching the input device name and the machine's DMI data
25+
KERNELS=="input*", \
26+
IMPORT{builtin}="hwdb 'evdev:name:$attr{name}:$attr{[dmi/id]modalias}'", \
27+
RUN{builtin}+="keyboard", GOTO="evdev_end"
28+
29+
LABEL="evdev_end"

keventd/rules.d/60-fido-id.rules

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-fido-id.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
ACTION=="remove", GOTO="fido_id_end"
8+
9+
SUBSYSTEM=="hidraw", IMPORT{program}="fido_id"
10+
11+
# Tag any form of security token as such
12+
ENV{ID_SECURITY_TOKEN}=="1", TAG+="security-device"
13+
14+
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0b????:*", ENV{ID_SMARTCARD_READER}="1"
15+
# Tag any CCID device (i.e. Smartcard Reader) as security token
16+
ENV{ID_SMARTCARD_READER}=="1", TAG+="security-device"
17+
18+
LABEL="fido_id_end"

keventd/rules.d/60-input-id.rules

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: GPL-2.0-or-later
2+
# Derived from eudev 3.2.14 rules/60-input-id.rules
3+
# Modifications by the Finit project: none
4+
#
5+
# do not edit this file, it will be overwritten on update
6+
7+
ACTION=="remove", GOTO="id_input_end"
8+
9+
SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id"
10+
SUBSYSTEM=="input", IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=id-input:modalias:"
11+
12+
LABEL="id_input_end"

0 commit comments

Comments
 (0)