openssl-threads.7ossl 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "OPENSSL-THREADS 7ossl"
  136. .TH OPENSSL-THREADS 7ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. openssl\-threads \- Overview of thread safety in OpenSSL
  143. .SH "DESCRIPTION"
  144. .IX Header "DESCRIPTION"
  145. In this man page, we use the term \fBthread-safe\fR to indicate that an
  146. object or function can be used by multiple threads at the same time.
  147. .PP
  148. OpenSSL can be built with or without threads support. The most important
  149. use of this support is so that OpenSSL itself can use a single consistent
  150. \&\s-1API,\s0 as shown in \*(L"\s-1EXAMPLES\*(R"\s0 in \fBCRYPTO_THREAD_run_once\fR\|(3).
  151. Multi-platform applications can also use this \s-1API.\s0
  152. .PP
  153. In particular, being configured for threads support does not imply that
  154. all OpenSSL objects are thread-safe.
  155. To emphasize: \fImost objects are not safe for simultaneous use\fR.
  156. Exceptions to this should be documented on the specific manual pages, and
  157. some general high-level guidance is given here.
  158. .PP
  159. One major use of the OpenSSL thread \s-1API\s0 is to implement reference counting.
  160. Many objects within OpenSSL are reference-counted, so resources are not
  161. released, until the last reference is removed.
  162. References are often increased automatically (such as when an \fBX509\fR
  163. certificate object is added into an \fBX509_STORE\fR trust store).
  164. There is often an \fB\f(BIobject\fB_up_ref\fR() function that can be used to increase
  165. the reference count.
  166. Failure to match \fB\f(BIobject\fB_up_ref\fR() calls with the right number of
  167. \&\fB\f(BIobject\fB_free\fR() calls is a common source of memory leaks when a program
  168. exits.
  169. .PP
  170. Many objects have set and get \s-1API\s0's to set attributes in the object.
  171. A \f(CW\*(C`set0\*(C'\fR passes ownership from the caller to the object and a
  172. \&\f(CW\*(C`get0\*(C'\fR returns a pointer but the attribute ownership
  173. remains with the object and a reference to it is returned.
  174. A \f(CW\*(C`set1\*(C'\fR or \f(CW\*(C`get1\*(C'\fR function does not change the ownership, but instead
  175. updates the attribute's reference count so that the object is shared
  176. between the caller and the object; the caller must free the returned
  177. attribute when finished.
  178. Functions that involve attributes that have reference counts themselves,
  179. but are named with just \f(CW\*(C`set\*(C'\fR or \f(CW\*(C`get\*(C'\fR are historical; and the documentation
  180. must state how the references are handled.
  181. Get methods are often thread-safe as long as the ownership requirements are
  182. met and shared objects are not modified.
  183. Set methods, or modifying shared objects, are generally not thread-safe
  184. as discussed below.
  185. .PP
  186. Objects are thread-safe
  187. as long as the \s-1API\s0's being invoked don't modify the object; in this
  188. case the parameter is usually marked in the \s-1API\s0 as \f(CW\*(C`const\*(C'\fR.
  189. Not all parameters are marked this way.
  190. Note that a \f(CW\*(C`const\*(C'\fR declaration does not mean immutable; for example
  191. \&\fBX509_cmp\fR\|(3) takes pointers to \f(CW\*(C`const\*(C'\fR objects, but the implementation
  192. uses a C cast to remove that so it can lock objects, generate and cache
  193. a \s-1DER\s0 encoding, and so on.
  194. .PP
  195. Another instance of thread-safety is when updates to an object's
  196. internal state, such as cached values, are done with locks.
  197. One example of this is the reference counting \s-1API\s0's described above.
  198. .PP
  199. In all cases, however, it is generally not safe for one thread to
  200. mutate an object, such as setting elements of a private or public key,
  201. while another thread is using that object, such as verifying a signature.
  202. .PP
  203. The same \s-1API\s0's can usually be used simultaneously on different objects
  204. without interference.
  205. For example, two threads can calculate a signature using two different
  206. \&\fB\s-1EVP_PKEY_CTX\s0\fR objects.
  207. .PP
  208. For implicit global state or singletons, thread-safety depends on the facility.
  209. The \fBCRYPTO_secure_malloc\fR\|(3) and related \s-1API\s0's have their own lock,
  210. while \fBCRYPTO_malloc\fR\|(3) assumes the underlying platform allocation
  211. will do any necessary locking.
  212. Some \s-1API\s0's, such as \fBNCONF_load\fR\|(3) and related do no locking at all;
  213. this can be considered a bug.
  214. .PP
  215. A separate, although related, issue is modifying \*(L"factory\*(R" objects
  216. when other objects have been created from that.
  217. For example, an \fB\s-1SSL_CTX\s0\fR object created by \fBSSL_CTX_new\fR\|(3) is used
  218. to create per-connection \fB\s-1SSL\s0\fR objects by calling \fBSSL_new\fR\|(3).
  219. In this specific case, and probably for factory methods in general, it is
  220. not safe to modify the factory object after it has been used to create
  221. other objects.
  222. .SH "SEE ALSO"
  223. .IX Header "SEE ALSO"
  224. \&\fBCRYPTO_THREAD_run_once\fR\|(3),
  225. local system threads documentation.
  226. .SH "BUGS"
  227. .IX Header "BUGS"
  228. This page is admittedly very incomplete.
  229. .SH "COPYRIGHT"
  230. .IX Header "COPYRIGHT"
  231. Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
  232. .PP
  233. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  234. this file except in compliance with the License. You can obtain a copy
  235. in the file \s-1LICENSE\s0 in the source distribution or at
  236. <https://www.openssl.org/source/license.html>.