On Tue, Apr 9, 2019 at 3:17 PM Gerecke, Jason <killert...@gmail.com> wrote:

> From: Jason Gerecke <jason.gere...@wacom.com>
>
> Previously we would only automatically discover Ubuntu's shim MOK if one
> had been created. We now also try to use the kernel's autogenerated key
> if present, and the key generated by rEFInd (though this may be inside
> a directory that only root can read from).


Does this mean we should prompt users to compile input-wacom under root?

It’s quite a lot of work. Thank you for your effort, Jason!

Acked-by: Ping Cheng <ping.ch...@wacom.com> for the whole set.

Cheers,
Ping


>
> Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
> ---
>  configure.ac | 52 ++++++++++++++++++++++++++++++++--------------------
>  1 file changed, 32 insertions(+), 20 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index fa88ade..5353705 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -248,6 +248,25 @@ dnl
> =======================================================
>  dnl Module signing
>  AC_DEFUN([WACOM_LINUX_READ_CONFIG], [grep -sh '^$1='
> $WCM_KERNEL_DIR/.config /boot/config-$MODUTS | head -n1 | cut -d= -f2- |
> sed -e 's/^"\(.*\)"$/\1/'])
>
> +AC_DEFUN([WACOM_LINUX_FILE_IF_EXISTS], [test -f "$1" && readlink -e "$1"])
> +
> +AC_DEFUN([WACOM_LINUX_CHECK_KEYCERT],
> +if test "$MODSIGN_PRIVFILE" = "yes" -o -z "$MODSIGN_PRIVFILE"; then
> +       AC_MSG_CHECKING(for $1 key at $2)
> +       KEYFILE=$(WACOM_LINUX_FILE_IF_EXISTS([$2]))
> +       RESULT=$(test -z "$KEYFILE" && echo "no" || echo "yes")
> +       AC_MSG_RESULT([$RESULT])
> +       AC_MSG_CHECKING(for $1 cert at $3)
> +       CERTFILE=$(WACOM_LINUX_FILE_IF_EXISTS([$3]))
> +       RESULT=$(test -z "$CERTFILE" && echo "no" || echo "yes")
> +       AC_MSG_RESULT([$RESULT])
> +       if test -n "$KEYFILE" -a -n "$CERTFILE"; then
> +               MODSIGN_PRIVFILE="$KEYFILE"
> +               MODSIGN_CERTFILE="$CERTFILE";
> +       fi
> +fi)
> +
> +
>  MODSIGN_ENABLE=default
>  MODSIGN_HASHALGO=
>  MODSIGN_PRIVFILE=
> @@ -290,20 +309,6 @@ if test "$MODSIGN_ENABLE" = "yes" -o
> "$MODSIGN_ENABLE" = "default"; then
>
>
>
> -       # There is no standard location for storing kernel signing keys
> -       # and certificates. The kernel itself has CONFIG_MODULE_SIG_KEY
> -       # (which contains a key and cert) which likely points to a file
> -       # that doesn't exist unless you built the kernel yourself. Most
> -       # distributions use the "shim" bootloader which allows "machine
> -       # owner keys" (MOK) to be enrolled by the end-user, but only
> -       # Ubuntu provides a tool to automatically generate these keys
> -       # (`update-secureboot-policy --new-key`); other distros rely on
> -       # the user generating the key/cert themselves and keeping it in a
> -       # suitably-safe location.
> -       #
> -       # The kernel should automatically try to sign modules as part of
> -       # the `make modules_install` step, so that covers the first case.
> -       # In the second case the best we can do is try Ubuntu's location.
>         AC_ARG_WITH(signing-key,
>                 AS_HELP_STRING([--with-signing-key=<trusted.priv>],
> [Specify module signing key location]),
>                 [MODSIGN_PRIVFILE="$withval"])
> @@ -311,12 +316,19 @@ if test "$MODSIGN_ENABLE" = "yes" -o
> "$MODSIGN_ENABLE" = "default"; then
>                 AS_HELP_STRING([--with-signing-cert=<trusted.der>],
> [Specify module signing cert location]),
>                 [MODSIGN_CERTFILE="$withval"])
>
> -       if test "$MODSIGN_PRIVFILE" = "yes" -o -z "$MODSIGN_PRIVFILE"; then
> -               MODSIGN_PRIVFILE=$(ls /var/lib/shim-signed/mok/MOK.priv
> 2>/dev/null || echo "$MODSIGN_PRIVFILE")
> -       fi
> -       if test "$MODSIGN_CERTFILE" = "yes" -o -z "$MODSIGN_CERTFILE"; then
> -               MODSIGN_CERTFILE=$(ls /var/lib/shim-signed/mok/MOK.der
> 2>/dev/null || echo "$MODSIGN_CERTFILE")
> -       fi
> +       HASPRIVFILE=$(test "$MODSIGN_PRIVFILE" = "yes" -o -z
> "$MODSIGN_PRIVFILE" && echo 0 || echo 1)
> +       HASCERTFILE=$(test "$MODSIGN_CERTFILE" = "yes" -o -z
> "$MODSIGN_CERTFILE" && echo 0 || echo 1)
> +       if test "$HASPRIVFILE" -ne "$HASCERTFILE"; then
> +               AC_MSG_ERROR([Options '--with-signing-key' and
> '--with-signing-cert' must either both be set or both be unset.])
> +       elif test "$HASPRIVFILE" -eq 1; then
> +               # Try to get absolute path, if possible
> +
>  MODSIGN_PRIVFILE=$(WACOM_LINUX_FILE_IF_EXISTS([$MODSIGN_PRIVFILE]) || echo
> "$MODSIGN_PRIVFILE")
> +
>  MODSIGN_CERTFILE=$(WACOM_LINUX_FILE_IF_EXISTS([$MODSIGN_CERTFILE]) || echo
> "$MODSIGN_PRIVFILE")
> +       else
> +               WACOM_LINUX_CHECK_KEYCERT([kernel autogenerated],
> $WCM_KERNEL_DIR/$(WACOM_LINUX_READ_CONFIG([CONFIG_MODULE_SIG_KEY])),
> [$WCM_KERNEL_DIR/certs/signing_key.x509])
> +               WACOM_LINUX_CHECK_KEYCERT([shim MOK],
> [/var/lib/shim-signed/mok/MOK.priv], [/var/lib/shim-signed/mok/MOK.der])
> +               WACOM_LINUX_CHECK_KEYCERT([rEFInd MOK],
> [/etc/refind.d/keys/refind_local.key],
> [/etc/refind.d/keys/refind_local.cer])
> +       fi
>
>         AC_MSG_CHECKING(for module signing key)
>         AC_MSG_RESULT([$MODSIGN_PRIVFILE])
> --
> 2.21.0
>
>
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to