mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Bagas Sanjaya <bagasdotme@gmail.com>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Kernel Build System <linux-kbuild@vger.kernel.org>,
	Linux Kernel Keyrings <keyrings@vger.kernel.org>
Cc: David Howells <dhowells@redhat.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Dennis Clarke <dclarke@blastwave.org>
Subject: Fwd: sign-file.c:149:17: warning: implicit declaration of function ‘ENGINE_load_builtin_engines’
Date: Fri, 17 Nov 2023 06:41:25 +0700	[thread overview]
Message-ID: <1fca50c4-6d7b-4c9b-bcea-4df17e2c2e7e@gmail.com> (raw)

Hi,

I notice a bug report on Bugzilla [1]. Quoting from it:

> This feels like the linker is confused about where to find libssl.so.3
> and/or libcrypto.so.3 for scripts/sign-file.c : 
> 
>   HOSTCC  scripts/sign-file
> scripts/sign-file.c: In function ‘read_private_key’:
> scripts/sign-file.c:149:17: warning: implicit declaration of function ‘ENGINE_load_builtin_engines’ [-Wimplicit-function-declaration]
>   149 |                 ENGINE_load_builtin_engines();
>       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:151:21: warning: implicit declaration of function ‘ENGINE_by_id’ [-Wimplicit-function-declaration]
>   151 |                 e = ENGINE_by_id("pkcs11");
>       |                     ^~~~~~~~~~~~
> scripts/sign-file.c:151:19: warning: assignment to ‘ENGINE *’ {aka ‘struct engine_st *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
>   151 |                 e = ENGINE_by_id("pkcs11");
>       |                   ^
> scripts/sign-file.c:153:21: warning: implicit declaration of function ‘ENGINE_init’ [-Wimplicit-function-declaration]
>   153 |                 if (ENGINE_init(e))
>       |                     ^~~~~~~~~~~
> scripts/sign-file.c:158:30: warning: implicit declaration of function ‘ENGINE_ctrl_cmd_string’ [-Wimplicit-function-declaration]
>   158 |                         ERR(!ENGINE_ctrl_cmd_string(e, "PIN", key_pass, 0),
>       |                              ^~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:114:32: note: in definition of macro ‘ERR’
>   114 |                 bool __cond = (cond);                   \
>       |                                ^~~~
> scripts/sign-file.c:160:31: warning: implicit declaration of function ‘ENGINE_load_private_key’ [-Wimplicit-function-declaration]
>   160 |                 private_key = ENGINE_load_private_key(e, private_key_name,
>       |                               ^~~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:160:29: warning: assignment to ‘EVP_PKEY *’ {aka ‘struct evp_pkey_st *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
>   160 |                 private_key = ENGINE_load_private_key(e, private_key_name,
>       |                             ^
> /usr/local/bin/ld: /var/tmp/root/ccqqhtVK.o: in function `main':
> sign-file.c:(.text.startup+0x346): undefined reference to `ENGINE_load_builtin_engines'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x357): undefined reference to `ENGINE_by_id'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x37e): undefined reference to `ENGINE_init'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x3a8): undefined reference to `ENGINE_ctrl_cmd_string'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x3d3): undefined reference to `ENGINE_load_private_key'
> collect2: error: ld returned 1 exit status
> make[1]: *** [scripts/Makefile.host:111: scripts/sign-file] Error 1
> make: *** [Makefile:1273: scripts] Error 2
> 
> 
> If I try to just deal with the sign-file.c by itself I see that I can compile
> and link fine with OpenSSL 3.1.4 : 
> 
> e# 
> e# which openssl 
> /usr/local/bin/openssl
> e# 
> e# ldd /usr/local/bin/openssl
>         linux-vdso.so.1 (0x00007ffcfb3f7000)
>         libssl.so.3 => /usr/local/lib/libssl.so.3 (0x00007f6f3b2fb000)
>         libcrypto.so.3 => /usr/local/lib/libcrypto.so.3 (0x00007f6f3ac00000)
>         libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6f3b2d3000)
>         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6f3aa1f000)
>         /lib64/ld-linux-x86-64.so.2 (0x00007f6f3b3e5000)
> e# 
> e# openssl version 
> OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023)
> e# 
> 
> I can compile the source fine ( with strange warnings ) with the
>  latest OpenSSL bits : 
> 
> 
> e# /usr/local/gcc13/bin/gcc -c -g -O0 -m64 -I/usr/local/include  -I/usr/local/include/openssl -o scripts/sign-file.o scripts/sign-file.c  
> scripts/sign-file.c: In function ‘read_private_key’:
> scripts/sign-file.c:149:17: warning: implicit declaration of function ‘ENGINE_load_builtin_engines’ [-Wimplicit-function-declaration]
>   149 |                 ENGINE_load_builtin_engines();
>       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:151:21: warning: implicit declaration of function ‘ENGINE_by_id’ [-Wimplicit-function-declaration]
>   151 |                 e = ENGINE_by_id("pkcs11");
>       |                     ^~~~~~~~~~~~
> scripts/sign-file.c:151:19: warning: assignment to ‘ENGINE *’ {aka ‘struct engine_st *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
>   151 |                 e = ENGINE_by_id("pkcs11");
>       |                   ^
> scripts/sign-file.c:117:25: warning: implicit declaration of function ‘errx’ [-Wimplicit-function-declaration]
>   117 |                         errx(1, fmt, ## __VA_ARGS__);   \
>       |                         ^~~~
> scripts/sign-file.c:152:17: note: in expansion of macro ‘ERR’
>   152 |                 ERR(!e, "Load PKCS#11 ENGINE");
>       |                 ^~~
> scripts/sign-file.c:153:21: warning: implicit declaration of function ‘ENGINE_init’ [-Wimplicit-function-declaration]
>   153 |                 if (ENGINE_init(e))
>       |                     ^~~~~~~~~~~
> scripts/sign-file.c:158:30: warning: implicit declaration of function ‘ENGINE_ctrl_cmd_string’ [-Wimplicit-function-declaration]
>   158 |                         ERR(!ENGINE_ctrl_cmd_string(e, "PIN", key_pass, 0),
>       |                              ^~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:114:32: note: in definition of macro ‘ERR’
>   114 |                 bool __cond = (cond);                   \
>       |                                ^~~~
> scripts/sign-file.c:160:31: warning: implicit declaration of function ‘ENGINE_load_private_key’ [-Wimplicit-function-declaration]
>   160 |                 private_key = ENGINE_load_private_key(e, private_key_name,
>       |                               ^~~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:160:29: warning: assignment to ‘EVP_PKEY *’ {aka ‘struct evp_pkey_st *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
>   160 |                 private_key = ENGINE_load_private_key(e, private_key_name,
>       |                             ^
> e# 
> 
> Then we link gently : 
> 
> e# /usr/local/gcc13/bin/gcc -g -O0 -m64 -L/usr/local/include  -L/usr/local/include/openssl -Wl,-rpath=/usr/local/lib,-enable-new-dtags -o scripts/sign-file scripts/sign-file.o -lssl -lcrypto
> e# 
> 
> e# ls -l scripts/sign-file
> -rwxr-xr-x 1 root root 37800 Nov 16 16:22 scripts/sign-file
> e# 
> e# readelf -delV scripts/sign-file  | grep -E 'NEED|NAME|PATH' 
>   [10] .gnu.version_r    VERNEED          0000000000400be8  00000be8
>  0x0000000000000001 (NEEDED)             Shared library: [libssl.so.3]
>  0x0000000000000001 (NEEDED)             Shared library: [libcrypto.so.3]
>  0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
>  0x000000000000001d (RUNPATH)            Library runpath: [/usr/local/lib]
>  0x000000006ffffffe (VERNEED)            0x400be8
>  0x000000006fffffff (VERNEEDNUM)         2
> e# 
> e# ldd scripts/sign-file
>         linux-vdso.so.1 (0x00007ffed8579000)
>         libssl.so.3 => /usr/local/lib/libssl.so.3 (0x00007fde99d2e000)
>         libcrypto.so.3 => /usr/local/lib/libcrypto.so.3 (0x00007fde99800000)
>         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fde9961f000)
>         libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fde99600000)
>         /lib64/ld-linux-x86-64.so.2 (0x00007fde99e18000)
> e# 
> e# scripts/sign-file -foo
> scripts/sign-file: invalid option -- 'f'
> Usage: scripts/sign-file [-dp] <hash algo> <key> <x509> <module> [<dest>]
>        scripts/sign-file -s <raw sig> <hash algo> <x509> <module> [<dest>]
> e# 
> 
>  * * *  T H E R E F O R E     I T    C O M P I L E S    F I N E    * * *
> 
> However my Linux kernel compile fails on that : 
> 
> e# /usr/bin/time -p /usr/bin/nice -n +18 make 2>&1 | tee ../linux-6.1.62.make_j1.log
>   HOSTCC  scripts/sign-file
> scripts/sign-file.c: In function ‘read_private_key’:
> scripts/sign-file.c:149:17: warning: implicit declaration of function ‘ENGINE_load_builtin_engines’ [-Wimplicit-function-declaration]
>   149 |                 ENGINE_load_builtin_engines();
>       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:151:21: warning: implicit declaration of function ‘ENGINE_by_id’ [-Wimplicit-function-declaration]
>   151 |                 e = ENGINE_by_id("pkcs11");
>       |                     ^~~~~~~~~~~~
> scripts/sign-file.c:151:19: warning: assignment to ‘ENGINE *’ {aka ‘struct engine_st *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
>   151 |                 e = ENGINE_by_id("pkcs11");
>       |                   ^
> scripts/sign-file.c:153:21: warning: implicit declaration of function ‘ENGINE_init’ [-Wimplicit-function-declaration]
>   153 |                 if (ENGINE_init(e))
>       |                     ^~~~~~~~~~~
> scripts/sign-file.c:158:30: warning: implicit declaration of function ‘ENGINE_ctrl_cmd_string’ [-Wimplicit-function-declaration]
>   158 |                         ERR(!ENGINE_ctrl_cmd_string(e, "PIN", key_pass, 0),
>       |                              ^~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:114:32: note: in definition of macro ‘ERR’
>   114 |                 bool __cond = (cond);                   \
>       |                                ^~~~
> scripts/sign-file.c:160:31: warning: implicit declaration of function ‘ENGINE_load_private_key’ [-Wimplicit-function-declaration]
>   160 |                 private_key = ENGINE_load_private_key(e, private_key_name,
>       |                               ^~~~~~~~~~~~~~~~~~~~~~~
> scripts/sign-file.c:160:29: warning: assignment to ‘EVP_PKEY *’ {aka ‘struct evp_pkey_st *’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
>   160 |                 private_key = ENGINE_load_private_key(e, private_key_name,
>       |                             ^
> /usr/local/bin/ld: /var/tmp/root/ccqqhtVK.o: in function `main':
> sign-file.c:(.text.startup+0x346): undefined reference to `ENGINE_load_builtin_engines'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x357): undefined reference to `ENGINE_by_id'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x37e): undefined reference to `ENGINE_init'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x3a8): undefined reference to `ENGINE_ctrl_cmd_string'
> /usr/local/bin/ld: sign-file.c:(.text.startup+0x3d3): undefined reference to `ENGINE_load_private_key'
> collect2: error: ld returned 1 exit status
> make[1]: *** [scripts/Makefile.host:111: scripts/sign-file] Error 1
> make: *** [Makefile:1273: scripts] Error 2
> real 0.92
> user 0.74
> sys 0.18
> e#
> 
> Looks like some confusion with the linker ? 
> 
> Setting LDFLAGS=-rpath=/usr/local/openssl/lib -enable-new-dtag seems to mean
> nothing.
> 
> Not related to https://bugzilla.kernel.org/show_bug.cgi?id=215750 but I *feel* that
> this code needs a hug.

See Bugzilla for the full thread.

AFAIK, this looks like a bug when the kernel is compiled against custom
(non-system) version of OpenSSL library.

Thanks.

[1]: https://bugzilla.kernel.org/show_bug.cgi?id=218154

-- 
An old man doll... just what I always wanted! - Clara

             reply	other threads:[~2023-11-16 23:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-16 23:41 Bagas Sanjaya [this message]
2023-11-17  5:34 ` Dennis Clarke
2023-11-22  4:55   ` Bagas Sanjaya
2023-11-23 14:37     ` Dennis Clarke
2023-11-23 14:53   ` James Bottomley
2023-11-23 23:42     ` Dennis Clarke
2023-11-24  1:05       ` James Bottomley
2023-11-30 20:30         ` Dennis Clarke
2023-11-24  2:28     ` Dennis Clarke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1fca50c4-6d7b-4c9b-bcea-4df17e2c2e7e@gmail.com \
    --to=bagasdotme@gmail.com \
    --cc=dclarke@blastwave.org \
    --cc=dhowells@redhat.com \
    --cc=dwmw2@infradead.org \
    --cc=keyrings@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®