diff mbox series

[v4l-utils] 50-rc_keymap.conf prevents debian testing from booting

Message ID 20191028145604.22907-1-sean@mess.org (mailing list archive)
State New, archived
Headers show
Series [v4l-utils] 50-rc_keymap.conf prevents debian testing from booting | expand

Commit Message

Sean Young Oct. 28, 2019, 2:56 p.m. UTC
If SystemCallFilter is not set for systemd-udevd, then 50-rc_keymap.conf
restricts the service to _only_ the bpf syscall, preventing the system
from booting.

Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Sean Young <sean@mess.org>
---
 configure.ac               | 6 ++++++
 utils/keytable/Makefile.am | 2 ++
 2 files changed, 8 insertions(+)

Comments

Hans Verkuil Oct. 28, 2019, 4:21 p.m. UTC | #1
On 10/28/19 3:56 PM, Sean Young wrote:
> If SystemCallFilter is not set for systemd-udevd, then 50-rc_keymap.conf
> restricts the service to _only_ the bpf syscall, preventing the system
> from booting.
> 
> Reported-by: Hans Verkuil <hverkuil@xs4all.nl>

Tested-by: Hans Verkuil <hverkuil@xs4all.nl>

Thanks! I think this should be merged quickly since it is not nice when
v4l-utils suddenly prevents your system from booting the next time.

Especially when you discover this two hours before you have to leave
for the airport to travel to the ELCE conference where you are
speaker the next day...

Just saying :-)

Regards,

	Hans

> Signed-off-by: Sean Young <sean@mess.org>
> ---
>   configure.ac               | 6 ++++++
>   utils/keytable/Makefile.am | 2 ++
>   2 files changed, 8 insertions(+)
> 
> diff --git a/configure.ac b/configure.ac
> index 01a24a28..8585a79d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -521,6 +521,12 @@ AM_CONDITIONAL([WITH_BPF],          [test x$enable_bpf != xno -a x$libelf_pkgcon
>   AS_IF([test x$enable_libdvbv5 = xno], [AC_SUBST([ENFORCE_LIBDVBV5_STATIC], ["-static"])])
>   AS_IF([test x$enable_libv4l = xno],   [AC_SUBST([ENFORCE_LIBV4L_STATIC],   ["-static"])])
>   
> +# Since systemd v239, udevd is not allowed to execute BPF systems calls;
> +# add an override to allow bpf(2) in that case. On earlier versions, the
> +# override will restrict udevd to bpf syscall only and will stop the system
> +# from booting. This is also true on current debian versions.
> +AM_CONDITIONAL([HAVE_UDEVDSYSCALLFILTER], [grep -s SystemCallFilter $with_systemdsystemunitdir/systemd-udevd.service])
> +
>   # misc
>   
>   if test "x$linux_os" = "xyes"; then
> diff --git a/utils/keytable/Makefile.am b/utils/keytable/Makefile.am
> index dfcd7609..4724897e 100644
> --- a/utils/keytable/Makefile.am
> +++ b/utils/keytable/Makefile.am
> @@ -3,7 +3,9 @@ man_MANS = ir-keytable.1 rc_keymap.5
>   sysconf_DATA = rc_maps.cfg
>   keytablesystem_DATA = $(srcdir)/rc_keymaps/*
>   udevrules_DATA = 70-infrared.rules
> +if HAVE_UDEVDSYSCALLFILTER
>   systemdsystemunit_DATA = 50-rc_keymap.conf
> +endif
>   
>   ir_keytable_SOURCES = keytable.c parse.h ir-encode.c ir-encode.h toml.c toml.h keymap.c keymap.h
>   
>
Sean Young Oct. 28, 2019, 4:36 p.m. UTC | #2
On Mon, Oct 28, 2019 at 05:21:02PM +0100, Hans Verkuil wrote:
> On 10/28/19 3:56 PM, Sean Young wrote:
> > If SystemCallFilter is not set for systemd-udevd, then 50-rc_keymap.conf
> > restricts the service to _only_ the bpf syscall, preventing the system
> > from booting.
> > 
> > Reported-by: Hans Verkuil <hverkuil@xs4all.nl>
> 
> Tested-by: Hans Verkuil <hverkuil@xs4all.nl>
> 
> Thanks! I think this should be merged quickly since it is not nice when
> v4l-utils suddenly prevents your system from booting the next time.
> 
> Especially when you discover this two hours before you have to leave
> for the airport to travel to the ELCE conference where you are
> speaker the next day...

Yes, it's been pushed. Sorry about this. I am a little concerned that
loading bpf rc keymaps from udevd is not the best idea. Possibly this should
be done via polkit. These changes seem a little fragile and as this shows,
if it goes wrong then you end up with a system that doesn't boot...

Thanks for your report/test, making a quick turnaround for a fix possible.


Sean
diff mbox series

Patch

diff --git a/configure.ac b/configure.ac
index 01a24a28..8585a79d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -521,6 +521,12 @@  AM_CONDITIONAL([WITH_BPF],          [test x$enable_bpf != xno -a x$libelf_pkgcon
 AS_IF([test x$enable_libdvbv5 = xno], [AC_SUBST([ENFORCE_LIBDVBV5_STATIC], ["-static"])])
 AS_IF([test x$enable_libv4l = xno],   [AC_SUBST([ENFORCE_LIBV4L_STATIC],   ["-static"])])
 
+# Since systemd v239, udevd is not allowed to execute BPF systems calls;
+# add an override to allow bpf(2) in that case. On earlier versions, the
+# override will restrict udevd to bpf syscall only and will stop the system
+# from booting. This is also true on current debian versions.
+AM_CONDITIONAL([HAVE_UDEVDSYSCALLFILTER], [grep -s SystemCallFilter $with_systemdsystemunitdir/systemd-udevd.service])
+
 # misc
 
 if test "x$linux_os" = "xyes"; then
diff --git a/utils/keytable/Makefile.am b/utils/keytable/Makefile.am
index dfcd7609..4724897e 100644
--- a/utils/keytable/Makefile.am
+++ b/utils/keytable/Makefile.am
@@ -3,7 +3,9 @@  man_MANS = ir-keytable.1 rc_keymap.5
 sysconf_DATA = rc_maps.cfg
 keytablesystem_DATA = $(srcdir)/rc_keymaps/*
 udevrules_DATA = 70-infrared.rules
+if HAVE_UDEVDSYSCALLFILTER
 systemdsystemunit_DATA = 50-rc_keymap.conf
+endif
 
 ir_keytable_SOURCES = keytable.c parse.h ir-encode.c ir-encode.h toml.c toml.h keymap.c keymap.h