Re: WMM related compile bug on F17

Ben Greear <[email protected]>
Newsgroups gmane.linux.drivers.hostap
Organization Candela Technologies
Message-ID <[email protected]>
On 1/21/20 10:43 AM, Ben Greear wrote:
> On 1/21/20 10:22 AM, Jouni Malinen wrote:
>> On Tue, Jan 21, 2020 at 10:12:09AM -0800, Ben Greear wrote:
>>> While trying to get latest code to build on F17 and other older systems, I noticed
>>> that this code fails to compile:
>>>
>>> struct hostapd_wmm_ac_params wmmp[WMM_AC_NUM] = { 0 };
>>>
>>> It looks like WMM_AC_NUM is treated as 0, even though the enum defines it
>>> as 4.
>>>
>>> Anyone know if this is some particular compiler bug or an acceptable work-around?
>>
>> Which compilers and versions produced the error and what was the exact
>> error?
>>
> 
> First, I'm using latest upstream with my changes on top, with this work-in-progress patch
> to fix openssl compilation.  I'm compiling on fedora-17 32-bit currently, since that is the
> oldest thing I compile against.
> 
> 
> [greearb@v-f17-32 hostap]$ git diff
> diff --git a/src/ap/wmm.c b/src/ap/wmm.c
> index 881fd9f..d9721f8 100644
> --- a/src/ap/wmm.c
> +++ b/src/ap/wmm.c
> @@ -111,6 +111,9 @@ u8 * hostapd_eid_wmm(struct hostapd_data *hapd, u8 *eid)
>          u8 *pos = eid;
>          struct wmm_parameter_element *wmm =
>                  (struct wmm_parameter_element *) (pos + 2);
> +#if WMM_AC_VO == 0
> +#error bad
> +#endif
>          struct hostapd_wmm_ac_params wmmp[WMM_AC_NUM] = { 0 };
>          int e;

Maybe the #if warning above is not important.  This at least compiles:

	struct hostapd_wmm_ac_params wmmp[WMM_AC_NUM];
	int e;

	os_memset(wmmp, 0, sizeof(wmmp));


> 
> diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
> index 9d11c8a..3fb29e3 100644
> --- a/src/crypto/tls_openssl.c
> +++ b/src/crypto/tls_openssl.c
> @@ -2682,6 +2682,7 @@ static int tls_connection_ca_cert(struct tls_data *data,
>                                        (const unsigned char **) &ca_cert_blob,
>                                        ca_cert_blob_len);
>                  if (cert == NULL) {
> +#if OPENSSL_VERSION_NUMBER >= 0x10200000L
>                          BIO *bio = BIO_new_mem_buf(ca_cert_blob,
>                                                     ca_cert_blob_len);
> 
> @@ -2699,6 +2700,11 @@ static int tls_connection_ca_cert(struct tls_data *data,
>                          while (ERR_get_error()) {
>                                  /* Ignore errors from DER conversion. */
>                          }
> +#else
> +                       tls_show_errors(MSG_WARNING, __func__,
> +                                       "Failed to parse ca_cert_blob");
> +                       return -1;
> +#endif
>                  }
> 
>                  if (!X509_STORE_add_cert(SSL_CTX_get_cert_store(ssl_ctx),
> @@ -5253,6 +5259,7 @@ static void openssl_debug_dump_cipher_list(SSL_CTX *ssl_ctx)
> 
> 
>   #if !defined(LIBRESSL_VERSION_NUMBER) && !defined(BORINGSSL_API_VERSION)
> +#if OPENSSL_VERSION_NUMBER >= 0x10200000L
> 
>   static const char * openssl_pkey_type_str(const EVP_PKEY *pkey)
>   {
> @@ -5312,11 +5319,13 @@ static void openssl_debug_dump_certificates(SSL_CTX *ssl_ctx)
>   }
> 
>   #endif
> +#endif
> 
> 
>   static void openssl_debug_dump_certificate_chains(SSL_CTX *ssl_ctx)
>   {
>   #if !defined(LIBRESSL_VERSION_NUMBER) && !defined(BORINGSSL_API_VERSION)
> +#if OPENSSL_VERSION_NUMBER >= 0x10200000L
>          int res;
> 
>          for (res = SSL_CTX_set_current_cert(ssl_ctx, SSL_CERT_SET_FIRST);
> @@ -5326,6 +5335,7 @@ static void openssl_debug_dump_certificate_chains(SSL_CTX *ssl_ctx)
> 
>          SSL_CTX_set_current_cert(ssl_ctx, SSL_CERT_SET_FIRST);
>   #endif
> +#endif
>   }
> 
> 
> @@ -5660,6 +5670,10 @@ u16 tls_connection_get_cipher_suite(struct tls_connection *conn)
>   #if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
>          return SSL_CIPHER_get_protocol_id(cipher);
>   #else
> +#if OPENSSL_VERSION_NUMBER < 0x10100000L
> +       return cipher->id & 0XFFFF;
> +#else
>          return SSL_CIPHER_get_id(cipher) & 0xFFFF;
>   #endif
> +#endif
>   }
> 
> 
> Compile error:
> 
> ../src/ap/wmm.c: In function ‘hostapd_eid_wmm’:
> ../src/ap/wmm.c:115:2: error: #error bad
> ../src/ap/wmm.c:117:9: warning: missing braces around initializer [-Wmissing-braces]
> ../src/ap/wmm.c:117:9: warning: (near initialization for ‘wmmp[0]’) [-Wmissing-braces]
> make[1]: *** [../src/ap/wmm.o] Error 1
> make[1]: Leaving directory `/home/greearb/git/btbits/3plibs/hostap/hostapd'
> make: *** [hostap_only] Error 2
> 
> greearb@v-f17-32 hostap]$ gcc --version
> gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
> Copyright (C) 2012 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> 
> 
> Thanks,
> Ben
> 


_______________________________________________
Hostap mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/hostap
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.