About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Yun Jiang

The APIs defined in the file crypto/objects/obj_dat.c share some static global variables defined in the file without locking, which makes the APIs in this file not multi-thread safe even if the locking callbacks are set. In addition, the APIs in this file are also used by the other OpenSSL APIs, which makes the following OpenSSL documentation statement invalid (https://www.openssl.org/docs/man1.0.2/crypto/threads.html)


"OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."


Is there any planning to fix this issue?




--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

OpenSSL - Dev mailing list

 

  • "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."

 

  • Is there any planning to fix this issue?

 

 

Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.


--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Peter Waltenberg
It's also not that much of a problem in practice..
If you are using those API's you are adding new crypto. methods. Doing that after threading has started is not going to give good results with or without locking.

Peter




From:        "Salz, Rich via openssl-dev" <[hidden email]>
To:        "[hidden email]" <[hidden email]>
Date:        24/01/2018 11:19
Subject:        Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c
Sent by:        "openssl-dev" <[hidden email]>



 
  • "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."
 
  • Is there any planning to fix this issue?
 
 
Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.--
openssl-dev mailing list
To unsubscribe:
https://urldefense.proofpoint.com/v2/url?u=https-3A__mta.openssl.org_mailman_listinfo_openssl-2Ddev&d=DwICAg&c=jf_iaSHvJObTbx-siA1ZOg&r=K53ZTnW2gq2IjM1tbpz7kYoHgvTfJ_aR8s4bK_o2xzY&m=xEO93f-eFk98ZtSS2VW5oQoqCSoxBFAun8n0dZayTrs&s=9NZPKi5lqIGH6Jq4RqlHOiKqzuqUqZQMEQvpBr3aKsw&e=




--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Yun Jiang
In reply to this post by OpenSSL - Dev mailing list

Thanks! Is this issue fixed in 1.1.0?

 

Yun

 

From: openssl-dev [mailto:[hidden email]] On Behalf Of Salz, Rich via openssl-dev
Sent: 24 January 2018 01:19
To: [hidden email]
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

Ø  OpenSSL APIs, which makes the following OpenSSL documentation statement invalid (https://www.openssl.org/docs/man1.0.2/crypto/threads.html)

 

Ø  "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."

 

Ø  Is there any planning to fix this issue?

 

 

Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.


--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Yun Jiang
In reply to this post by Peter Waltenberg

Thanks!

 

The problem is that I need to get a customized certificate extension based on an OID. Until now, I cannot find a solution without dynamically calling OBJ_create(OID, NULL. NULL).

 

 

Yun

 

 

 

From: openssl-dev [mailto:[hidden email]] On Behalf Of Peter Waltenberg
Sent: 24 January 2018 01:23
To: Salz, Rich <[hidden email]>; [hidden email]
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

It's also not that much of a problem in practice..
If you are using those API's you are adding new crypto. methods. Doing that after threading has started is not going to give good results with or without locking.

Peter




From:        "Salz, Rich via openssl-dev" <[hidden email]>
To:        "[hidden email]" <[hidden email]>
Date:        24/01/2018 11:19
Subject:        Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c
Sent by:        "openssl-dev" <[hidden email]>


 

 

  • "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."

 

  • Is there any planning to fix this issue?

 
 
Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.--
openssl-dev mailing list
To unsubscribe:
https://urldefense.proofpoint.com/v2/url?u=https-3A__mta.openssl.org_mailman_listinfo_openssl-2Ddev&d=DwICAg&c=jf_iaSHvJObTbx-siA1ZOg&r=K53ZTnW2gq2IjM1tbpz7kYoHgvTfJ_aR8s4bK_o2xzY&m=xEO93f-eFk98ZtSS2VW5oQoqCSoxBFAun8n0dZayTrs&s=9NZPKi5lqIGH6Jq4RqlHOiKqzuqUqZQMEQvpBr3aKsw&e=



--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

OpenSSL - Dev mailing list
In reply to this post by OpenSSL - Dev mailing list
On 01/23/2018 07:19 PM, Salz, Rich via openssl-dev wrote:

 

  • "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."

 

  • Is there any planning to fix this issue?

 

 

Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.



Who said they were 1.0.2-specific?  Master's obj_dat.c still has a completely unlocked OBJ_new_nid() that is a public API function; AFAICT the issue is still present.

-Ben

--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

OpenSSL - Dev mailing list
In reply to this post by Yun Jiang

Create the OID at your program startup and store the NID in a global variable.

 

From: Yun Jiang <[hidden email]>
Reply-To: openssl-dev <[hidden email]>
Date: Wednesday, January 24, 2018 at 7:38 AM
To: openssl-dev <[hidden email]>
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

Thanks!

 

The problem is that I need to get a customized certificate extension based on an OID. Until now, I cannot find a solution without dynamically calling OBJ_create(OID, NULL. NULL).

 

 

Yun

 

 

 

From: openssl-dev [mailto:[hidden email]] On Behalf Of Peter Waltenberg
Sent: 24 January 2018 01:23
To: Salz, Rich <[hidden email]>; [hidden email]
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

It's also not that much of a problem in practice..
If you are using those API's you are adding new crypto. methods. Doing that after threading has started is not going to give good results with or without locking.

Peter




From:        "Salz, Rich via openssl-dev" <[hidden email]>
To:        "[hidden email]" <[hidden email]>
Date:        24/01/2018 11:19
Subject:        Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c
Sent by:        "openssl-dev" <[hidden email]>


 

 

  • "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."

 

  • Is there any planning to fix this issue?

 
 
Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.--
openssl-dev mailing list
To unsubscribe:
https://urldefense.proofpoint.com/v2/url?u=https-3A__mta.openssl.org_mailman_listinfo_openssl-2Ddev&d=DwICAg&c=jf_iaSHvJObTbx-siA1ZOg&r=K53ZTnW2gq2IjM1tbpz7kYoHgvTfJ_aR8s4bK_o2xzY&m=xEO93f-eFk98ZtSS2VW5oQoqCSoxBFAun8n0dZayTrs&s=9NZPKi5lqIGH6Jq4RqlHOiKqzuqUqZQMEQvpBr3aKsw&e=




--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Yun Jiang

Thanks!

 

But we are providing SDK to our customers to retrieve extension from the certificates downloaded from Internet. We have no idea what OID will be used by the SDK users. Only SDK users will know what OID will be expected in a certificate.

 

OpenSSL should provide API to retrieve extension by OID.

 

Yun

 

From: openssl-dev [mailto:[hidden email]] On Behalf Of Salz, Rich via openssl-dev
Sent: 24 January 2018 14:40
To: [hidden email]
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

Create the OID at your program startup and store the NID in a global variable.

 

From: Yun Jiang <[hidden email]>
Reply-To: openssl-dev <[hidden email]>
Date: Wednesday, January 24, 2018 at 7:38 AM
To: openssl-dev <[hidden email]>
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

Thanks!

 

The problem is that I need to get a customized certificate extension based on an OID. Until now, I cannot find a solution without dynamically calling OBJ_create(OID, NULL. NULL).

 

 

Yun

 

 

 

From: openssl-dev [[hidden email]] On Behalf Of Peter Waltenberg
Sent: 24 January 2018 01:23
To: Salz, Rich <[hidden email]>; [hidden email]
Subject: Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

 

It's also not that much of a problem in practice..
If you are using those API's you are adding new crypto. methods. Doing that after threading has started is not going to give good results with or without locking.

Peter




From:        "Salz, Rich via openssl-dev" <[hidden email]>
To:        "[hidden email]" <[hidden email]>
Date:        24/01/2018 11:19
Subject:        Re: [openssl-dev] About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c
Sent by:        "openssl-dev" <[hidden email]>


 

 

  • "OpenSSL can safely be used in multi-threaded applications provided that at least two callback functions are set, locking_function and threadid_func."

 

  • Is there any planning to fix this issue?

 
 
Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.--
openssl-dev mailing list
To unsubscribe:
https://urldefense.proofpoint.com/v2/url?u=https-3A__mta.openssl.org_mailman_listinfo_openssl-2Ddev&d=DwICAg&c=jf_iaSHvJObTbx-siA1ZOg&r=K53ZTnW2gq2IjM1tbpz7kYoHgvTfJ_aR8s4bK_o2xzY&m=xEO93f-eFk98ZtSS2VW5oQoqCSoxBFAun8n0dZayTrs&s=9NZPKi5lqIGH6Jq4RqlHOiKqzuqUqZQMEQvpBr3aKsw&e=



--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

OpenSSL - Dev mailing list
  • OpenSSL should provide API to retrieve extension by OID.

 

Yes!  Can you open a github issue for that?


--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

OpenSSL - Dev mailing list
In reply to this post by Yun Jiang
  • Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.

 

https://github.com/openssl/openssl/pull/5164

 


--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

Wim Lewis-3
In reply to this post by OpenSSL - Dev mailing list
On 24. jan. 2018, at 6:11 f.h., Benjamin Kaduk via openssl-dev <[hidden email]> wrote:
On 01/23/2018 07:19 PM, Salz, Rich via openssl-dev wrote:
Well, the most likely fix is to make the “safely” wording be more vague, which I doubt you’ll like.  But I doubt anyone on the team has much interest in fixing 1.0.2 locking issues.

Who said they were 1.0.2-specific?  Master's obj_dat.c still has a completely unlocked OBJ_new_nid() that is a public API function; AFAICT the issue is still present.

As you say, this really doesn't seem to be a 1.0.x-specific problem. The current development tip on github has the same issue (and the same language in doc/man3/CRYPTO_THREAD_run_once.pod).

The current patch ( PR 5164 ) just changes "can be safely used" to "can generally be used safely". Without enough information for a user of the library to know whether a given usage is safe, this isn't useful documentation. When it comes to threading, "generally safe" is the same as "unsafe". There needs to be at least a little bit of guidance.

A quick check of my system's openssl 1.1 libraries shows 280 mutable global variables in libcrypto and 36 in libssl. Most of those are presumably protected by locks or are only set during init; for the remaining actual thread-unsafe variables, it should be possible to document the small number of APIs which affect them.



--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev
Reply | Threaded
Open this post in threaded view
|

Re: About multi-thread unsafe for APIs defined in crypto/objects/obj_dat.c

OpenSSL - Dev mailing list
  • The current patch ( PR 5164 ) just changes "can be safely used" to "can generally be used safely". Without enough information for a user of the library to know whether a given usage is safe, this isn't useful documentation. When it comes to threading, "generally safe" is the same as "unsafe". There needs to be at least a little bit of guidance.

Pedantically and strictly speaking, you might be correct.  Pragmatically, however, many people have been able to write or deploy multi-threaded servers.

 

I doubt that anyone on the project will do anything approaching a definitive thread-safety analysis, let alone documentation.  Even with the “small number of API’s” that might be affected.

 

 


--
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev