Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-10332

Server 10.2: Add support for OpenSSL 1.1

Details

    Description

      Currently the 10.2 server doesn't build with OpenSSL 1.1.0(-pre5) which is expected to be GA soon.

      Affected parts:

      • mysys_ssl
      • viossl

      Attachments

        Issue Links

          Activity

            danblack Daniel Black added a comment -

            openssl (master %)]$ ./config  --prefix=/usr/local/openssl11
            openssl (master %)]$ make -j32
            openssl (master %)]$ sudo make  install
             
             
            build-mariadb-server-10.2]$ cmake ../mariadb-server -DOPENSSL_ROOT_DIR=/usr/local/openssl11
             
            /home/dan/repos/mariadb-server/vio/vio.c: In function ‘vio_end’:
            /home/dan/repos/mariadb-server/vio/vio.c:392:3: warning: ‘ERR_remove_thread_state’ is deprecated [-Wdeprecated-declarations]
               ERR_remove_state(0);
               ^~~~~~~~~~~~~~~~
            In file included from /usr/local/openssl11/include/openssl/ct.h:13:0,
                             from /usr/local/openssl11/include/openssl/ssl.h:61,
                             from /home/dan/repos/mariadb-server/include/violite.h:146,
                             from /home/dan/repos/mariadb-server/vio/vio_priv.h:27,
                             from /home/dan/repos/mariadb-server/vio/vio.c:24:
            /usr/local/openssl11/include/openssl/err.h:246:25: note: declared here
             DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
                                     ^
            /usr/local/openssl11/include/openssl/opensslconf.h:111:35: note: in definition of macro ‘DECLARE_DEPRECATED’
             # define DECLARE_DEPRECATED(f)    f __attribute__ ((deprecated));
                                               ^
            /usr/local/openssl11/include/openssl/err.h:246:1: note: in expansion of macro ‘DEPRECATEDIN_1_1_0’
             DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
             ^~~~~~~~~~~~~~~~~~
             
             
            /home/dan/repos/mariadb-server/vio/viosslfactories.c: In function ‘get_dh2048’:
            /home/dan/repos/mariadb-server/vio/viosslfactories.c:62:5: error: dereferencing pointer to incomplete type ‘DH {aka struct dh_st}’
               dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL);
                 ^~
             
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void md5_result(MD5_CONTEXT*, uchar*)’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:86:29: error: ‘EVP_MD_CTX_cleanup’ was not declared in this scope
               EVP_MD_CTX_cleanup(context);
                                         ^
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5(uchar*, const char*, size_t)’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:102:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined
               MD5_CONTEXT md5_context;
                           ^~~~~~~~~~~
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5_multi(uchar*, ...)’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:127:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined
               MD5_CONTEXT md5_context;
                           ^~~~~~~~~~~
             
             
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘size_t my_md5_context_size()’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:140:28: error: invalid application of ‘sizeof’ to incomplete type ‘MD5_CONTEXT {aka evp_md_ctx_st}’
               return sizeof(MD5_CONTEXT);
                                        ^
             
             
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:39:18: error: field ‘ctx’ has incomplete type ‘EVP_CIPHER_CTX {aka evp_cipher_ctx_st}’
               EVP_CIPHER_CTX ctx;
                              ^~~
            In file included from /usr/local/openssl11/include/openssl/evp.h:14:0,
                             from /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:26:
            /usr/local/openssl11/include/openssl/ossl_typ.h:90:16: note: forward declaration of ‘EVP_CIPHER_CTX {aka struct evp_cipher_ctx_st}’
             typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX;
                            ^~~~~~~~~~~~~~~~~
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc: In destructor ‘virtual MyCTX::~MyCTX()’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:31:29: warning: ‘void ERR_remove_thread_state(void*)’ is deprecated [-Wdeprecated-declarations]
             #define ERR_remove_state(X) ERR_remove_thread_state(NULL)
                                         ^
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:41:52: note: in expansion of macro ‘ERR_remove_state’
               virtual ~MyCTX() { EVP_CIPHER_CTX_cleanup(&ctx); ERR_remove_state(0); }
                                                                ^~~~~~~~~~~~~~~~
            In file included from /usr/local/openssl11/include/openssl/aes.h:13:0,
                             from /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:27:
            /usr/local/openssl11/include/openssl/err.h:246:25: note: declared here
             DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
                                     ^
            /usr/local/openssl11/include/openssl/opensslconf.h:111:35: note: in definition of macro ‘DECLARE_DEPRECATED’
             # define DECLARE_DEPRECATED(f)    f __attribute__ ((deprecated));
                                               ^
            /usr/local/openssl11/include/openssl/err.h:246:1: note: in expansion of macro ‘DEPRECATEDIN_1_1_0’
             DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
             ^~~~~~~~~~~~~~~~~~
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:31:57: warning: ‘void ERR_remove_thread_state(void*)’ is deprecated [-Wdeprecated-declarations]
             #define ERR_remove_state(X) ERR_remove_thread_state(NULL)
                                                                     ^
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:41:52: note: in expansion of macro ‘ERR_remove_state’
               virtual ~MyCTX() { EVP_CIPHER_CTX_cleanup(&ctx); ERR_remove_state(0); }
                                                                ^~~~~~~~~~~~~~~~
            In file included from /usr/local/openssl11/include/openssl/aes.h:13:0,
                             from /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:27:
            /usr/local/openssl11/include/openssl/err.h:246:25: note: declared here
             DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
                                     ^
            /usr/local/openssl11/include/openssl/opensslconf.h:111:35: note: in definition of macro ‘DECLARE_DEPRECATED’
             # define DECLARE_DEPRECATED(f)    f __attribute__ ((deprecated));
                                               ^
            /usr/local/openssl11/include/openssl/err.h:246:1: note: in expansion of macro ‘DEPRECATEDIN_1_1_0’
             DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
             ^~~~~~~~~~~~~~~~~~
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc: In function ‘int my_random_bytes(uchar*, int)’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:291:35: error: ‘RAND_SSLeay’ was not declared in this scope
               RAND_METHOD *rand = RAND_SSLeay();
                                               ^
            mysys_ssl/CMakeFiles/mysys_ssl.dir/build.make:206: recipe for target 'mysys_ssl/CMakeFiles/mysys_ssl.dir/my_crypt.cc.o' failed
            make[2]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/my_crypt.cc.o] Error 1
            make[2]: *** Waiting for unfinished jobs....
            [ 24%] Building CXX object mysys_ssl/CMakeFiles/mysys_ssl.dir/my_md5.cc.o
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5(uchar*, const char*, size_t)’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:106:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined
               MD5_CONTEXT md5_context;
                           ^~~~~~~~~~~
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5_multi(uchar*, ...)’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:131:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined
               MD5_CONTEXT md5_context;
                           ^~~~~~~~~~~
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘size_t my_md5_context_size()’:
            /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:144:28: error: invalid application of ‘sizeof’ to incomplete type ‘MD5_CONTEXT {aka evp_md_ctx_st}’
               return sizeof(MD5_CONTEXT);
                                        ^
            mysys_ssl/CMakeFiles/mysys_ssl.dir/build.make:182: recipe for target 'mysys_ssl/CMakeFiles/mysys_ssl.dir/my_md5.cc.o' failed
            ...
            

            my_crypt.cc - appears to require that EVP_CIPHER_CTX ctx is a pointer and operated using: /usr/local/openssl11/include/openssl/evp.h

            EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
            int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
            void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c);
            int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
            int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
            int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
            int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
            

            danblack Daniel Black added a comment - openssl (master %)]$ ./config --prefix=/usr/local/openssl11 openssl (master %)]$ make -j32 openssl (master %)]$ sudo make install     build-mariadb-server-10.2]$ cmake ../mariadb-server -DOPENSSL_ROOT_DIR=/usr/local/openssl11   /home/dan/repos/mariadb-server/vio/vio.c: In function ‘vio_end’: /home/dan/repos/mariadb-server/vio/vio.c:392:3: warning: ‘ERR_remove_thread_state’ is deprecated [-Wdeprecated-declarations] ERR_remove_state(0); ^~~~~~~~~~~~~~~~ In file included from /usr/local/openssl11/include/openssl/ct.h:13:0, from /usr/local/openssl11/include/openssl/ssl.h:61, from /home/dan/repos/mariadb-server/include/violite.h:146, from /home/dan/repos/mariadb-server/vio/vio_priv.h:27, from /home/dan/repos/mariadb-server/vio/vio.c:24: /usr/local/openssl11/include/openssl/err.h:246:25: note: declared here DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) ^ /usr/local/openssl11/include/openssl/opensslconf.h:111:35: note: in definition of macro ‘DECLARE_DEPRECATED’ # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); ^ /usr/local/openssl11/include/openssl/err.h:246:1: note: in expansion of macro ‘DEPRECATEDIN_1_1_0’ DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) ^~~~~~~~~~~~~~~~~~     /home/dan/repos/mariadb-server/vio/viosslfactories.c: In function ‘get_dh2048’: /home/dan/repos/mariadb-server/vio/viosslfactories.c:62:5: error: dereferencing pointer to incomplete type ‘DH {aka struct dh_st}’ dh->p=BN_bin2bn(dh2048_p,sizeof(dh2048_p),NULL); ^~   /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void md5_result(MD5_CONTEXT*, uchar*)’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:86:29: error: ‘EVP_MD_CTX_cleanup’ was not declared in this scope EVP_MD_CTX_cleanup(context); ^ /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5(uchar*, const char*, size_t)’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:102:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined MD5_CONTEXT md5_context; ^~~~~~~~~~~ /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5_multi(uchar*, ...)’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:127:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined MD5_CONTEXT md5_context; ^~~~~~~~~~~     /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘size_t my_md5_context_size()’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:140:28: error: invalid application of ‘sizeof’ to incomplete type ‘MD5_CONTEXT {aka evp_md_ctx_st}’ return sizeof(MD5_CONTEXT); ^     /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:39:18: error: field ‘ctx’ has incomplete type ‘EVP_CIPHER_CTX {aka evp_cipher_ctx_st}’ EVP_CIPHER_CTX ctx; ^~~ In file included from /usr/local/openssl11/include/openssl/evp.h:14:0, from /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:26: /usr/local/openssl11/include/openssl/ossl_typ.h:90:16: note: forward declaration of ‘EVP_CIPHER_CTX {aka struct evp_cipher_ctx_st}’ typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; ^~~~~~~~~~~~~~~~~ /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc: In destructor ‘virtual MyCTX::~MyCTX()’: /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:31:29: warning: ‘void ERR_remove_thread_state(void*)’ is deprecated [-Wdeprecated-declarations] #define ERR_remove_state(X) ERR_remove_thread_state(NULL) ^ /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:41:52: note: in expansion of macro ‘ERR_remove_state’ virtual ~MyCTX() { EVP_CIPHER_CTX_cleanup(&ctx); ERR_remove_state(0); } ^~~~~~~~~~~~~~~~ In file included from /usr/local/openssl11/include/openssl/aes.h:13:0, from /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:27: /usr/local/openssl11/include/openssl/err.h:246:25: note: declared here DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) ^ /usr/local/openssl11/include/openssl/opensslconf.h:111:35: note: in definition of macro ‘DECLARE_DEPRECATED’ # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); ^ /usr/local/openssl11/include/openssl/err.h:246:1: note: in expansion of macro ‘DEPRECATEDIN_1_1_0’ DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) ^~~~~~~~~~~~~~~~~~ /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:31:57: warning: ‘void ERR_remove_thread_state(void*)’ is deprecated [-Wdeprecated-declarations] #define ERR_remove_state(X) ERR_remove_thread_state(NULL) ^ /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:41:52: note: in expansion of macro ‘ERR_remove_state’ virtual ~MyCTX() { EVP_CIPHER_CTX_cleanup(&ctx); ERR_remove_state(0); } ^~~~~~~~~~~~~~~~ In file included from /usr/local/openssl11/include/openssl/aes.h:13:0, from /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:27: /usr/local/openssl11/include/openssl/err.h:246:25: note: declared here DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) ^ /usr/local/openssl11/include/openssl/opensslconf.h:111:35: note: in definition of macro ‘DECLARE_DEPRECATED’ # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); ^ /usr/local/openssl11/include/openssl/err.h:246:1: note: in expansion of macro ‘DEPRECATEDIN_1_1_0’ DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) ^~~~~~~~~~~~~~~~~~ /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc: In function ‘int my_random_bytes(uchar*, int)’: /home/dan/repos/mariadb-server/mysys_ssl/my_crypt.cc:291:35: error: ‘RAND_SSLeay’ was not declared in this scope RAND_METHOD *rand = RAND_SSLeay(); ^ mysys_ssl/CMakeFiles/mysys_ssl.dir/build.make:206: recipe for target 'mysys_ssl/CMakeFiles/mysys_ssl.dir/my_crypt.cc.o' failed make[2]: *** [mysys_ssl/CMakeFiles/mysys_ssl.dir/my_crypt.cc.o] Error 1 make[2]: *** Waiting for unfinished jobs.... [ 24%] Building CXX object mysys_ssl/CMakeFiles/mysys_ssl.dir/my_md5.cc.o /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5(uchar*, const char*, size_t)’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:106:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined MD5_CONTEXT md5_context; ^~~~~~~~~~~ /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘void my_md5_multi(uchar*, ...)’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:131:15: error: aggregate ‘MD5_CONTEXT md5_context’ has incomplete type and cannot be defined MD5_CONTEXT md5_context; ^~~~~~~~~~~ /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc: In function ‘size_t my_md5_context_size()’: /home/dan/repos/mariadb-server/mysys_ssl/my_md5.cc:144:28: error: invalid application of ‘sizeof’ to incomplete type ‘MD5_CONTEXT {aka evp_md_ctx_st}’ return sizeof(MD5_CONTEXT); ^ mysys_ssl/CMakeFiles/mysys_ssl.dir/build.make:182: recipe for target 'mysys_ssl/CMakeFiles/mysys_ssl.dir/my_md5.cc.o' failed ... my_crypt.cc - appears to require that EVP_CIPHER_CTX ctx is a pointer and operated using: /usr/local/openssl11/include/openssl/evp.h EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
            georg Georg Richter added a comment -

            Daniel,

            please use MDEV-10332 branch

            georg Georg Richter added a comment - Daniel, please use MDEV-10332 branch
            danblack Daniel Black added a comment -

            georg sorry. I did see that eventually, just forgot to remove comments.

            danblack Daniel Black added a comment - georg sorry. I did see that eventually, just forgot to remove comments.
            georg Georg Richter added a comment - - edited

            According to the OpenSSL docs, beginning of version 1.1.0 future versions will be api/abi compatible, which will alllow you to upgrade the OpenSSL library without any modifications in source code.

            Unfortunately this is not the case, since MariaDB still tries to allocate stack via memory instead of using the api functions for allocatiing context objects:

            Also:

            • On Windows it's not possible to build a debug version with OpenSSL 1.1
            • build with OpenSSL 1.1.1 fails due to different context sizes.
            georg Georg Richter added a comment - - edited According to the OpenSSL docs, beginning of version 1.1.0 future versions will be api/abi compatible, which will alllow you to upgrade the OpenSSL library without any modifications in source code. Unfortunately this is not the case, since MariaDB still tries to allocate stack via memory instead of using the api functions for allocatiing context objects: Also: On Windows it's not possible to build a debug version with OpenSSL 1.1 build with OpenSSL 1.1.1 fails due to different context sizes.

            I've created MDEV-15596 for this

            serg Sergei Golubchik added a comment - I've created MDEV-15596 for this

            People

              serg Sergei Golubchik
              georg Georg Richter
              Votes:
              7 Vote for this issue
              Watchers:
              13 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.