package/libopenssl does not support riscv32
authorYann E. MORIN <yann.morin.1998@free.fr>
Wed, 3 Mar 2021 18:16:34 +0000 (19:16 +0100)
committerYann E. MORIN <yann.morin.1998@free.fr>
Thu, 4 Mar 2021 21:53:08 +0000 (22:53 +0100)
riscv32 is (surprise!) a 32-bit architecture. But it has been Y2038-safe
from its inception. As such, there are no legacy binaries that may use
the 32-bit time syscalls, and thus they are not available on riscv32.

Code that directly calls to the syscalls without using the C libraries
wrappers thus need to handle this case by themselves. That's what
upstream tried to do with:
    https://github.com/openssl/openssl/commit/5b5e2985f355c8e99c196d9ce5d02c15bebadfbc

We initially carried that patch with 2bb26c1a1d24 (package/libopenssl:
fix build on riscv32).

However, as Arnd Bergmann puts it [0]:

    The patch looks wrong to me: __NR_io_pgetevents_time64 must be used
    whenever time_t is 64-bit wide on a 32-bit architecture, while
    __NR_io_getevents/__NR_io_pgetevents must be used when time_t is the
    same width as 'long'.

    Checking whether __NR_io_getevents is defined is wrong for all
    architectures other than riscv

And Arnd agrees that patch should be reverted [1] [2] (there are further
comments in that stream, that are worth reading).

As such, we've reverted 2bb26c1a1d24 with 6cfb4ad7f76a.

This means we have no working solution to enable openssl on riscv32 for
now. So, rather than fail the build, or backport a dysfunctional patch,
let's just forbid openssl on riscv32.

Drop the default from the choice selection; it was anyway superfluous:
the default of a choice, if left unspecified, is the first entry of the
choice. Also, having a default means we'd have to also propagate the
dependencies of the defaulted-to symbol, which is yet a little bit more
maintenance. Since the chances we get a third implementation of openssl
are pretty slim (very, very slim), reasoning about what is the default
is still very easy.

When propagating dependencies to tpm2-tss' users, we've tried to keep
the architecture dependency toward the top when possible, and otherwise
we've added it together with existing arch dependencies (MMU).

While at it, drop a useless redundant comment in ibm-sw-tpm2: if we
select FORCE_LIBOPENSSL, it is obvious that's because libressl is not
supported... Besides none of the other users of FORCE_LIBOPENSSL have
such a comment.

Fixes:
    http://autobuild.buildroot.org/results/eb9/eb9a64d4ffae8569b5225083f282cf87ffa7c681/
    ...
    http://autobuild.buildroot.org/results/07e/07e413b24ba8adc9558c80267ce16dda339bf032/

[0] https://github.com/openssl/openssl/commit/5b5e2985f355c8e99c196d9ce5d02c15bebadfbc#commitcomment-44782859
[1] https://github.com/openssl/openssl/commit/5b5e2985f355c8e99c196d9ce5d02c15bebadfbc#commitcomment-47826509
[2] https://github.com/openssl/openssl/commit/5b5e2985f355c8e99c196d9ce5d02c15bebadfbc#commitcomment-47830530

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Matthew Weber <matthew.weber@rockwellcollins.com>
Cc: Mark Corbin <mark@dibsco.co.uk>
package/hostapd/Config.in
package/ibm-sw-tpm2/Config.in
package/ima-evm-utils/Config.in
package/openssl/Config.in
package/softether/Config.in
package/tpm2-abrmd/Config.in
package/tpm2-pkcs11/Config.in
package/tpm2-tools/Config.in
package/tpm2-totp/Config.in
package/tpm2-tss/Config.in
package/wpa_supplicant/Config.in

index 54d2086c0973500a0436e2361cc242390b0c356b..38cead90ca7733acd092fa5902b5caefe33c6710 100644 (file)
@@ -76,6 +76,7 @@ config BR2_PACKAGE_HOSTAPD_WPS
 
 config BR2_PACKAGE_HOSTAPD_WPA3
        bool "Enable WPA3 support"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_OPENSSL
        select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
        help
index b402ba7150c4c245c0891bf9a190d5cb81fb12be..57781a54bbfcc68154d892e064386ef8d3b8215b 100644 (file)
@@ -2,8 +2,8 @@ config BR2_PACKAGE_IBM_SW_TPM2
        bool "ibm-sw-tpm2"
        depends on BR2_TOOLCHAIN_HAS_THREADS
        depends on !BR2_STATIC_LIBS # ibm-sw-tpm2
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_OPENSSL
-       # libressl is not supported
        select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
        help
          This project is an implementation of the TCG TPM 2.0
@@ -14,4 +14,5 @@ config BR2_PACKAGE_IBM_SW_TPM2
          https://sourceforge.net/projects/ibmswtpm2/
 
 comment "ibm-sw-tpm2 needs a toolchain w/ threads, dynamic library"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS
index 6c29c9de28ed3c9a6f141af46af654d002ea14f3..59df58e5b3e66aee3f617e72a3be9f9e70262cc6 100644 (file)
@@ -1,6 +1,7 @@
 config BR2_PACKAGE_IMA_EVM_UTILS
        bool "ima-evm-utils"
        depends on BR2_USE_MMU # keyutils
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS # tpm2-tss
        depends on !BR2_STATIC_LIBS # keyutils, tpm2-tss
        select BR2_PACKAGE_OPENSSL
        select BR2_PACKAGE_KEYUTILS
@@ -13,4 +14,5 @@ config BR2_PACKAGE_IMA_EVM_UTILS
 
 comment "ima-evm-utils needs dynamic library support"
        depends on BR2_USE_MMU
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on BR2_STATIC_LIBS
index 5ce91cb80f69f0d93f4a2320044684a01e68acb7..dd470913004342e332b40a349911743418ccb64c 100644 (file)
@@ -1,5 +1,11 @@
+config BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
+       bool
+       default y
+       depends on !BR2_RISCV_32
+
 config BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
        bool
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
 
 config BR2_PACKAGE_OPENSSL
        bool "openssl support"
@@ -11,12 +17,12 @@ if BR2_PACKAGE_OPENSSL
 
 choice
        prompt "ssl library"
-       default BR2_PACKAGE_LIBOPENSSL
        help
          Select OpenSSL or LibreSSL.
 
 config BR2_PACKAGE_LIBOPENSSL
        bool "openssl"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_ZLIB
        help
          A collaborative effort to develop a robust, commercial-grade,
index bfb45b03155984d97f51c5617ced2af53a053506..01104b5d39aec11b1013f5d2fe6918ee795c136f 100644 (file)
@@ -3,6 +3,7 @@ config BR2_PACKAGE_SOFTETHER
        depends on BR2_TOOLCHAIN_HAS_THREADS
        depends on BR2_USE_MMU # fork()
        depends on BR2_USE_WCHAR
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
        select BR2_PACKAGE_OPENSSL
        select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
@@ -27,4 +28,5 @@ config BR2_PACKAGE_SOFTETHER
 
 comment "softether needs a toolchain w/ wchar, threads"
        depends on BR2_USE_MMU
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on !(BR2_USE_WCHAR && BR2_TOOLCHAIN_HAS_THREADS)
index 4931641af413b6841433adbe1d53aba29f75f283..0c60db80951f9c593785d0f86ea5e8080820309c 100644 (file)
@@ -3,6 +3,7 @@ config BR2_PACKAGE_TPM2_ABRMD
        depends on BR2_USE_WCHAR # libglib2
        depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2
        depends on BR2_USE_MMU # libglib2
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS # tpm2-tss
        depends on !BR2_STATIC_LIBS # tpm2-tss
        select BR2_PACKAGE_LIBGLIB2
        select BR2_PACKAGE_TPM2_TSS
@@ -22,5 +23,6 @@ config BR2_PACKAGE_TPM2_ABRMD
 
 comment "tpm2-abrmd needs a toolchain w/ dynamic library, wchar, threads"
        depends on BR2_USE_MMU
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || \
                BR2_STATIC_LIBS
index 5d457032238266fafa9cf5b9ac5887dc23e6a79f..ec82d72ae363759bc588583b43a998ae00c021ca 100644 (file)
@@ -1,5 +1,6 @@
 config BR2_PACKAGE_TPM2_PKCS11
        bool "tpm2-pkcs11"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS # tpm2-tss
        depends on !BR2_STATIC_LIBS # tpm2-tss
        depends on BR2_TOOLCHAIN_HAS_THREADS
        select BR2_PACKAGE_LIBYAML
@@ -12,4 +13,5 @@ config BR2_PACKAGE_TPM2_PKCS11
          https://github.com/tpm2-software/tpm2-pkcs11
 
 comment "tpm2-pkcs11 needs a toolchain w/ dynamic library, threads"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS
index 35ca63bf64d222c1f04923c532f365f8e2970777..642bd9e462d7aba828fd3a430c05ceafbf6f4e71 100644 (file)
@@ -1,5 +1,6 @@
 config BR2_PACKAGE_TPM2_TOOLS
        bool "tpm2-tools"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS # tpm2-tss
        depends on !BR2_STATIC_LIBS # tpm2-tss
        select BR2_PACKAGE_LIBCURL
        select BR2_PACKAGE_OPENSSL
@@ -19,4 +20,5 @@ config BR2_PACKAGE_TPM2_TOOLS
          https://github.com/tpm2-software/tpm2-tools
 
 comment "tpm2-tools needs a toolchain w/ dynamic library"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on BR2_STATIC_LIBS
index dcadf5a5f2840430c3eb3d41859f6cd8d7c0a4a0..7f274fa13043c36c935db4fb5f8e0144e29ee52d 100644 (file)
@@ -1,5 +1,6 @@
 config BR2_PACKAGE_TPM2_TOTP
        bool "tpm2-totp"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS # tpm2-tss
        depends on !BR2_STATIC_LIBS # tpm2-tss
        depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM # glibc < 2.20
        select BR2_PACKAGE_LIBQRENCODE
@@ -19,5 +20,6 @@ config BR2_PACKAGE_TPM2_TOTP
          https://github.com/tpm2-software/tpm2-totp
 
 comment "tpm2-totp needs a toolchain w/ dynamic library"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on BR2_STATIC_LIBS
        depends on !BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
index 2fc56dbd76662c857a736404edcd5fe0c9be6613..b1ab00dd38eea82e26415030ade0daf5325aeb55 100644 (file)
@@ -1,6 +1,7 @@
 config BR2_PACKAGE_TPM2_TSS
        bool "tpm2-tss"
        depends on !BR2_STATIC_LIBS # dlfcn.h
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_LIBURIPARSER
        select BR2_PACKAGE_OPENSSL
        select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
@@ -55,4 +56,5 @@ config BR2_PACKAGE_TPM2_TSS_FAPI
 endif
 
 comment "tpm2-tss needs a toolchain w/ dynamic library"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        depends on BR2_STATIC_LIBS
index cba7fa07e1f02e3c25e1d6a0876f0c95cfc7dcb4..c6e4de1d486d714aa25c99e0eb4602150439ba47 100644 (file)
@@ -49,6 +49,7 @@ config BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY
 config BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING
        bool "Enable mesh networking"
        depends on BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_OPENSSL
        select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
        help
@@ -83,6 +84,7 @@ config BR2_PACKAGE_WPA_SUPPLICANT_WPS
 
 config BR2_PACKAGE_WPA_SUPPLICANT_WPA3
        bool "Enable WPA3 support"
+       depends on BR2_PACKAGE_LIBOPENSSL_ARCH_SUPPORTS
        select BR2_PACKAGE_OPENSSL
        select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
        help