By default udevd is not allowed to execute BPF syscalls. Implement workaround as suggested in: https://github.com/systemd/systemd/issues/13787 Signed-off-by: Sean Young <sean@xxxxxxxx> --- configure.ac | 6 ++++++ utils/keytable/50-rc_keymap.conf | 3 +++ utils/keytable/Makefile.am | 3 ++- v4l-utils.spec.in | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 utils/keytable/50-rc_keymap.conf diff --git a/configure.ac b/configure.ac index c84067ae..0ba60d4a 100644 --- a/configure.ac +++ b/configure.ac @@ -362,6 +362,11 @@ AC_ARG_WITH(udevdir, [], [with_udevdir=`$PKG_CONFIG --variable=udevdir udev || echo /lib/udev`]) +AC_ARG_WITH(systemdsystemunitdir, + AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [set systemd system unit directory]), + [], + [with_systemdsystemunitdir=`$PKG_CONFIG --variable=systemdsystemunitdir systemd || echo /usr/lib/systemd/system`]) + # Generic check: works with most distributions def_gconv_dir=`for i in /lib64 /usr/lib64 /usr/local/lib64 /lib /usr/lib /usr/local/lib; do if @<:@ -d \$i/gconv @:>@; then echo \$i/gconv; break; fi; done` @@ -384,6 +389,7 @@ AC_SUBST([libv4lconvertprivdir], [$libdir/$with_libv4lconvertsubdir]) AC_SUBST([keytablesystemdir], [$with_udevdir/rc_keymaps]) AC_SUBST([keytableuserdir], [$sysconfdir/rc_keymaps]) AC_SUBST([udevrulesdir], [$with_udevdir/rules.d]) +AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir/systemd-udevd.service.d/]) AC_SUBST([pkgconfigdir], [$libdir/pkgconfig]) AC_SUBST([gconvsysdir], [$with_gconvdir]) diff --git a/utils/keytable/50-rc_keymap.conf b/utils/keytable/50-rc_keymap.conf new file mode 100644 index 00000000..6066c50c --- /dev/null +++ b/utils/keytable/50-rc_keymap.conf @@ -0,0 +1,3 @@ +# ir-keytable needs access to bpf in order load BPF decoders +[Service] +SystemCallFilter=bpf diff --git a/utils/keytable/Makefile.am b/utils/keytable/Makefile.am index d7b30e2c..dfcd7609 100644 --- a/utils/keytable/Makefile.am +++ b/utils/keytable/Makefile.am @@ -3,6 +3,7 @@ man_MANS = ir-keytable.1 rc_keymap.5 sysconf_DATA = rc_maps.cfg keytablesystem_DATA = $(srcdir)/rc_keymaps/* udevrules_DATA = 70-infrared.rules +systemdsystemunit_DATA = 50-rc_keymap.conf ir_keytable_SOURCES = keytable.c parse.h ir-encode.c ir-encode.h toml.c toml.h keymap.c keymap.h @@ -18,7 +19,7 @@ ir_keytable_LDFLAGS += $(LIBELF_LIBS) SUBDIRS = bpf_protocols endif -EXTRA_DIST = 70-infrared.rules rc_keymaps rc_keymaps_userspace gen_input_events.pl gen_keytables.pl ir-keytable.1 rc_maps.cfg rc_keymap.5 +EXTRA_DIST = 70-infrared.rules 50-rc_keymap.conf rc_keymaps rc_keymaps_userspace gen_input_events.pl gen_keytables.pl ir-keytable.1 rc_maps.cfg rc_keymap.5 check: @$(foreach keymap,$(wildcard $(keytablesystem_DATA)),./ir-keytable --test-keymap=$(keymap);) diff --git a/v4l-utils.spec.in b/v4l-utils.spec.in index f1dd0421..77f6b6b8 100644 --- a/v4l-utils.spec.in +++ b/v4l-utils.spec.in @@ -153,6 +153,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %config(noreplace) %{_sysconfdir}/rc_keymaps/* %config(noreplace) %{_sysconfdir}/rc_maps.cfg %config(noreplace) %{_sysconfdir}/udev/rules.d/70-infrared.rules +%{_libdir}/systemd/system/systemd-udevd.service.d/50-rc-keymap.conf %{_bindir}/cx18-ctl %{_bindir}/ir-keytable %{_bindir}/ir-ctl -- 2.23.0