diff options
author | jsing <> | 2014-04-15 13:42:55 +0000 |
---|---|---|
committer | jsing <> | 2014-04-15 13:42:55 +0000 |
commit | 69a8d2dcc19aed0d1116ba2ecd81cce5ae736c94 (patch) | |
tree | f085d85cb06e6b6e1a1b1d52cced54d9f7d7e5f2 /src | |
parent | c7fdfc89ee30180bf262c4b146c1b6e1030083d6 (diff) | |
download | openbsd-69a8d2dcc19aed0d1116ba2ecd81cce5ae736c94.tar.gz openbsd-69a8d2dcc19aed0d1116ba2ecd81cce5ae736c94.tar.bz2 openbsd-69a8d2dcc19aed0d1116ba2ecd81cce5ae736c94.zip |
First pass at applying KNF to the OpenSSL code, which almost makes it
readable. This pass is whitespace only and can readily be verified using
tr and md5.
Diffstat (limited to 'src')
50 files changed, 3668 insertions, 3578 deletions
diff --git a/src/lib/libcrypto/arm_arch.h b/src/lib/libcrypto/arm_arch.h index 5a83107680..0ccafb2215 100644 --- a/src/lib/libcrypto/arm_arch.h +++ b/src/lib/libcrypto/arm_arch.h | |||
@@ -43,7 +43,7 @@ | |||
43 | 43 | ||
44 | #if !__ASSEMBLER__ | 44 | #if !__ASSEMBLER__ |
45 | extern unsigned int OPENSSL_armcap_P; | 45 | extern unsigned int OPENSSL_armcap_P; |
46 | 46 | ||
47 | #define ARMV7_NEON (1<<0) | 47 | #define ARMV7_NEON (1<<0) |
48 | #define ARMV7_TICK (1<<1) | 48 | #define ARMV7_TICK (1<<1) |
49 | #endif | 49 | #endif |
diff --git a/src/lib/libcrypto/armcap.c b/src/lib/libcrypto/armcap.c index 9abaf396e5..0625587bdd 100644 --- a/src/lib/libcrypto/armcap.c +++ b/src/lib/libcrypto/armcap.c | |||
@@ -12,7 +12,8 @@ unsigned int OPENSSL_armcap_P; | |||
12 | static sigset_t all_masked; | 12 | static sigset_t all_masked; |
13 | 13 | ||
14 | static sigjmp_buf ill_jmp; | 14 | static sigjmp_buf ill_jmp; |
15 | static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | 15 | static void ill_handler (int sig) { siglongjmp(ill_jmp, sig); |
16 | } | ||
16 | 17 | ||
17 | /* | 18 | /* |
18 | * Following subroutines could have been inlined, but it's not all | 19 | * Following subroutines could have been inlined, but it's not all |
@@ -21,60 +22,61 @@ static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | |||
21 | void _armv7_neon_probe(void); | 22 | void _armv7_neon_probe(void); |
22 | unsigned int _armv7_tick(void); | 23 | unsigned int _armv7_tick(void); |
23 | 24 | ||
24 | unsigned int OPENSSL_rdtsc(void) | 25 | unsigned int |
25 | { | 26 | OPENSSL_rdtsc(void) |
27 | { | ||
26 | if (OPENSSL_armcap_P & ARMV7_TICK) | 28 | if (OPENSSL_armcap_P & ARMV7_TICK) |
27 | return _armv7_tick(); | 29 | return _armv7_tick(); |
28 | else | 30 | else |
29 | return 0; | 31 | return 0; |
30 | } | 32 | } |
31 | 33 | ||
32 | #if defined(__GNUC__) && __GNUC__>=2 | 34 | #if defined(__GNUC__) && __GNUC__>=2 |
33 | void OPENSSL_cpuid_setup(void) __attribute__((constructor)); | 35 | void OPENSSL_cpuid_setup(void) __attribute__((constructor)); |
34 | #endif | 36 | #endif |
35 | void OPENSSL_cpuid_setup(void) | 37 | |
36 | { | 38 | void |
39 | OPENSSL_cpuid_setup(void) | ||
40 | { | ||
37 | char *e; | 41 | char *e; |
38 | struct sigaction ill_oact,ill_act; | 42 | struct sigaction ill_oact, ill_act; |
39 | sigset_t oset; | 43 | sigset_t oset; |
40 | static int trigger=0; | 44 | static int trigger = 0; |
41 | 45 | ||
42 | if (trigger) return; | 46 | if (trigger) |
43 | trigger=1; | ||
44 | |||
45 | if ((e=getenv("OPENSSL_armcap"))) | ||
46 | { | ||
47 | OPENSSL_armcap_P=strtoul(e,NULL,0); | ||
48 | return; | 47 | return; |
49 | } | 48 | trigger = 1; |
49 | |||
50 | if ((e = getenv("OPENSSL_armcap"))) { | ||
51 | OPENSSL_armcap_P = strtoul(e, NULL, 0); | ||
52 | return; | ||
53 | } | ||
50 | 54 | ||
51 | sigfillset(&all_masked); | 55 | sigfillset(&all_masked); |
52 | sigdelset(&all_masked,SIGILL); | 56 | sigdelset(&all_masked, SIGILL); |
53 | sigdelset(&all_masked,SIGTRAP); | 57 | sigdelset(&all_masked, SIGTRAP); |
54 | sigdelset(&all_masked,SIGFPE); | 58 | sigdelset(&all_masked, SIGFPE); |
55 | sigdelset(&all_masked,SIGBUS); | 59 | sigdelset(&all_masked, SIGBUS); |
56 | sigdelset(&all_masked,SIGSEGV); | 60 | sigdelset(&all_masked, SIGSEGV); |
57 | 61 | ||
58 | OPENSSL_armcap_P = 0; | 62 | OPENSSL_armcap_P = 0; |
59 | 63 | ||
60 | memset(&ill_act,0,sizeof(ill_act)); | 64 | memset(&ill_act, 0, sizeof(ill_act)); |
61 | ill_act.sa_handler = ill_handler; | 65 | ill_act.sa_handler = ill_handler; |
62 | ill_act.sa_mask = all_masked; | 66 | ill_act.sa_mask = all_masked; |
63 | 67 | ||
64 | sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); | 68 | sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); |
65 | sigaction(SIGILL,&ill_act,&ill_oact); | 69 | sigaction(SIGILL, &ill_act, &ill_oact); |
66 | 70 | ||
67 | if (sigsetjmp(ill_jmp,1) == 0) | 71 | if (sigsetjmp(ill_jmp, 1) == 0) { |
68 | { | ||
69 | _armv7_neon_probe(); | 72 | _armv7_neon_probe(); |
70 | OPENSSL_armcap_P |= ARMV7_NEON; | 73 | OPENSSL_armcap_P |= ARMV7_NEON; |
71 | } | 74 | } |
72 | if (sigsetjmp(ill_jmp,1) == 0) | 75 | if (sigsetjmp(ill_jmp, 1) == 0) { |
73 | { | ||
74 | _armv7_tick(); | 76 | _armv7_tick(); |
75 | OPENSSL_armcap_P |= ARMV7_TICK; | 77 | OPENSSL_armcap_P |= ARMV7_TICK; |
76 | } | ||
77 | |||
78 | sigaction (SIGILL,&ill_oact,NULL); | ||
79 | sigprocmask(SIG_SETMASK,&oset,NULL); | ||
80 | } | 78 | } |
79 | |||
80 | sigaction (SIGILL, &ill_oact, NULL); | ||
81 | sigprocmask(SIG_SETMASK, &oset, NULL); | ||
82 | } | ||
diff --git a/src/lib/libcrypto/buildinf.h b/src/lib/libcrypto/buildinf.h index 957f09d5fd..8fdb24cb33 100644 --- a/src/lib/libcrypto/buildinf.h +++ b/src/lib/libcrypto/buildinf.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef MK1MF_BUILD | 1 | #ifndef MK1MF_BUILD |
2 | /* auto-generated by crypto/Makefile for crypto/cversion.c */ | 2 | /* auto-generated by crypto/Makefile for crypto/cversion.c */ |
3 | #define CFLAGS "cc -O" | 3 | #define CFLAGS "cc -O" |
4 | #define PLATFORM "dist" | 4 | #define PLATFORM "dist" |
5 | #define DATE "Sat Aug 21 10:52:09 EST 2010" | 5 | #define DATE "Sat Aug 21 10:52:09 EST 2010" |
6 | #endif | 6 | #endif |
diff --git a/src/lib/libcrypto/cpt_err.c b/src/lib/libcrypto/cpt_err.c index 289005f662..a8e94ccd16 100644 --- a/src/lib/libcrypto/cpt_err.c +++ b/src/lib/libcrypto/cpt_err.c | |||
@@ -68,38 +68,35 @@ | |||
68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_CRYPTO,func,0) | 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_CRYPTO,func,0) |
69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_CRYPTO,0,reason) | 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_CRYPTO,0,reason) |
70 | 70 | ||
71 | static ERR_STRING_DATA CRYPTO_str_functs[]= | 71 | static ERR_STRING_DATA CRYPTO_str_functs[]= { |
72 | { | 72 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX), "CRYPTO_get_ex_new_index"}, |
73 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX), "CRYPTO_get_ex_new_index"}, | 73 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID), "CRYPTO_get_new_dynlockid"}, |
74 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID), "CRYPTO_get_new_dynlockid"}, | 74 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_LOCKID), "CRYPTO_get_new_lockid"}, |
75 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_LOCKID), "CRYPTO_get_new_lockid"}, | 75 | {ERR_FUNC(CRYPTO_F_CRYPTO_SET_EX_DATA), "CRYPTO_set_ex_data"}, |
76 | {ERR_FUNC(CRYPTO_F_CRYPTO_SET_EX_DATA), "CRYPTO_set_ex_data"}, | 76 | {ERR_FUNC(CRYPTO_F_DEF_ADD_INDEX), "DEF_ADD_INDEX"}, |
77 | {ERR_FUNC(CRYPTO_F_DEF_ADD_INDEX), "DEF_ADD_INDEX"}, | 77 | {ERR_FUNC(CRYPTO_F_DEF_GET_CLASS), "DEF_GET_CLASS"}, |
78 | {ERR_FUNC(CRYPTO_F_DEF_GET_CLASS), "DEF_GET_CLASS"}, | 78 | {ERR_FUNC(CRYPTO_F_FIPS_MODE_SET), "FIPS_mode_set"}, |
79 | {ERR_FUNC(CRYPTO_F_FIPS_MODE_SET), "FIPS_mode_set"}, | 79 | {ERR_FUNC(CRYPTO_F_INT_DUP_EX_DATA), "INT_DUP_EX_DATA"}, |
80 | {ERR_FUNC(CRYPTO_F_INT_DUP_EX_DATA), "INT_DUP_EX_DATA"}, | 80 | {ERR_FUNC(CRYPTO_F_INT_FREE_EX_DATA), "INT_FREE_EX_DATA"}, |
81 | {ERR_FUNC(CRYPTO_F_INT_FREE_EX_DATA), "INT_FREE_EX_DATA"}, | 81 | {ERR_FUNC(CRYPTO_F_INT_NEW_EX_DATA), "INT_NEW_EX_DATA"}, |
82 | {ERR_FUNC(CRYPTO_F_INT_NEW_EX_DATA), "INT_NEW_EX_DATA"}, | 82 | {0, NULL} |
83 | {0,NULL} | 83 | }; |
84 | }; | ||
85 | 84 | ||
86 | static ERR_STRING_DATA CRYPTO_str_reasons[]= | 85 | static ERR_STRING_DATA CRYPTO_str_reasons[]= { |
87 | { | 86 | {ERR_REASON(CRYPTO_R_FIPS_MODE_NOT_SUPPORTED), "fips mode not supported"}, |
88 | {ERR_REASON(CRYPTO_R_FIPS_MODE_NOT_SUPPORTED),"fips mode not supported"}, | 87 | {ERR_REASON(CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK), "no dynlock create callback"}, |
89 | {ERR_REASON(CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK),"no dynlock create callback"}, | 88 | {0, NULL} |
90 | {0,NULL} | 89 | }; |
91 | }; | ||
92 | 90 | ||
93 | #endif | 91 | #endif |
94 | 92 | ||
95 | void ERR_load_CRYPTO_strings(void) | 93 | void |
96 | { | 94 | ERR_load_CRYPTO_strings(void) |
95 | { | ||
97 | #ifndef OPENSSL_NO_ERR | 96 | #ifndef OPENSSL_NO_ERR |
98 | 97 | if (ERR_func_error_string(CRYPTO_str_functs[0].error) == NULL) { | |
99 | if (ERR_func_error_string(CRYPTO_str_functs[0].error) == NULL) | 98 | ERR_load_strings(0, CRYPTO_str_functs); |
100 | { | 99 | ERR_load_strings(0, CRYPTO_str_reasons); |
101 | ERR_load_strings(0,CRYPTO_str_functs); | ||
102 | ERR_load_strings(0,CRYPTO_str_reasons); | ||
103 | } | ||
104 | #endif | ||
105 | } | 100 | } |
101 | #endif | ||
102 | } | ||
diff --git a/src/lib/libcrypto/cryptlib.c b/src/lib/libcrypto/cryptlib.c index 082b2e88ee..89667d175a 100644 --- a/src/lib/libcrypto/cryptlib.c +++ b/src/lib/libcrypto/cryptlib.c | |||
@@ -118,14 +118,13 @@ | |||
118 | #include <openssl/safestack.h> | 118 | #include <openssl/safestack.h> |
119 | 119 | ||
120 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) | 120 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) |
121 | static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */ | 121 | static double SSLeay_MSVC5_hack = 0.0; /* and for VC1.5 */ |
122 | #endif | 122 | #endif |
123 | 123 | ||
124 | DECLARE_STACK_OF(CRYPTO_dynlock) | 124 | DECLARE_STACK_OF(CRYPTO_dynlock) |
125 | 125 | ||
126 | /* real #defines in crypto.h, keep these upto date */ | 126 | /* real #defines in crypto.h, keep these upto date */ |
127 | static const char* const lock_names[CRYPTO_NUM_LOCKS] = | 127 | static const char* const lock_names[CRYPTO_NUM_LOCKS] = { |
128 | { | ||
129 | "<<ERROR>>", | 128 | "<<ERROR>>", |
130 | "err", | 129 | "err", |
131 | "ex_data", | 130 | "ex_data", |
@@ -170,35 +169,35 @@ static const char* const lock_names[CRYPTO_NUM_LOCKS] = | |||
170 | #if CRYPTO_NUM_LOCKS != 41 | 169 | #if CRYPTO_NUM_LOCKS != 41 |
171 | # error "Inconsistency between crypto.h and cryptlib.c" | 170 | # error "Inconsistency between crypto.h and cryptlib.c" |
172 | #endif | 171 | #endif |
173 | }; | 172 | }; |
174 | 173 | ||
175 | /* This is for applications to allocate new type names in the non-dynamic | 174 | /* This is for applications to allocate new type names in the non-dynamic |
176 | array of lock names. These are numbered with positive numbers. */ | 175 | array of lock names. These are numbered with positive numbers. */ |
177 | static STACK_OF(OPENSSL_STRING) *app_locks=NULL; | 176 | static STACK_OF(OPENSSL_STRING) *app_locks = NULL; |
178 | 177 | ||
179 | /* For applications that want a more dynamic way of handling threads, the | 178 | /* For applications that want a more dynamic way of handling threads, the |
180 | following stack is used. These are externally numbered with negative | 179 | following stack is used. These are externally numbered with negative |
181 | numbers. */ | 180 | numbers. */ |
182 | static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL; | 181 | static STACK_OF(CRYPTO_dynlock) *dyn_locks = NULL; |
183 | |||
184 | 182 | ||
185 | static void (*locking_callback)(int mode,int type, | 183 | static void (*locking_callback)(int mode, int type, |
186 | const char *file,int line)=0; | 184 | const char *file, int line) = 0; |
187 | static int (*add_lock_callback)(int *pointer,int amount, | 185 | static int (*add_lock_callback)(int *pointer, int amount, |
188 | int type,const char *file,int line)=0; | 186 | int type, const char *file, int line) = 0; |
189 | #ifndef OPENSSL_NO_DEPRECATED | 187 | #ifndef OPENSSL_NO_DEPRECATED |
190 | static unsigned long (*id_callback)(void)=0; | 188 | static unsigned long (*id_callback)(void) = 0; |
191 | #endif | 189 | #endif |
192 | static void (*threadid_callback)(CRYPTO_THREADID *)=0; | 190 | static void (*threadid_callback)(CRYPTO_THREADID *) = 0; |
193 | static struct CRYPTO_dynlock_value *(*dynlock_create_callback) | 191 | static struct CRYPTO_dynlock_value *(*dynlock_create_callback)( |
194 | (const char *file,int line)=0; | 192 | const char *file, int line) = 0; |
195 | static void (*dynlock_lock_callback)(int mode, | 193 | static void (*dynlock_lock_callback)(int mode, |
196 | struct CRYPTO_dynlock_value *l, const char *file,int line)=0; | 194 | struct CRYPTO_dynlock_value *l, const char *file, int line) = 0; |
197 | static void (*dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l, | 195 | static void (*dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l, |
198 | const char *file,int line)=0; | 196 | const char *file, int line) = 0; |
199 | 197 | ||
200 | int CRYPTO_get_new_lockid(char *name) | 198 | int |
201 | { | 199 | CRYPTO_get_new_lockid(char *name) |
200 | { | ||
202 | char *str; | 201 | char *str; |
203 | int i; | 202 | int i; |
204 | 203 | ||
@@ -207,141 +206,130 @@ int CRYPTO_get_new_lockid(char *name) | |||
207 | * a DLL using /MT. Without this, the application cannot use | 206 | * a DLL using /MT. Without this, the application cannot use |
208 | * any floating point printf's. | 207 | * any floating point printf's. |
209 | * It also seems to be needed for Visual C 1.5 (win16) */ | 208 | * It also seems to be needed for Visual C 1.5 (win16) */ |
210 | SSLeay_MSVC5_hack=(double)name[0]*(double)name[1]; | 209 | SSLeay_MSVC5_hack = (double)name[0]*(double)name[1]; |
211 | #endif | 210 | #endif |
212 | 211 | ||
213 | if ((app_locks == NULL) && ((app_locks=sk_OPENSSL_STRING_new_null()) == NULL)) | 212 | if ((app_locks == NULL) && ((app_locks = sk_OPENSSL_STRING_new_null()) == NULL)) { |
214 | { | 213 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID, ERR_R_MALLOC_FAILURE); |
215 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE); | 214 | return (0); |
216 | return(0); | 215 | } |
217 | } | 216 | if ((str = BUF_strdup(name)) == NULL) { |
218 | if ((str=BUF_strdup(name)) == NULL) | 217 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID, ERR_R_MALLOC_FAILURE); |
219 | { | 218 | return (0); |
220 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE); | 219 | } |
221 | return(0); | 220 | i = sk_OPENSSL_STRING_push(app_locks, str); |
222 | } | ||
223 | i=sk_OPENSSL_STRING_push(app_locks,str); | ||
224 | if (!i) | 221 | if (!i) |
225 | OPENSSL_free(str); | 222 | OPENSSL_free(str); |
226 | else | 223 | else |
227 | i+=CRYPTO_NUM_LOCKS; /* gap of one :-) */ | 224 | i += CRYPTO_NUM_LOCKS; /* gap of one :-) */ |
228 | return(i); | 225 | return (i); |
229 | } | 226 | } |
230 | 227 | ||
231 | int CRYPTO_num_locks(void) | 228 | int |
232 | { | 229 | CRYPTO_num_locks(void) |
230 | { | ||
233 | return CRYPTO_NUM_LOCKS; | 231 | return CRYPTO_NUM_LOCKS; |
234 | } | 232 | } |
235 | 233 | ||
236 | int CRYPTO_get_new_dynlockid(void) | 234 | int |
237 | { | 235 | CRYPTO_get_new_dynlockid(void) |
236 | { | ||
238 | int i = 0; | 237 | int i = 0; |
239 | CRYPTO_dynlock *pointer = NULL; | 238 | CRYPTO_dynlock *pointer = NULL; |
240 | 239 | ||
241 | if (dynlock_create_callback == NULL) | 240 | if (dynlock_create_callback == NULL) { |
242 | { | 241 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK); |
243 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK); | 242 | return (0); |
244 | return(0); | 243 | } |
245 | } | ||
246 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 244 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
247 | if ((dyn_locks == NULL) | 245 | if ((dyn_locks == NULL) |
248 | && ((dyn_locks=sk_CRYPTO_dynlock_new_null()) == NULL)) | 246 | && ((dyn_locks = sk_CRYPTO_dynlock_new_null()) == NULL)) { |
249 | { | ||
250 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 247 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
251 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE); | 248 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, ERR_R_MALLOC_FAILURE); |
252 | return(0); | 249 | return (0); |
253 | } | 250 | } |
254 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 251 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
255 | 252 | ||
256 | pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock)); | 253 | pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock)); |
257 | if (pointer == NULL) | 254 | if (pointer == NULL) { |
258 | { | 255 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, ERR_R_MALLOC_FAILURE); |
259 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE); | 256 | return (0); |
260 | return(0); | 257 | } |
261 | } | ||
262 | pointer->references = 1; | 258 | pointer->references = 1; |
263 | pointer->data = dynlock_create_callback(__FILE__,__LINE__); | 259 | pointer->data = dynlock_create_callback(__FILE__, __LINE__); |
264 | if (pointer->data == NULL) | 260 | if (pointer->data == NULL) { |
265 | { | ||
266 | OPENSSL_free(pointer); | 261 | OPENSSL_free(pointer); |
267 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE); | 262 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, ERR_R_MALLOC_FAILURE); |
268 | return(0); | 263 | return (0); |
269 | } | 264 | } |
270 | 265 | ||
271 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 266 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
272 | /* First, try to find an existing empty slot */ | 267 | /* First, try to find an existing empty slot */ |
273 | i=sk_CRYPTO_dynlock_find(dyn_locks,NULL); | 268 | i = sk_CRYPTO_dynlock_find(dyn_locks, NULL); |
274 | /* If there was none, push, thereby creating a new one */ | 269 | /* If there was none, push, thereby creating a new one */ |
275 | if (i == -1) | 270 | if (i == -1) |
276 | /* Since sk_push() returns the number of items on the | 271 | /* Since sk_push() returns the number of items on the |
277 | stack, not the location of the pushed item, we need | 272 | stack, not the location of the pushed item, we need |
278 | to transform the returned number into a position, | 273 | to transform the returned number into a position, |
279 | by decreasing it. */ | 274 | by decreasing it. */ |
280 | i=sk_CRYPTO_dynlock_push(dyn_locks,pointer) - 1; | 275 | i = sk_CRYPTO_dynlock_push(dyn_locks, pointer) - 1; |
281 | else | 276 | else |
282 | /* If we found a place with a NULL pointer, put our pointer | 277 | /* If we found a place with a NULL pointer, put our pointer |
283 | in it. */ | 278 | in it. */ |
284 | (void)sk_CRYPTO_dynlock_set(dyn_locks,i,pointer); | 279 | (void)sk_CRYPTO_dynlock_set(dyn_locks, i, pointer); |
285 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 280 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
286 | 281 | ||
287 | if (i == -1) | 282 | if (i == -1) { |
288 | { | 283 | dynlock_destroy_callback(pointer->data, __FILE__, __LINE__); |
289 | dynlock_destroy_callback(pointer->data,__FILE__,__LINE__); | ||
290 | OPENSSL_free(pointer); | 284 | OPENSSL_free(pointer); |
291 | } | 285 | } else |
292 | else | ||
293 | i += 1; /* to avoid 0 */ | 286 | i += 1; /* to avoid 0 */ |
294 | return -i; | 287 | return - i; |
295 | } | 288 | } |
296 | 289 | ||
297 | void CRYPTO_destroy_dynlockid(int i) | 290 | void |
298 | { | 291 | CRYPTO_destroy_dynlockid(int i) |
292 | { | ||
299 | CRYPTO_dynlock *pointer = NULL; | 293 | CRYPTO_dynlock *pointer = NULL; |
300 | if (i) | 294 | if (i) |
301 | i = -i-1; | 295 | i = -i - 1; |
302 | if (dynlock_destroy_callback == NULL) | 296 | if (dynlock_destroy_callback == NULL) |
303 | return; | 297 | return; |
304 | 298 | ||
305 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 299 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
306 | 300 | ||
307 | if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks)) | 301 | if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks)) { |
308 | { | ||
309 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 302 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
310 | return; | 303 | return; |
311 | } | 304 | } |
312 | pointer = sk_CRYPTO_dynlock_value(dyn_locks, i); | 305 | pointer = sk_CRYPTO_dynlock_value(dyn_locks, i); |
313 | if (pointer != NULL) | 306 | if (pointer != NULL) { |
314 | { | ||
315 | --pointer->references; | 307 | --pointer->references; |
316 | #ifdef REF_CHECK | 308 | #ifdef REF_CHECK |
317 | if (pointer->references < 0) | 309 | if (pointer->references < 0) { |
318 | { | 310 | fprintf(stderr, "CRYPTO_destroy_dynlockid, bad reference count\n"); |
319 | fprintf(stderr,"CRYPTO_destroy_dynlockid, bad reference count\n"); | ||
320 | abort(); | 311 | abort(); |
321 | } | 312 | } else |
322 | else | ||
323 | #endif | 313 | #endif |
324 | if (pointer->references <= 0) | 314 | if (pointer->references <= 0) { |
325 | { | 315 | (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL); |
326 | (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL); | 316 | } else |
327 | } | 317 | pointer = NULL; |
328 | else | 318 | } |
329 | pointer = NULL; | ||
330 | } | ||
331 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 319 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
332 | 320 | ||
333 | if (pointer) | 321 | if (pointer) { |
334 | { | 322 | dynlock_destroy_callback(pointer->data, __FILE__, __LINE__); |
335 | dynlock_destroy_callback(pointer->data,__FILE__,__LINE__); | ||
336 | OPENSSL_free(pointer); | 323 | OPENSSL_free(pointer); |
337 | } | ||
338 | } | 324 | } |
325 | } | ||
339 | 326 | ||
340 | struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i) | 327 | struct CRYPTO_dynlock_value |
341 | { | 328 | *CRYPTO_get_dynlock_value(int i) |
329 | { | ||
342 | CRYPTO_dynlock *pointer = NULL; | 330 | CRYPTO_dynlock *pointer = NULL; |
343 | if (i) | 331 | if (i) |
344 | i = -i-1; | 332 | i = -i - 1; |
345 | 333 | ||
346 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 334 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
347 | 335 | ||
@@ -355,97 +343,102 @@ struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i) | |||
355 | if (pointer) | 343 | if (pointer) |
356 | return pointer->data; | 344 | return pointer->data; |
357 | return NULL; | 345 | return NULL; |
358 | } | 346 | } |
359 | 347 | ||
360 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void)) | 348 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))( |
361 | (const char *file,int line) | 349 | const char *file, int line) |
362 | { | 350 | { |
363 | return(dynlock_create_callback); | 351 | return (dynlock_create_callback); |
364 | } | 352 | } |
365 | 353 | ||
366 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, | 354 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, |
367 | struct CRYPTO_dynlock_value *l, const char *file,int line) | 355 | struct CRYPTO_dynlock_value *l, const char *file, int line) |
368 | { | 356 | { |
369 | return(dynlock_lock_callback); | 357 | return (dynlock_lock_callback); |
370 | } | 358 | } |
371 | |||
372 | void (*CRYPTO_get_dynlock_destroy_callback(void)) | ||
373 | (struct CRYPTO_dynlock_value *l, const char *file,int line) | ||
374 | { | ||
375 | return(dynlock_destroy_callback); | ||
376 | } | ||
377 | 359 | ||
378 | void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func) | 360 | void (*CRYPTO_get_dynlock_destroy_callback(void))( |
379 | (const char *file, int line)) | 361 | struct CRYPTO_dynlock_value *l, const char *file, int line) |
380 | { | 362 | { |
381 | dynlock_create_callback=func; | 363 | return (dynlock_destroy_callback); |
382 | } | 364 | } |
383 | 365 | ||
384 | void CRYPTO_set_dynlock_lock_callback(void (*func)(int mode, | 366 | void |
385 | struct CRYPTO_dynlock_value *l, const char *file, int line)) | 367 | CRYPTO_set_dynlock_create_callback( |
386 | { | 368 | struct CRYPTO_dynlock_value *(*func)(const char *file, int line)) |
387 | dynlock_lock_callback=func; | 369 | { |
388 | } | 370 | dynlock_create_callback = func; |
371 | } | ||
389 | 372 | ||
390 | void CRYPTO_set_dynlock_destroy_callback(void (*func) | 373 | void |
391 | (struct CRYPTO_dynlock_value *l, const char *file, int line)) | 374 | CRYPTO_set_dynlock_lock_callback(void (*func)(int mode, |
392 | { | 375 | struct CRYPTO_dynlock_value *l, const char *file, int line)) |
393 | dynlock_destroy_callback=func; | 376 | { |
394 | } | 377 | dynlock_lock_callback = func; |
378 | } | ||
395 | 379 | ||
380 | void | ||
381 | CRYPTO_set_dynlock_destroy_callback( | ||
382 | void (*func)(struct CRYPTO_dynlock_value *l, const char *file, int line)) | ||
383 | { | ||
384 | dynlock_destroy_callback = func; | ||
385 | } | ||
396 | 386 | ||
397 | void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file, | 387 | void (*CRYPTO_get_locking_callback(void))(int mode, int type, |
398 | int line) | 388 | const char *file, int line) |
399 | { | 389 | { |
400 | return(locking_callback); | 390 | return (locking_callback); |
401 | } | 391 | } |
402 | 392 | ||
403 | int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type, | 393 | int (*CRYPTO_get_add_lock_callback(void))(int *num, int mount, int type, |
404 | const char *file,int line) | 394 | const char *file, int line) |
405 | { | 395 | { |
406 | return(add_lock_callback); | 396 | return (add_lock_callback); |
407 | } | 397 | } |
408 | 398 | ||
409 | void CRYPTO_set_locking_callback(void (*func)(int mode,int type, | 399 | void |
410 | const char *file,int line)) | 400 | CRYPTO_set_locking_callback(void (*func)(int mode, int type, |
411 | { | 401 | const char *file, int line)) |
402 | { | ||
412 | /* Calling this here ensures initialisation before any threads | 403 | /* Calling this here ensures initialisation before any threads |
413 | * are started. | 404 | * are started. |
414 | */ | 405 | */ |
415 | OPENSSL_init(); | 406 | OPENSSL_init(); |
416 | locking_callback=func; | 407 | locking_callback = func; |
417 | } | 408 | } |
418 | 409 | ||
419 | void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type, | 410 | void |
420 | const char *file,int line)) | 411 | CRYPTO_set_add_lock_callback(int (*func)(int *num, int mount, int type, |
421 | { | 412 | const char *file, int line)) |
422 | add_lock_callback=func; | 413 | { |
423 | } | 414 | add_lock_callback = func; |
415 | } | ||
424 | 416 | ||
425 | /* the memset() here and in set_pointer() seem overkill, but for the sake of | 417 | /* the memset() here and in set_pointer() seem overkill, but for the sake of |
426 | * CRYPTO_THREADID_cmp() this avoids any platform silliness that might cause two | 418 | * CRYPTO_THREADID_cmp() this avoids any platform silliness that might cause two |
427 | * "equal" THREADID structs to not be memcmp()-identical. */ | 419 | * "equal" THREADID structs to not be memcmp()-identical. */ |
428 | void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val) | 420 | void |
429 | { | 421 | CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val) |
422 | { | ||
430 | memset(id, 0, sizeof(*id)); | 423 | memset(id, 0, sizeof(*id)); |
431 | id->val = val; | 424 | id->val = val; |
432 | } | 425 | } |
433 | 426 | ||
434 | static const unsigned char hash_coeffs[] = { 3, 5, 7, 11, 13, 17, 19, 23 }; | 427 | static const unsigned char hash_coeffs[] = { 3, 5, 7, 11, 13, 17, 19, 23 }; |
435 | void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr) | 428 | void |
436 | { | 429 | CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr) |
430 | { | ||
437 | unsigned char *dest = (void *)&id->val; | 431 | unsigned char *dest = (void *)&id->val; |
438 | unsigned int accum = 0; | 432 | unsigned int accum = 0; |
439 | unsigned char dnum = sizeof(id->val); | 433 | unsigned char dnum = sizeof(id->val); |
440 | 434 | ||
441 | memset(id, 0, sizeof(*id)); | 435 | memset(id, 0, sizeof(*id)); |
442 | id->ptr = ptr; | 436 | id->ptr = ptr; |
443 | if (sizeof(id->val) >= sizeof(id->ptr)) | 437 | if (sizeof(id->val) >= sizeof(id->ptr)) { |
444 | { | ||
445 | /* 'ptr' can be embedded in 'val' without loss of uniqueness */ | 438 | /* 'ptr' can be embedded in 'val' without loss of uniqueness */ |
446 | id->val = (unsigned long)id->ptr; | 439 | id->val = (unsigned long)id->ptr; |
447 | return; | 440 | return; |
448 | } | 441 | } |
449 | /* hash ptr ==> val. Each byte of 'val' gets the mod-256 total of a | 442 | /* hash ptr ==> val. Each byte of 'val' gets the mod-256 total of a |
450 | * linear function over the bytes in 'ptr', the co-efficients of which | 443 | * linear function over the bytes in 'ptr', the co-efficients of which |
451 | * are a sequence of low-primes (hash_coeffs is an 8-element cycle) - | 444 | * are a sequence of low-primes (hash_coeffs is an 8-element cycle) - |
@@ -456,44 +449,43 @@ void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr) | |||
456 | * a black-belt, I'd scan big-endian pointers in reverse to give | 449 | * a black-belt, I'd scan big-endian pointers in reverse to give |
457 | * low-order bits more play, but this isn't crypto and I'd prefer nobody | 450 | * low-order bits more play, but this isn't crypto and I'd prefer nobody |
458 | * mistake it as such. Plus I'm lazy. */ | 451 | * mistake it as such. Plus I'm lazy. */ |
459 | while (dnum--) | 452 | while (dnum--) { |
460 | { | ||
461 | const unsigned char *src = (void *)&id->ptr; | 453 | const unsigned char *src = (void *)&id->ptr; |
462 | unsigned char snum = sizeof(id->ptr); | 454 | unsigned char snum = sizeof(id->ptr); |
463 | while (snum--) | 455 | while (snum--) |
464 | accum += *(src++) * hash_coeffs[(snum + dnum) & 7]; | 456 | accum += *(src++) * hash_coeffs[(snum + dnum) & 7]; |
465 | accum += dnum; | 457 | accum += dnum; |
466 | *(dest++) = accum & 255; | 458 | *(dest++) = accum & 255; |
467 | } | ||
468 | } | 459 | } |
460 | } | ||
469 | 461 | ||
470 | int CRYPTO_THREADID_set_callback(void (*func)(CRYPTO_THREADID *)) | 462 | int |
471 | { | 463 | CRYPTO_THREADID_set_callback(void (*func)(CRYPTO_THREADID *)) |
464 | { | ||
472 | if (threadid_callback) | 465 | if (threadid_callback) |
473 | return 0; | 466 | return 0; |
474 | threadid_callback = func; | 467 | threadid_callback = func; |
475 | return 1; | 468 | return 1; |
476 | } | 469 | } |
477 | 470 | ||
478 | void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *) | 471 | void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *) |
479 | { | 472 | { |
480 | return threadid_callback; | 473 | return threadid_callback; |
481 | } | 474 | } |
482 | 475 | ||
483 | void CRYPTO_THREADID_current(CRYPTO_THREADID *id) | 476 | void |
484 | { | 477 | CRYPTO_THREADID_current(CRYPTO_THREADID *id) |
485 | if (threadid_callback) | 478 | { |
486 | { | 479 | if (threadid_callback) { |
487 | threadid_callback(id); | 480 | threadid_callback(id); |
488 | return; | 481 | return; |
489 | } | 482 | } |
490 | #ifndef OPENSSL_NO_DEPRECATED | 483 | #ifndef OPENSSL_NO_DEPRECATED |
491 | /* If the deprecated callback was set, fall back to that */ | 484 | /* If the deprecated callback was set, fall back to that */ |
492 | if (id_callback) | 485 | if (id_callback) { |
493 | { | ||
494 | CRYPTO_THREADID_set_numeric(id, id_callback()); | 486 | CRYPTO_THREADID_set_numeric(id, id_callback()); |
495 | return; | 487 | return; |
496 | } | 488 | } |
497 | #endif | 489 | #endif |
498 | /* Else pick a backup */ | 490 | /* Else pick a backup */ |
499 | #ifdef OPENSSL_SYS_WIN16 | 491 | #ifdef OPENSSL_SYS_WIN16 |
@@ -506,64 +498,68 @@ void CRYPTO_THREADID_current(CRYPTO_THREADID *id) | |||
506 | /* For everything else, default to using the address of 'errno' */ | 498 | /* For everything else, default to using the address of 'errno' */ |
507 | CRYPTO_THREADID_set_pointer(id, (void*)&errno); | 499 | CRYPTO_THREADID_set_pointer(id, (void*)&errno); |
508 | #endif | 500 | #endif |
509 | } | 501 | } |
510 | 502 | ||
511 | int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b) | 503 | int |
512 | { | 504 | CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b) |
505 | { | ||
513 | return memcmp(a, b, sizeof(*a)); | 506 | return memcmp(a, b, sizeof(*a)); |
514 | } | 507 | } |
515 | 508 | ||
516 | void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src) | 509 | void |
517 | { | 510 | CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src) |
511 | { | ||
518 | memcpy(dest, src, sizeof(*src)); | 512 | memcpy(dest, src, sizeof(*src)); |
519 | } | 513 | } |
520 | 514 | ||
521 | unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id) | 515 | unsigned long |
522 | { | 516 | CRYPTO_THREADID_hash(const CRYPTO_THREADID *id) |
517 | { | ||
523 | return id->val; | 518 | return id->val; |
524 | } | 519 | } |
525 | 520 | ||
526 | #ifndef OPENSSL_NO_DEPRECATED | 521 | #ifndef OPENSSL_NO_DEPRECATED |
527 | unsigned long (*CRYPTO_get_id_callback(void))(void) | 522 | unsigned long (*CRYPTO_get_id_callback(void))(void) |
528 | { | 523 | { |
529 | return(id_callback); | 524 | return (id_callback); |
530 | } | 525 | } |
531 | 526 | ||
532 | void CRYPTO_set_id_callback(unsigned long (*func)(void)) | 527 | void |
533 | { | 528 | CRYPTO_set_id_callback(unsigned long (*func)(void)) |
534 | id_callback=func; | 529 | { |
535 | } | 530 | id_callback = func; |
531 | } | ||
536 | 532 | ||
537 | unsigned long CRYPTO_thread_id(void) | 533 | unsigned long |
538 | { | 534 | CRYPTO_thread_id(void) |
539 | unsigned long ret=0; | 535 | { |
536 | unsigned long ret = 0; | ||
540 | 537 | ||
541 | if (id_callback == NULL) | 538 | if (id_callback == NULL) { |
542 | { | ||
543 | #ifdef OPENSSL_SYS_WIN16 | 539 | #ifdef OPENSSL_SYS_WIN16 |
544 | ret=(unsigned long)GetCurrentTask(); | 540 | ret = (unsigned long)GetCurrentTask(); |
545 | #elif defined(OPENSSL_SYS_WIN32) | 541 | #elif defined(OPENSSL_SYS_WIN32) |
546 | ret=(unsigned long)GetCurrentThreadId(); | 542 | ret = (unsigned long)GetCurrentThreadId(); |
547 | #elif defined(GETPID_IS_MEANINGLESS) | 543 | #elif defined(GETPID_IS_MEANINGLESS) |
548 | ret=1L; | 544 | ret = 1L; |
549 | #elif defined(OPENSSL_SYS_BEOS) | 545 | #elif defined(OPENSSL_SYS_BEOS) |
550 | ret=(unsigned long)find_thread(NULL); | 546 | ret = (unsigned long)find_thread(NULL); |
551 | #else | 547 | #else |
552 | ret=(unsigned long)getpid(); | 548 | ret = (unsigned long)getpid(); |
553 | #endif | 549 | #endif |
554 | } | 550 | } else |
555 | else | 551 | ret = id_callback(); |
556 | ret=id_callback(); | 552 | return (ret); |
557 | return(ret); | 553 | } |
558 | } | ||
559 | #endif | 554 | #endif |
560 | 555 | ||
561 | void CRYPTO_lock(int mode, int type, const char *file, int line) | 556 | void |
562 | { | 557 | CRYPTO_lock(int mode, int type, const char *file, int line) |
558 | { | ||
563 | #ifdef LOCK_DEBUG | 559 | #ifdef LOCK_DEBUG |
564 | { | 560 | { |
565 | CRYPTO_THREADID id; | 561 | CRYPTO_THREADID id; |
566 | char *rw_text,*operation_text; | 562 | char *rw_text, *operation_text; |
567 | 563 | ||
568 | if (mode & CRYPTO_LOCK) | 564 | if (mode & CRYPTO_LOCK) |
569 | operation_text="lock "; | 565 | operation_text="lock "; |
@@ -580,101 +576,98 @@ void CRYPTO_lock(int mode, int type, const char *file, int line) | |||
580 | rw_text="ERROR"; | 576 | rw_text="ERROR"; |
581 | 577 | ||
582 | CRYPTO_THREADID_current(&id); | 578 | CRYPTO_THREADID_current(&id); |
583 | fprintf(stderr,"lock:%08lx:(%s)%s %-18s %s:%d\n", | 579 | fprintf(stderr, "lock:%08lx:(%s)%s %-18s %s:%d\n", |
584 | CRYPTO_THREADID_hash(&id), rw_text, operation_text, | 580 | CRYPTO_THREADID_hash(&id), rw_text, operation_text, |
585 | CRYPTO_get_lock_name(type), file, line); | 581 | CRYPTO_get_lock_name(type), file, line); |
586 | } | 582 | } |
587 | #endif | 583 | #endif |
588 | if (type < 0) | 584 | if (type < 0) { |
589 | { | 585 | if (dynlock_lock_callback != NULL) { |
590 | if (dynlock_lock_callback != NULL) | 586 | struct CRYPTO_dynlock_value *pointer = |
591 | { | 587 | CRYPTO_get_dynlock_value(type); |
592 | struct CRYPTO_dynlock_value *pointer | ||
593 | = CRYPTO_get_dynlock_value(type); | ||
594 | 588 | ||
595 | OPENSSL_assert(pointer != NULL); | 589 | OPENSSL_assert(pointer != NULL); |
596 | 590 | ||
597 | dynlock_lock_callback(mode, pointer, file, line); | 591 | dynlock_lock_callback(mode, pointer, file, line); |
598 | 592 | ||
599 | CRYPTO_destroy_dynlockid(type); | 593 | CRYPTO_destroy_dynlockid(type); |
600 | } | ||
601 | } | 594 | } |
602 | else | 595 | } else if (locking_callback != NULL) |
603 | if (locking_callback != NULL) | 596 | locking_callback(mode, type, file, line); |
604 | locking_callback(mode,type,file,line); | 597 | } |
605 | } | ||
606 | 598 | ||
607 | int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, | 599 | int |
608 | int line) | 600 | CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, |
609 | { | 601 | int line) |
602 | { | ||
610 | int ret = 0; | 603 | int ret = 0; |
611 | 604 | ||
612 | if (add_lock_callback != NULL) | 605 | if (add_lock_callback != NULL) { |
613 | { | ||
614 | #ifdef LOCK_DEBUG | 606 | #ifdef LOCK_DEBUG |
615 | int before= *pointer; | 607 | int before= *pointer; |
616 | #endif | 608 | #endif |
617 | 609 | ||
618 | ret=add_lock_callback(pointer,amount,type,file,line); | 610 | ret = add_lock_callback(pointer, amount, type, file, line); |
619 | #ifdef LOCK_DEBUG | 611 | #ifdef LOCK_DEBUG |
620 | { | 612 | { |
621 | CRYPTO_THREADID id; | 613 | CRYPTO_THREADID id; |
622 | CRYPTO_THREADID_current(&id); | 614 | CRYPTO_THREADID_current(&id); |
623 | fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", | 615 | fprintf(stderr, "ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", |
624 | CRYPTO_THREADID_hash(&id), before,amount,ret, | 616 | CRYPTO_THREADID_hash(&id), before, amount, ret, |
625 | CRYPTO_get_lock_name(type), | 617 | CRYPTO_get_lock_name(type), |
626 | file,line); | 618 | file, line); |
627 | } | 619 | } |
628 | #endif | 620 | #endif |
629 | } | 621 | } else { |
630 | else | 622 | CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE, type, file, line); |
631 | { | ||
632 | CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,file,line); | ||
633 | 623 | ||
634 | ret= *pointer+amount; | 624 | ret= *pointer + amount; |
635 | #ifdef LOCK_DEBUG | 625 | #ifdef LOCK_DEBUG |
636 | { | 626 | { |
637 | CRYPTO_THREADID id; | 627 | CRYPTO_THREADID id; |
638 | CRYPTO_THREADID_current(&id); | 628 | CRYPTO_THREADID_current(&id); |
639 | fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", | 629 | fprintf(stderr, "ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", |
640 | CRYPTO_THREADID_hash(&id), | 630 | CRYPTO_THREADID_hash(&id), |
641 | *pointer,amount,ret, | 631 | *pointer, amount, ret, |
642 | CRYPTO_get_lock_name(type), | 632 | CRYPTO_get_lock_name(type), |
643 | file,line); | 633 | file, line); |
644 | } | 634 | } |
645 | #endif | 635 | #endif |
646 | *pointer=ret; | 636 | *pointer = ret; |
647 | CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,file,line); | 637 | CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE, type, file, line); |
648 | } | ||
649 | return(ret); | ||
650 | } | 638 | } |
639 | return (ret); | ||
640 | } | ||
651 | 641 | ||
652 | const char *CRYPTO_get_lock_name(int type) | 642 | const char |
653 | { | 643 | *CRYPTO_get_lock_name(int type) |
644 | { | ||
654 | if (type < 0) | 645 | if (type < 0) |
655 | return("dynamic"); | 646 | return("dynamic"); |
656 | else if (type < CRYPTO_NUM_LOCKS) | 647 | else if (type < CRYPTO_NUM_LOCKS) |
657 | return(lock_names[type]); | 648 | return (lock_names[type]); |
658 | else if (type-CRYPTO_NUM_LOCKS > sk_OPENSSL_STRING_num(app_locks)) | 649 | else if (type - CRYPTO_NUM_LOCKS > sk_OPENSSL_STRING_num(app_locks)) |
659 | return("ERROR"); | 650 | return("ERROR"); |
660 | else | 651 | else |
661 | return(sk_OPENSSL_STRING_value(app_locks,type-CRYPTO_NUM_LOCKS)); | 652 | return (sk_OPENSSL_STRING_value(app_locks, type - CRYPTO_NUM_LOCKS)); |
662 | } | 653 | } |
663 | 654 | ||
664 | #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ | 655 | #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ |
665 | defined(__INTEL__) || \ | 656 | defined(__INTEL__) || \ |
666 | defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) | 657 | defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) |
667 | 658 | ||
668 | unsigned int OPENSSL_ia32cap_P[2]; | 659 | unsigned int OPENSSL_ia32cap_P[2]; |
669 | unsigned long *OPENSSL_ia32cap_loc(void) | 660 | unsigned long |
670 | { if (sizeof(long)==4) | 661 | *OPENSSL_ia32cap_loc(void) |
671 | /* | 662 | { |
672 | * If 32-bit application pulls address of OPENSSL_ia32cap_P[0] | 663 | if (sizeof(long) == 4) |
673 | * clear second element to maintain the illusion that vector | 664 | /* |
674 | * is 32-bit. | 665 | * If 32-bit application pulls address of OPENSSL_ia32cap_P[0] |
675 | */ | 666 | * clear second element to maintain the illusion that vector |
676 | OPENSSL_ia32cap_P[1]=0; | 667 | * is 32-bit. |
677 | return (unsigned long *)OPENSSL_ia32cap_P; | 668 | */ |
669 | OPENSSL_ia32cap_P[1] = 0; | ||
670 | return (unsigned long *)OPENSSL_ia32cap_P; | ||
678 | } | 671 | } |
679 | 672 | ||
680 | #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) | 673 | #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) |
@@ -684,43 +677,48 @@ typedef unsigned __int64 IA32CAP; | |||
684 | #else | 677 | #else |
685 | typedef unsigned long long IA32CAP; | 678 | typedef unsigned long long IA32CAP; |
686 | #endif | 679 | #endif |
687 | void OPENSSL_cpuid_setup(void) | 680 | void |
688 | { static int trigger=0; | 681 | OPENSSL_cpuid_setup(void) |
689 | IA32CAP OPENSSL_ia32_cpuid(void); | 682 | { |
690 | IA32CAP vec; | 683 | static int trigger = 0; |
691 | char *env; | 684 | IA32CAP OPENSSL_ia32_cpuid(void); |
692 | 685 | IA32CAP vec; | |
693 | if (trigger) return; | 686 | char *env; |
687 | |||
688 | if (trigger) | ||
689 | return; | ||
694 | 690 | ||
695 | trigger=1; | 691 | trigger = 1; |
696 | if ((env=getenv("OPENSSL_ia32cap"))) { | 692 | if ((env = getenv("OPENSSL_ia32cap"))) { |
697 | int off = (env[0]=='~')?1:0; | 693 | int off = (env[0]=='~') ? 1 : 0; |
698 | #if defined(_WIN32) | 694 | #if defined(_WIN32) |
699 | if (!sscanf(env+off,"%I64i",&vec)) vec = strtoul(env+off,NULL,0); | 695 | if (!sscanf(env+off, "%I64i", &vec)) vec = strtoul(env+off, NULL, 0); |
700 | #else | 696 | #else |
701 | if (!sscanf(env+off,"%lli",(long long *)&vec)) vec = strtoul(env+off,NULL,0); | 697 | if (!sscanf(env+off, "%lli",(long long *)&vec)) vec = strtoul(env+off, NULL, 0); |
702 | #endif | 698 | #endif |
703 | if (off) vec = OPENSSL_ia32_cpuid()&~vec; | 699 | if (off) |
704 | } | 700 | vec = OPENSSL_ia32_cpuid()&~vec; |
705 | else | 701 | } else |
706 | vec = OPENSSL_ia32_cpuid(); | 702 | vec = OPENSSL_ia32_cpuid(); |
707 | 703 | ||
708 | /* | 704 | /* |
709 | * |(1<<10) sets a reserved bit to signal that variable | 705 | * |(1<<10) sets a reserved bit to signal that variable |
710 | * was initialized already... This is to avoid interference | 706 | * was initialized already... This is to avoid interference |
711 | * with cpuid snippets in ELF .init segment. | 707 | * with cpuid snippets in ELF .init segment. |
712 | */ | 708 | */ |
713 | OPENSSL_ia32cap_P[0] = (unsigned int)vec|(1<<10); | 709 | OPENSSL_ia32cap_P[0] = (unsigned int)vec|(1 << 10); |
714 | OPENSSL_ia32cap_P[1] = (unsigned int)(vec>>32); | 710 | OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32); |
715 | } | 711 | } |
716 | #endif | 712 | #endif |
717 | 713 | ||
718 | #else | 714 | #else |
719 | unsigned long *OPENSSL_ia32cap_loc(void) { return NULL; } | 715 | unsigned long *OPENSSL_ia32cap_loc(void) { return NULL; |
716 | } | ||
720 | #endif | 717 | #endif |
721 | int OPENSSL_NONPIC_relocated = 0; | 718 | int OPENSSL_NONPIC_relocated = 0; |
722 | #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ) | 719 | #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ) |
723 | void OPENSSL_cpuid_setup(void) {} | 720 | void |
721 | OPENSSL_cpuid_setup(void) {} | ||
724 | #endif | 722 | #endif |
725 | 723 | ||
726 | #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL) | 724 | #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL) |
@@ -734,25 +732,23 @@ void OPENSSL_cpuid_setup(void) {} | |||
734 | /* All we really need to do is remove the 'error' state when a thread | 732 | /* All we really need to do is remove the 'error' state when a thread |
735 | * detaches */ | 733 | * detaches */ |
736 | 734 | ||
737 | BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, | 735 | BOOL WINAPI |
738 | LPVOID lpvReserved) | 736 | DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) |
739 | { | 737 | { |
740 | switch(fdwReason) | 738 | switch (fdwReason) { |
741 | { | ||
742 | case DLL_PROCESS_ATTACH: | 739 | case DLL_PROCESS_ATTACH: |
743 | OPENSSL_cpuid_setup(); | 740 | OPENSSL_cpuid_setup(); |
744 | #if defined(_WIN32_WINNT) | 741 | #if defined(_WIN32_WINNT) |
745 | { | 742 | { |
746 | IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL; | 743 | IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL; |
747 | IMAGE_NT_HEADERS *nt_headers; | 744 | IMAGE_NT_HEADERS *nt_headers; |
748 | 745 | ||
749 | if (dos_header->e_magic==IMAGE_DOS_SIGNATURE) | 746 | if (dos_header->e_magic == IMAGE_DOS_SIGNATURE) { |
750 | { | 747 | nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header |
751 | nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header | 748 | + dos_header->e_lfanew); |
752 | + dos_header->e_lfanew); | 749 | if (nt_headers->Signature == IMAGE_NT_SIGNATURE && |
753 | if (nt_headers->Signature==IMAGE_NT_SIGNATURE && | 750 | hinstDLL != (HINSTANCE)(nt_headers->OptionalHeader.ImageBase)) |
754 | hinstDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase)) | 751 | OPENSSL_NONPIC_relocated = 1; |
755 | OPENSSL_NONPIC_relocated=1; | ||
756 | } | 752 | } |
757 | } | 753 | } |
758 | #endif | 754 | #endif |
@@ -763,9 +759,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, | |||
763 | break; | 759 | break; |
764 | case DLL_PROCESS_DETACH: | 760 | case DLL_PROCESS_DETACH: |
765 | break; | 761 | break; |
766 | } | ||
767 | return(TRUE); | ||
768 | } | 762 | } |
763 | return (TRUE); | ||
764 | } | ||
769 | #endif | 765 | #endif |
770 | 766 | ||
771 | #if defined(_WIN32) && !defined(__CYGWIN__) | 767 | #if defined(_WIN32) && !defined(__CYGWIN__) |
@@ -783,138 +779,166 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, | |||
783 | #endif | 779 | #endif |
784 | 780 | ||
785 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 | 781 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 |
786 | int OPENSSL_isservice(void) | 782 | int |
787 | { HWINSTA h; | 783 | OPENSSL_isservice(void) |
788 | DWORD len; | 784 | { HWINSTA h; |
789 | WCHAR *name; | 785 | DWORD len; |
790 | static union { void *p; int (*f)(void); } _OPENSSL_isservice = { NULL }; | 786 | WCHAR *name; |
791 | 787 | static union { void *p; | |
792 | if (_OPENSSL_isservice.p == NULL) { | 788 | int (*f)(void); |
793 | HANDLE h = GetModuleHandle(NULL); | 789 | } _OPENSSL_isservice = { NULL }; |
794 | if (h != NULL) | 790 | |
795 | _OPENSSL_isservice.p = GetProcAddress(h,"_OPENSSL_isservice"); | 791 | if (_OPENSSL_isservice.p == NULL) { |
796 | if (_OPENSSL_isservice.p == NULL) | 792 | HANDLE h = GetModuleHandle(NULL); |
797 | _OPENSSL_isservice.p = (void *)-1; | 793 | if (h != NULL) |
798 | } | 794 | _OPENSSL_isservice.p = GetProcAddress(h, "_OPENSSL_isservice"); |
799 | 795 | if (_OPENSSL_isservice.p == NULL) | |
800 | if (_OPENSSL_isservice.p != (void *)-1) | 796 | _OPENSSL_isservice.p = (void *) - 1; |
801 | return (*_OPENSSL_isservice.f)(); | 797 | } |
802 | 798 | ||
803 | (void)GetDesktopWindow(); /* return value is ignored */ | 799 | if (_OPENSSL_isservice.p != (void *) - 1) |
804 | 800 | return (*_OPENSSL_isservice.f)(); | |
805 | h = GetProcessWindowStation(); | 801 | |
806 | if (h==NULL) return -1; | 802 | (void)GetDesktopWindow(); /* return value is ignored */ |
807 | 803 | ||
808 | if (GetUserObjectInformationW (h,UOI_NAME,NULL,0,&len) || | 804 | h = GetProcessWindowStation(); |
809 | GetLastError() != ERROR_INSUFFICIENT_BUFFER) | 805 | if (h == NULL) |
806 | return -1; | ||
807 | |||
808 | if (GetUserObjectInformationW (h, UOI_NAME, NULL, 0, &len) || | ||
809 | GetLastError() != ERROR_INSUFFICIENT_BUFFER) | ||
810 | return -1; | 810 | return -1; |
811 | 811 | ||
812 | if (len>512) return -1; /* paranoia */ | 812 | if (len > 512) |
813 | len++,len&=~1; /* paranoia */ | 813 | return -1; |
814 | name=(WCHAR *)alloca(len+sizeof(WCHAR)); | 814 | /* paranoia */ |
815 | if (!GetUserObjectInformationW (h,UOI_NAME,name,len,&len)) | 815 | len++, len&=~1; |
816 | return -1; | 816 | /* paranoia */ |
817 | 817 | name = (WCHAR *)alloca(len + sizeof(WCHAR)); | |
818 | len++,len&=~1; /* paranoia */ | 818 | if (!GetUserObjectInformationW (h, UOI_NAME, name, len, &len)) |
819 | name[len/sizeof(WCHAR)]=L'\0'; /* paranoia */ | 819 | return -1; |
820 | |||
821 | len++, len&=~1; | ||
822 | /* paranoia */ | ||
823 | name[len/sizeof(WCHAR)]=L'\0'; /* paranoia */ | ||
820 | #if 1 | 824 | #if 1 |
821 | /* This doesn't cover "interactive" services [working with real | 825 | /* This doesn't cover "interactive" services [working with real |
822 | * WinSta0's] nor programs started non-interactively by Task | 826 | * WinSta0's] nor programs started non-interactively by Task |
823 | * Scheduler [those are working with SAWinSta]. */ | 827 | * Scheduler [those are working with SAWinSta]. */ |
824 | if (wcsstr(name,L"Service-0x")) return 1; | 828 | if (wcsstr(name, L"Service-0x")) return 1; |
825 | #else | 829 | #else |
826 | /* This covers all non-interactive programs such as services. */ | 830 | /* This covers all non-interactive programs such as services. */ |
827 | if (!wcsstr(name,L"WinSta0")) return 1; | 831 | if (!wcsstr(name, L"WinSta0")) return 1; |
828 | #endif | 832 | #endif |
829 | else return 0; | 833 | else return 0; |
830 | } | 834 | } |
831 | #else | 835 | #else |
832 | int OPENSSL_isservice(void) { return 0; } | 836 | int OPENSSL_isservice(void) { return 0; |
837 | } | ||
833 | #endif | 838 | #endif |
834 | 839 | ||
835 | void OPENSSL_showfatal (const char *fmta,...) | 840 | void OPENSSL_showfatal (const char *fmta,...) |
836 | { va_list ap; | 841 | { va_list ap; |
837 | TCHAR buf[256]; | 842 | TCHAR buf[256]; |
838 | const TCHAR *fmt; | 843 | const TCHAR *fmt; |
839 | #ifdef STD_ERROR_HANDLE /* what a dirty trick! */ | 844 | #ifdef STD_ERROR_HANDLE /* what a dirty trick! */ |
840 | HANDLE h; | 845 | HANDLE h; |
841 | 846 | ||
842 | if ((h=GetStdHandle(STD_ERROR_HANDLE)) != NULL && | 847 | if ((h = GetStdHandle(STD_ERROR_HANDLE)) != NULL && |
843 | GetFileType(h)!=FILE_TYPE_UNKNOWN) | 848 | GetFileType(h) != FILE_TYPE_UNKNOWN) |
844 | { /* must be console application */ | 849 | { /* must be console application */ |
845 | va_start (ap,fmta); | 850 | va_start (ap, fmta); |
846 | vfprintf (stderr,fmta,ap); | 851 | vfprintf (stderr, fmta, ap); |
847 | va_end (ap); | 852 | va_end (ap); |
848 | return; | 853 | return; |
849 | } | 854 | } |
850 | #endif | 855 | #endif |
851 | 856 | ||
852 | if (sizeof(TCHAR)==sizeof(char)) | 857 | if (sizeof(TCHAR) == sizeof(char)) |
853 | fmt=(const TCHAR *)fmta; | 858 | fmt = (const TCHAR *)fmta; |
854 | else do | 859 | else do |
855 | { int keepgoing; | 860 | { int keepgoing; |
856 | size_t len_0=strlen(fmta)+1,i; | 861 | size_t len_0 = strlen(fmta) + 1, i; |
857 | WCHAR *fmtw; | 862 | WCHAR *fmtw; |
858 | 863 | ||
859 | fmtw = (WCHAR *)alloca(len_0*sizeof(WCHAR)); | 864 | fmtw = (WCHAR *)alloca(len_0*sizeof(WCHAR)); |
860 | if (fmtw == NULL) { fmt=(const TCHAR *)L"no stack?"; break; } | 865 | if (fmtw == NULL) { |
866 | fmt = (const TCHAR *)L"no stack?"; | ||
867 | break; | ||
868 | } | ||
861 | 869 | ||
862 | #ifndef OPENSSL_NO_MULTIBYTE | 870 | #ifndef OPENSSL_NO_MULTIBYTE |
863 | if (!MultiByteToWideChar(CP_ACP,0,fmta,len_0,fmtw,len_0)) | 871 | if (!MultiByteToWideChar(CP_ACP, 0, fmta, len_0, fmtw, len_0)) |
864 | #endif | 872 | #endif |
865 | for (i=0;i<len_0;i++) fmtw[i]=(WCHAR)fmta[i]; | 873 | for (i = 0;i < len_0;i++) fmtw[i] = (WCHAR)fmta[i]; |
866 | 874 | ||
867 | for (i=0;i<len_0;i++) | 875 | for (i = 0; i < len_0; i++) |
868 | { if (fmtw[i]==L'%') do | 876 | { if (fmtw[i]==L'%') do |
869 | { keepgoing=0; | 877 | { keepgoing = 0; |
870 | switch (fmtw[i+1]) | 878 | switch (fmtw[i + 1]) |
871 | { case L'0': case L'1': case L'2': case L'3': case L'4': | 879 | { case L'0': case L'1': case L'2': case L'3': case L'4': |
872 | case L'5': case L'6': case L'7': case L'8': case L'9': | 880 | case L'5': case L'6': case L'7': case L'8': case L'9': |
873 | case L'.': case L'*': | 881 | case L'.': case L'*': |
874 | case L'-': i++; keepgoing=1; break; | 882 | case L'-': |
875 | case L's': fmtw[i+1]=L'S'; break; | 883 | i++; |
876 | case L'S': fmtw[i+1]=L's'; break; | 884 | keepgoing = 1; |
877 | case L'c': fmtw[i+1]=L'C'; break; | 885 | break; |
878 | case L'C': fmtw[i+1]=L'c'; break; | 886 | case L's': |
887 | fmtw[i + 1] = L'S'; | ||
888 | break; | ||
889 | case L'S': | ||
890 | fmtw[i + 1] = L's'; | ||
891 | break; | ||
892 | case L'c': | ||
893 | fmtw[i + 1] = L'C'; | ||
894 | break; | ||
895 | case L'C': | ||
896 | fmtw[i + 1] = L'c'; | ||
897 | break; | ||
898 | } | ||
899 | } while (keepgoing); | ||
879 | } | 900 | } |
880 | } while (keepgoing); | 901 | fmt = (const TCHAR *)fmtw; |
881 | } | 902 | } while (0); |
882 | fmt = (const TCHAR *)fmtw; | ||
883 | } while (0); | ||
884 | 903 | ||
885 | va_start (ap,fmta); | 904 | va_start (ap, fmta); |
886 | _vsntprintf (buf,sizeof(buf)/sizeof(TCHAR)-1,fmt,ap); | 905 | _vsntprintf (buf, sizeof(buf)/sizeof(TCHAR) - 1, fmt, ap); |
887 | buf [sizeof(buf)/sizeof(TCHAR)-1] = _T('\0'); | 906 | buf [sizeof(buf)/sizeof(TCHAR) - 1] = _T('\0'); |
888 | va_end (ap); | 907 | va_end (ap); |
889 | 908 | ||
890 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 | 909 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 |
891 | /* this -------------v--- guards NT-specific calls */ | 910 | /* this -------------v--- guards NT-specific calls */ |
892 | if (check_winnt() && OPENSSL_isservice() > 0) | 911 | if (check_winnt() && OPENSSL_isservice() > 0) |
893 | { HANDLE h = RegisterEventSource(0,_T("OPENSSL")); | 912 | { HANDLE h = RegisterEventSource(0, _T("OPENSSL")); |
894 | const TCHAR *pmsg=buf; | 913 | const TCHAR *pmsg = buf; |
895 | ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0); | 914 | ReportEvent(h, EVENTLOG_ERROR_TYPE, 0, 0, 0, 1, 0, &pmsg, 0); |
896 | DeregisterEventSource(h); | 915 | DeregisterEventSource(h); |
897 | } | 916 | } else |
898 | else | ||
899 | #endif | 917 | #endif |
900 | MessageBox (NULL,buf,_T("OpenSSL: FATAL"),MB_OK|MB_ICONSTOP); | 918 | MessageBox (NULL, buf, _T("OpenSSL: FATAL"), MB_OK|MB_ICONSTOP); |
901 | } | 919 | } |
902 | #else | 920 | #else |
903 | void OPENSSL_showfatal (const char *fmta,...) | 921 | void OPENSSL_showfatal(const char *fmta, ...) |
904 | { va_list ap; | 922 | { |
923 | va_list ap; | ||
905 | 924 | ||
906 | va_start (ap,fmta); | 925 | va_start (ap, fmta); |
907 | vfprintf (stderr,fmta,ap); | 926 | vfprintf (stderr, fmta, ap); |
908 | va_end (ap); | 927 | va_end (ap); |
928 | } | ||
929 | |||
930 | int OPENSSL_isservice(void) | ||
931 | { | ||
932 | return 0; | ||
909 | } | 933 | } |
910 | int OPENSSL_isservice (void) { return 0; } | ||
911 | #endif | 934 | #endif |
912 | 935 | ||
913 | void OpenSSLDie(const char *file,int line,const char *assertion) | 936 | void |
914 | { | 937 | OpenSSLDie(const char *file, int line, const char *assertion) |
938 | { | ||
915 | OPENSSL_showfatal( | 939 | OPENSSL_showfatal( |
916 | "%s(%d): OpenSSL internal error, assertion failed: %s\n", | 940 | "%s(%d): OpenSSL internal error, assertion failed: %s\n", |
917 | file,line,assertion); | 941 | file, line, assertion); |
918 | #if !defined(_WIN32) || defined(__CYGWIN__) | 942 | #if !defined(_WIN32) || defined(__CYGWIN__) |
919 | abort(); | 943 | abort(); |
920 | #else | 944 | #else |
@@ -922,12 +946,16 @@ void OpenSSLDie(const char *file,int line,const char *assertion) | |||
922 | raise(SIGABRT); | 946 | raise(SIGABRT); |
923 | _exit(3); | 947 | _exit(3); |
924 | #endif | 948 | #endif |
925 | } | 949 | } |
926 | 950 | ||
927 | void *OPENSSL_stderr(void) { return stderr; } | 951 | void *OPENSSL_stderr(void) |
952 | { | ||
953 | return stderr; | ||
954 | } | ||
928 | 955 | ||
929 | int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len) | 956 | int |
930 | { | 957 | CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len) |
958 | { | ||
931 | size_t i; | 959 | size_t i; |
932 | const unsigned char *a = in_a; | 960 | const unsigned char *a = in_a; |
933 | const unsigned char *b = in_b; | 961 | const unsigned char *b = in_b; |
@@ -937,4 +965,4 @@ int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len) | |||
937 | x |= a[i] ^ b[i]; | 965 | x |= a[i] ^ b[i]; |
938 | 966 | ||
939 | return x; | 967 | return x; |
940 | } | 968 | } |
diff --git a/src/lib/libcrypto/crypto.h b/src/lib/libcrypto/crypto.h index 76bc5958c0..baeba25b99 100644 --- a/src/lib/libcrypto/crypto.h +++ b/src/lib/libcrypto/crypto.h | |||
@@ -154,23 +154,22 @@ extern "C" { | |||
154 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; | 154 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; |
155 | /* Called when a new object is created */ | 155 | /* Called when a new object is created */ |
156 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 156 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
157 | int idx, long argl, void *argp); | 157 | int idx, long argl, void *argp); |
158 | /* Called when an object is free()ed */ | 158 | /* Called when an object is free()ed */ |
159 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 159 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
160 | int idx, long argl, void *argp); | 160 | int idx, long argl, void *argp); |
161 | /* Called when we need to dup an object */ | 161 | /* Called when we need to dup an object */ |
162 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, | 162 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, |
163 | int idx, long argl, void *argp); | 163 | void *from_d, int idx, long argl, void *argp); |
164 | #endif | 164 | #endif |
165 | 165 | ||
166 | /* A generic structure to pass assorted data in a expandable way */ | 166 | /* A generic structure to pass assorted data in a expandable way */ |
167 | typedef struct openssl_item_st | 167 | typedef struct openssl_item_st { |
168 | { | ||
169 | int code; | 168 | int code; |
170 | void *value; /* Not used for flag attributes */ | 169 | void *value; /* Not used for flag attributes */ |
171 | size_t value_size; /* Max size of value for output, length for input */ | 170 | size_t value_size; /* Max size of value for output, length for input */ |
172 | size_t *value_length; /* Returned length of value for output */ | 171 | size_t *value_length; /* Returned length of value for output */ |
173 | } OPENSSL_ITEM; | 172 | } OPENSSL_ITEM; |
174 | 173 | ||
175 | 174 | ||
176 | /* When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock | 175 | /* When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock |
@@ -249,11 +248,10 @@ typedef struct openssl_item_st | |||
249 | and deallocate locks in a dynamic fashion. The following typedef | 248 | and deallocate locks in a dynamic fashion. The following typedef |
250 | makes this possible in a type-safe manner. */ | 249 | makes this possible in a type-safe manner. */ |
251 | /* struct CRYPTO_dynlock_value has to be defined by the application. */ | 250 | /* struct CRYPTO_dynlock_value has to be defined by the application. */ |
252 | typedef struct | 251 | typedef struct { |
253 | { | ||
254 | int references; | 252 | int references; |
255 | struct CRYPTO_dynlock_value *data; | 253 | struct CRYPTO_dynlock_value *data; |
256 | } CRYPTO_dynlock; | 254 | } CRYPTO_dynlock; |
257 | 255 | ||
258 | 256 | ||
259 | /* The following can be used to detect memory leaks in the SSLeay library. | 257 | /* The following can be used to detect memory leaks in the SSLeay library. |
@@ -278,24 +276,22 @@ typedef struct | |||
278 | /* predec of the BIO type */ | 276 | /* predec of the BIO type */ |
279 | typedef struct bio_st BIO_dummy; | 277 | typedef struct bio_st BIO_dummy; |
280 | 278 | ||
281 | struct crypto_ex_data_st | 279 | struct crypto_ex_data_st { |
282 | { | ||
283 | STACK_OF(void) *sk; | 280 | STACK_OF(void) *sk; |
284 | int dummy; /* gcc is screwing up this data structure :-( */ | 281 | int dummy; /* gcc is screwing up this data structure :-( */ |
285 | }; | 282 | }; |
286 | DECLARE_STACK_OF(void) | 283 | DECLARE_STACK_OF(void) |
287 | 284 | ||
288 | /* This stuff is basically class callback functions | 285 | /* This stuff is basically class callback functions |
289 | * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ | 286 | * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ |
290 | 287 | ||
291 | typedef struct crypto_ex_data_func_st | 288 | typedef struct crypto_ex_data_func_st { |
292 | { | ||
293 | long argl; /* Arbitary long */ | 289 | long argl; /* Arbitary long */ |
294 | void *argp; /* Arbitary void * */ | 290 | void *argp; /* Arbitary void * */ |
295 | CRYPTO_EX_new *new_func; | 291 | CRYPTO_EX_new *new_func; |
296 | CRYPTO_EX_free *free_func; | 292 | CRYPTO_EX_free *free_func; |
297 | CRYPTO_EX_dup *dup_func; | 293 | CRYPTO_EX_dup *dup_func; |
298 | } CRYPTO_EX_DATA_FUNCS; | 294 | } CRYPTO_EX_DATA_FUNCS; |
299 | 295 | ||
300 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) | 296 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) |
301 | 297 | ||
@@ -392,18 +388,18 @@ int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); | |||
392 | int CRYPTO_ex_data_new_class(void); | 388 | int CRYPTO_ex_data_new_class(void); |
393 | /* Within a given class, get/register a new index */ | 389 | /* Within a given class, get/register a new index */ |
394 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, | 390 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, |
395 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 391 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
396 | CRYPTO_EX_free *free_func); | 392 | CRYPTO_EX_free *free_func); |
397 | /* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given | 393 | /* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given |
398 | * class (invokes whatever per-class callbacks are applicable) */ | 394 | * class (invokes whatever per-class callbacks are applicable) */ |
399 | int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); | 395 | int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); |
400 | int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 396 | int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, |
401 | CRYPTO_EX_DATA *from); | 397 | CRYPTO_EX_DATA *from); |
402 | void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); | 398 | void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); |
403 | /* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index | 399 | /* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index |
404 | * (relative to the class type involved) */ | 400 | * (relative to the class type involved) */ |
405 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); | 401 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); |
406 | void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad,int idx); | 402 | void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); |
407 | /* This function cleans up all "ex_data" state. It mustn't be called under | 403 | /* This function cleans up all "ex_data" state. It mustn't be called under |
408 | * potential race-conditions. */ | 404 | * potential race-conditions. */ |
409 | void CRYPTO_cleanup_all_ex_data(void); | 405 | void CRYPTO_cleanup_all_ex_data(void); |
@@ -411,22 +407,21 @@ void CRYPTO_cleanup_all_ex_data(void); | |||
411 | int CRYPTO_get_new_lockid(char *name); | 407 | int CRYPTO_get_new_lockid(char *name); |
412 | 408 | ||
413 | int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ | 409 | int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ |
414 | void CRYPTO_lock(int mode, int type,const char *file,int line); | 410 | void CRYPTO_lock(int mode, int type, const char *file, int line); |
415 | void CRYPTO_set_locking_callback(void (*func)(int mode,int type, | 411 | void CRYPTO_set_locking_callback(void (*func)(int mode, int type, |
416 | const char *file,int line)); | 412 | const char *file, int line)); |
417 | void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file, | 413 | void (*CRYPTO_get_locking_callback(void))(int mode, int type, |
418 | int line); | 414 | const char *file, int line); |
419 | void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type, | 415 | void CRYPTO_set_add_lock_callback(int (*func)(int *num, int mount, int type, |
420 | const char *file, int line)); | 416 | const char *file, int line)); |
421 | int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type, | 417 | int (*CRYPTO_get_add_lock_callback(void))(int *num, int mount, int type, |
422 | const char *file,int line); | 418 | const char *file, int line); |
423 | 419 | ||
424 | /* Don't use this structure directly. */ | 420 | /* Don't use this structure directly. */ |
425 | typedef struct crypto_threadid_st | 421 | typedef struct crypto_threadid_st { |
426 | { | ||
427 | void *ptr; | 422 | void *ptr; |
428 | unsigned long val; | 423 | unsigned long val; |
429 | } CRYPTO_THREADID; | 424 | } CRYPTO_THREADID; |
430 | /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ | 425 | /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ |
431 | void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); | 426 | void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); |
432 | void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); | 427 | void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); |
@@ -443,8 +438,8 @@ unsigned long CRYPTO_thread_id(void); | |||
443 | #endif | 438 | #endif |
444 | 439 | ||
445 | const char *CRYPTO_get_lock_name(int type); | 440 | const char *CRYPTO_get_lock_name(int type); |
446 | int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file, | 441 | int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, |
447 | int line); | 442 | int line); |
448 | 443 | ||
449 | int CRYPTO_get_new_dynlockid(void); | 444 | int CRYPTO_get_new_dynlockid(void); |
450 | void CRYPTO_destroy_dynlockid(int i); | 445 | void CRYPTO_destroy_dynlockid(int i); |
@@ -452,46 +447,43 @@ struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); | |||
452 | void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line)); | 447 | void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line)); |
453 | void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)); | 448 | void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)); |
454 | void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line)); | 449 | void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line)); |
455 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file,int line); | 450 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file, int line); |
456 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file,int line); | 451 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line); |
457 | void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file,int line); | 452 | void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file, int line); |
458 | 453 | ||
459 | /* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- | 454 | /* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- |
460 | * call the latter last if you need different functions */ | 455 | * call the latter last if you need different functions */ |
461 | int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *)); | 456 | int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), void (*f)(void *)); |
462 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *)); | 457 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *)); |
463 | int CRYPTO_set_mem_ex_functions(void *(*m)(size_t,const char *,int), | 458 | int CRYPTO_set_mem_ex_functions(void *(*m)(size_t, const char *, int), |
464 | void *(*r)(void *,size_t,const char *,int), | 459 | void *(*r)(void *, size_t, const char *, int), void (*f)(void *)); |
465 | void (*f)(void *)); | 460 | int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t, const char *, int), |
466 | int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t,const char *,int), | 461 | void (*free_func)(void *)); |
467 | void (*free_func)(void *)); | 462 | int CRYPTO_set_mem_debug_functions( |
468 | int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), | 463 | void (*m)(void *, int, const char *, int, int), |
469 | void (*r)(void *,void *,int,const char *,int,int), | 464 | void (*r)(void *, void *, int, const char *, int, int), |
470 | void (*f)(void *,int), | 465 | void (*f)(void *, int), void (*so)(long), long (*go)(void)); |
471 | void (*so)(long), | 466 | void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), |
472 | long (*go)(void)); | 467 | void (**f)(void *)); |
473 | void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *)); | ||
474 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)); | 468 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)); |
475 | void CRYPTO_get_mem_ex_functions(void *(**m)(size_t,const char *,int), | 469 | void CRYPTO_get_mem_ex_functions(void *(**m)(size_t, const char *, int), |
476 | void *(**r)(void *, size_t,const char *,int), | 470 | void *(**r)(void *, size_t, const char *, int), void (**f)(void *)); |
477 | void (**f)(void *)); | 471 | void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t, const char *, int), |
478 | void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t,const char *,int), | 472 | void (**f)(void *)); |
479 | void (**f)(void *)); | 473 | void CRYPTO_get_mem_debug_functions( |
480 | void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), | 474 | void (**m)(void *, int, const char *, int, int), |
481 | void (**r)(void *,void *,int,const char *,int,int), | 475 | void (**r)(void *, void *, int, const char *, int, int), |
482 | void (**f)(void *,int), | 476 | void (**f)(void *, int), void (**so)(long), long (**go)(void)); |
483 | void (**so)(long), | ||
484 | long (**go)(void)); | ||
485 | 477 | ||
486 | void *CRYPTO_malloc_locked(int num, const char *file, int line); | 478 | void *CRYPTO_malloc_locked(int num, const char *file, int line); |
487 | void CRYPTO_free_locked(void *ptr); | 479 | void CRYPTO_free_locked(void *ptr); |
488 | void *CRYPTO_malloc(int num, const char *file, int line); | 480 | void *CRYPTO_malloc(int num, const char *file, int line); |
489 | char *CRYPTO_strdup(const char *str, const char *file, int line); | 481 | char *CRYPTO_strdup(const char *str, const char *file, int line); |
490 | void CRYPTO_free(void *ptr); | 482 | void CRYPTO_free(void *ptr); |
491 | void *CRYPTO_realloc(void *addr,int num, const char *file, int line); | 483 | void *CRYPTO_realloc(void *addr, int num, const char *file, int line); |
492 | void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file, | 484 | void *CRYPTO_realloc_clean(void *addr, int old_num, int num, |
493 | int line); | 485 | const char *file, int line); |
494 | void *CRYPTO_remalloc(void *addr,int num, const char *file, int line); | 486 | void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); |
495 | 487 | ||
496 | void OPENSSL_cleanse(void *ptr, size_t len); | 488 | void OPENSSL_cleanse(void *ptr, size_t len); |
497 | 489 | ||
@@ -512,9 +504,9 @@ int CRYPTO_remove_all_info(void); | |||
512 | * 0: called before the actual memory allocation has taken place | 504 | * 0: called before the actual memory allocation has taken place |
513 | * 1: called after the actual memory allocation has taken place | 505 | * 1: called after the actual memory allocation has taken place |
514 | */ | 506 | */ |
515 | void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p); | 507 | void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, int before_p); |
516 | void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p); | 508 | void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, int line, int before_p); |
517 | void CRYPTO_dbg_free(void *addr,int before_p); | 509 | void CRYPTO_dbg_free(void *addr, int before_p); |
518 | /* Tell the debugging code about options. By default, the following values | 510 | /* Tell the debugging code about options. By default, the following values |
519 | * apply: | 511 | * apply: |
520 | * | 512 | * |
@@ -536,7 +528,7 @@ typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *); | |||
536 | void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); | 528 | void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); |
537 | 529 | ||
538 | /* die if we have to */ | 530 | /* die if we have to */ |
539 | void OpenSSLDie(const char *file,int line,const char *assertion); | 531 | void OpenSSLDie(const char *file, int line, const char *assertion); |
540 | #define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) | 532 | #define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) |
541 | 533 | ||
542 | unsigned long *OPENSSL_ia32cap_loc(void); | 534 | unsigned long *OPENSSL_ia32cap_loc(void); |
diff --git a/src/lib/libcrypto/cversion.c b/src/lib/libcrypto/cversion.c index ea9f25fd16..1fe92a4bfa 100644 --- a/src/lib/libcrypto/cversion.c +++ b/src/lib/libcrypto/cversion.c | |||
@@ -62,56 +62,53 @@ | |||
62 | #include "buildinf.h" | 62 | #include "buildinf.h" |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | const char *SSLeay_version(int t) | 65 | const char |
66 | { | 66 | *SSLeay_version(int t) |
67 | { | ||
67 | if (t == SSLEAY_VERSION) | 68 | if (t == SSLEAY_VERSION) |
68 | return OPENSSL_VERSION_TEXT; | 69 | return OPENSSL_VERSION_TEXT; |
69 | if (t == SSLEAY_BUILT_ON) | 70 | if (t == SSLEAY_BUILT_ON) { |
70 | { | ||
71 | #ifdef DATE | 71 | #ifdef DATE |
72 | static char buf[sizeof(DATE)+11]; | 72 | static char buf[sizeof(DATE) + 11]; |
73 | 73 | ||
74 | BIO_snprintf(buf,sizeof buf,"built on: %s",DATE); | 74 | BIO_snprintf(buf, sizeof buf, "built on: %s", DATE); |
75 | return(buf); | 75 | return (buf); |
76 | #else | 76 | #else |
77 | return("built on: date not available"); | 77 | return("built on: date not available"); |
78 | #endif | 78 | #endif |
79 | } | 79 | } |
80 | if (t == SSLEAY_CFLAGS) | 80 | if (t == SSLEAY_CFLAGS) { |
81 | { | ||
82 | #ifdef CFLAGS | 81 | #ifdef CFLAGS |
83 | static char buf[sizeof(CFLAGS)+11]; | 82 | static char buf[sizeof(CFLAGS) + 11]; |
84 | 83 | ||
85 | BIO_snprintf(buf,sizeof buf,"compiler: %s",CFLAGS); | 84 | BIO_snprintf(buf, sizeof buf, "compiler: %s", CFLAGS); |
86 | return(buf); | 85 | return (buf); |
87 | #else | 86 | #else |
88 | return("compiler: information not available"); | 87 | return("compiler: information not available"); |
89 | #endif | 88 | #endif |
90 | } | 89 | } |
91 | if (t == SSLEAY_PLATFORM) | 90 | if (t == SSLEAY_PLATFORM) { |
92 | { | ||
93 | #ifdef PLATFORM | 91 | #ifdef PLATFORM |
94 | static char buf[sizeof(PLATFORM)+11]; | 92 | static char buf[sizeof(PLATFORM) + 11]; |
95 | 93 | ||
96 | BIO_snprintf(buf,sizeof buf,"platform: %s", PLATFORM); | 94 | BIO_snprintf(buf, sizeof buf, "platform: %s", PLATFORM); |
97 | return(buf); | 95 | return (buf); |
98 | #else | 96 | #else |
99 | return("platform: information not available"); | 97 | return("platform: information not available"); |
100 | #endif | 98 | #endif |
101 | } | 99 | } |
102 | if (t == SSLEAY_DIR) | 100 | if (t == SSLEAY_DIR) { |
103 | { | ||
104 | #ifdef OPENSSLDIR | 101 | #ifdef OPENSSLDIR |
105 | return "OPENSSLDIR: \"" OPENSSLDIR "\""; | 102 | return "OPENSSLDIR: \"" OPENSSLDIR "\""; |
106 | #else | 103 | #else |
107 | return "OPENSSLDIR: N/A"; | 104 | return "OPENSSLDIR: N/A"; |
108 | #endif | 105 | #endif |
109 | } | ||
110 | return("not available"); | ||
111 | } | ||
112 | |||
113 | unsigned long SSLeay(void) | ||
114 | { | ||
115 | return(SSLEAY_VERSION_NUMBER); | ||
116 | } | 106 | } |
107 | return("not available"); | ||
108 | } | ||
117 | 109 | ||
110 | unsigned long | ||
111 | SSLeay(void) | ||
112 | { | ||
113 | return (SSLEAY_VERSION_NUMBER); | ||
114 | } | ||
diff --git a/src/lib/libcrypto/ebcdic.c b/src/lib/libcrypto/ebcdic.c index 43e53bcaf7..2ac26abc72 100644 --- a/src/lib/libcrypto/ebcdic.c +++ b/src/lib/libcrypto/ebcdic.c | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | #include <openssl/e_os2.h> | 5 | #include <openssl/e_os2.h> |
6 | #if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX) | 6 | #if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX) |
7 | static void *dummy=&dummy; | 7 | static void *dummy = &dummy; |
8 | #endif | 8 | #endif |
9 | 9 | ||
10 | #else /*CHARSET_EBCDIC*/ | 10 | #else /*CHARSET_EBCDIC*/ |
@@ -30,38 +30,38 @@ static void *dummy=&dummy; | |||
30 | 30 | ||
31 | /* Here's the bijective ebcdic-to-ascii table: */ | 31 | /* Here's the bijective ebcdic-to-ascii table: */ |
32 | const unsigned char os_toascii[256] = { | 32 | const unsigned char os_toascii[256] = { |
33 | /*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, | 33 | /*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, |
34 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/ | 34 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/ |
35 | /*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, | 35 | /*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, |
36 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/ | 36 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/ |
37 | /*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, | 37 | /*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, |
38 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/ | 38 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/ |
39 | /*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, | 39 | /*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, |
40 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/ | 40 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/ |
41 | /*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, | 41 | /*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, |
42 | 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/ | 42 | 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/ |
43 | /*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, | 43 | /*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, |
44 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/ | 44 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/ |
45 | /*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, | 45 | /*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, |
46 | 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/ | 46 | 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/ |
47 | /*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, | 47 | /*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, |
48 | 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/ | 48 | 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/ |
49 | /*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, | 49 | /*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, |
50 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/ | 50 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/ |
51 | /*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, | 51 | /*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, |
52 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/ | 52 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/ |
53 | /*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, | 53 | /*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, |
54 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/ | 54 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/ |
55 | /*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, | 55 | /*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, |
56 | 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/ | 56 | 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/ |
57 | /*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, | 57 | /*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, |
58 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/ | 58 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/ |
59 | /*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, | 59 | /*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, |
60 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/ | 60 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/ |
61 | /*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, | 61 | /*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, |
62 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/ | 62 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/ |
63 | /*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, | 63 | /*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, |
64 | 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/ | 64 | 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/ |
65 | }; | 65 | }; |
66 | 66 | ||
67 | 67 | ||
@@ -111,38 +111,38 @@ Bijective EBCDIC (character set IBM-1047) to US-ASCII table: | |||
111 | This table is bijective - there are no ambigous or duplicate characters. | 111 | This table is bijective - there are no ambigous or duplicate characters. |
112 | */ | 112 | */ |
113 | const unsigned char os_toascii[256] = { | 113 | const unsigned char os_toascii[256] = { |
114 | 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */ | 114 | 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */ |
115 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ | 115 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ |
116 | 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */ | 116 | 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */ |
117 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ | 117 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ |
118 | 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */ | 118 | 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */ |
119 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */ | 119 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */ |
120 | 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */ | 120 | 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */ |
121 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */ | 121 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */ |
122 | 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */ | 122 | 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */ |
123 | 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */ | 123 | 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */ |
124 | 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */ | 124 | 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */ |
125 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */ | 125 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */ |
126 | 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */ | 126 | 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */ |
127 | 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */ | 127 | 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */ |
128 | 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */ | 128 | 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */ |
129 | 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */ | 129 | 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */ |
130 | 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */ | 130 | 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */ |
131 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */ | 131 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */ |
132 | 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */ | 132 | 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */ |
133 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */ | 133 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */ |
134 | 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */ | 134 | 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */ |
135 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */ | 135 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */ |
136 | 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */ | 136 | 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */ |
137 | 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */ | 137 | 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */ |
138 | 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */ | 138 | 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */ |
139 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */ | 139 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */ |
140 | 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */ | 140 | 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */ |
141 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */ | 141 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */ |
142 | 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */ | 142 | 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */ |
143 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */ | 143 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */ |
144 | 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */ | 144 | 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */ |
145 | 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */ | 145 | 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */ |
146 | }; | 146 | }; |
147 | 147 | ||
148 | 148 | ||
@@ -151,38 +151,38 @@ The US-ASCII to EBCDIC (character set IBM-1047) table: | |||
151 | This table is bijective (no ambiguous or duplicate characters) | 151 | This table is bijective (no ambiguous or duplicate characters) |
152 | */ | 152 | */ |
153 | const unsigned char os_toebcdic[256] = { | 153 | const unsigned char os_toebcdic[256] = { |
154 | 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */ | 154 | 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */ |
155 | 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ | 155 | 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ |
156 | 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */ | 156 | 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */ |
157 | 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ | 157 | 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ |
158 | 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */ | 158 | 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */ |
159 | 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */ | 159 | 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */ |
160 | 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */ | 160 | 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */ |
161 | 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */ | 161 | 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */ |
162 | 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */ | 162 | 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */ |
163 | 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */ | 163 | 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */ |
164 | 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */ | 164 | 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */ |
165 | 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */ | 165 | 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */ |
166 | 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */ | 166 | 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */ |
167 | 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */ | 167 | 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */ |
168 | 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */ | 168 | 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */ |
169 | 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */ | 169 | 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */ |
170 | 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */ | 170 | 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */ |
171 | 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */ | 171 | 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */ |
172 | 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */ | 172 | 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */ |
173 | 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */ | 173 | 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */ |
174 | 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */ | 174 | 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */ |
175 | 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */ | 175 | 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */ |
176 | 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */ | 176 | 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */ |
177 | 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */ | 177 | 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */ |
178 | 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */ | 178 | 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */ |
179 | 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */ | 179 | 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */ |
180 | 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */ | 180 | 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */ |
181 | 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */ | 181 | 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */ |
182 | 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */ | 182 | 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */ |
183 | 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */ | 183 | 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */ |
184 | 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */ | 184 | 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */ |
185 | 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */ | 185 | 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */ |
186 | }; | 186 | }; |
187 | #endif /*_OSD_POSIX*/ | 187 | #endif /*_OSD_POSIX*/ |
188 | 188 | ||
@@ -195,27 +195,27 @@ const unsigned char os_toebcdic[256] = { | |||
195 | void * | 195 | void * |
196 | ebcdic2ascii(void *dest, const void *srce, size_t count) | 196 | ebcdic2ascii(void *dest, const void *srce, size_t count) |
197 | { | 197 | { |
198 | unsigned char *udest = dest; | 198 | unsigned char *udest = dest; |
199 | const unsigned char *usrce = srce; | 199 | const unsigned char *usrce = srce; |
200 | 200 | ||
201 | while (count-- != 0) { | 201 | while (count-- != 0) { |
202 | *udest++ = os_toascii[*usrce++]; | 202 | *udest++ = os_toascii[*usrce++]; |
203 | } | 203 | } |
204 | 204 | ||
205 | return dest; | 205 | return dest; |
206 | } | 206 | } |
207 | 207 | ||
208 | void * | 208 | void * |
209 | ascii2ebcdic(void *dest, const void *srce, size_t count) | 209 | ascii2ebcdic(void *dest, const void *srce, size_t count) |
210 | { | 210 | { |
211 | unsigned char *udest = dest; | 211 | unsigned char *udest = dest; |
212 | const unsigned char *usrce = srce; | 212 | const unsigned char *usrce = srce; |
213 | 213 | ||
214 | while (count-- != 0) { | 214 | while (count-- != 0) { |
215 | *udest++ = os_toebcdic[*usrce++]; | 215 | *udest++ = os_toebcdic[*usrce++]; |
216 | } | 216 | } |
217 | 217 | ||
218 | return dest; | 218 | return dest; |
219 | } | 219 | } |
220 | 220 | ||
221 | #endif | 221 | #endif |
diff --git a/src/lib/libcrypto/ex_data.c b/src/lib/libcrypto/ex_data.c index e2bc8298d0..44bad59527 100644 --- a/src/lib/libcrypto/ex_data.c +++ b/src/lib/libcrypto/ex_data.c | |||
@@ -142,8 +142,7 @@ | |||
142 | #include <openssl/lhash.h> | 142 | #include <openssl/lhash.h> |
143 | 143 | ||
144 | /* What an "implementation of ex_data functionality" looks like */ | 144 | /* What an "implementation of ex_data functionality" looks like */ |
145 | struct st_CRYPTO_EX_DATA_IMPL | 145 | struct st_CRYPTO_EX_DATA_IMPL { |
146 | { | ||
147 | /*********************/ | 146 | /*********************/ |
148 | /* GLOBAL OPERATIONS */ | 147 | /* GLOBAL OPERATIONS */ |
149 | /* Return a new class index */ | 148 | /* Return a new class index */ |
@@ -154,79 +153,83 @@ struct st_CRYPTO_EX_DATA_IMPL | |||
154 | /* PER-CLASS OPERATIONS */ | 153 | /* PER-CLASS OPERATIONS */ |
155 | /* Get a new method index within a class */ | 154 | /* Get a new method index within a class */ |
156 | int (*cb_get_new_index)(int class_index, long argl, void *argp, | 155 | int (*cb_get_new_index)(int class_index, long argl, void *argp, |
157 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 156 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
158 | CRYPTO_EX_free *free_func); | 157 | CRYPTO_EX_free *free_func); |
159 | /* Initialise a new CRYPTO_EX_DATA of a given class */ | 158 | /* Initialise a new CRYPTO_EX_DATA of a given class */ |
160 | int (*cb_new_ex_data)(int class_index, void *obj, | 159 | int (*cb_new_ex_data)(int class_index, void *obj, |
161 | CRYPTO_EX_DATA *ad); | 160 | CRYPTO_EX_DATA *ad); |
162 | /* Duplicate a CRYPTO_EX_DATA of a given class onto a copy */ | 161 | /* Duplicate a CRYPTO_EX_DATA of a given class onto a copy */ |
163 | int (*cb_dup_ex_data)(int class_index, CRYPTO_EX_DATA *to, | 162 | int (*cb_dup_ex_data)(int class_index, CRYPTO_EX_DATA *to, |
164 | CRYPTO_EX_DATA *from); | 163 | CRYPTO_EX_DATA *from); |
165 | /* Cleanup a CRYPTO_EX_DATA of a given class */ | 164 | /* Cleanup a CRYPTO_EX_DATA of a given class */ |
166 | void (*cb_free_ex_data)(int class_index, void *obj, | 165 | void (*cb_free_ex_data)(int class_index, void *obj, |
167 | CRYPTO_EX_DATA *ad); | 166 | CRYPTO_EX_DATA *ad); |
168 | }; | 167 | }; |
169 | 168 | ||
170 | /* The implementation we use at run-time */ | 169 | /* The implementation we use at run-time */ |
171 | static const CRYPTO_EX_DATA_IMPL *impl = NULL; | 170 | static const CRYPTO_EX_DATA_IMPL *impl = NULL; |
172 | 171 | ||
173 | /* To call "impl" functions, use this macro rather than referring to 'impl' directly, eg. | 172 | /* To call "impl" functions, use this macro rather than referring to 'impl' directly, eg. |
174 | * EX_IMPL(get_new_index)(...); */ | 173 | * EX_IMPL(get_new_index)(...); |
174 | */ | ||
175 | #define EX_IMPL(a) impl->cb_##a | 175 | #define EX_IMPL(a) impl->cb_##a |
176 | 176 | ||
177 | /* Predeclare the "default" ex_data implementation */ | 177 | /* Predeclare the "default" ex_data implementation */ |
178 | static int int_new_class(void); | 178 | static int int_new_class(void); |
179 | static void int_cleanup(void); | 179 | static void int_cleanup(void); |
180 | static int int_get_new_index(int class_index, long argl, void *argp, | 180 | static int int_get_new_index(int class_index, long argl, void *argp, |
181 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 181 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
182 | CRYPTO_EX_free *free_func); | 182 | CRYPTO_EX_free *free_func); |
183 | static int int_new_ex_data(int class_index, void *obj, | 183 | static int int_new_ex_data(int class_index, void *obj, |
184 | CRYPTO_EX_DATA *ad); | 184 | CRYPTO_EX_DATA *ad); |
185 | static int int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 185 | static int int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, |
186 | CRYPTO_EX_DATA *from); | 186 | CRYPTO_EX_DATA *from); |
187 | static void int_free_ex_data(int class_index, void *obj, | 187 | static void int_free_ex_data(int class_index, void *obj, |
188 | CRYPTO_EX_DATA *ad); | 188 | CRYPTO_EX_DATA *ad); |
189 | static CRYPTO_EX_DATA_IMPL impl_default = | 189 | |
190 | { | 190 | static CRYPTO_EX_DATA_IMPL impl_default = { |
191 | int_new_class, | 191 | int_new_class, |
192 | int_cleanup, | 192 | int_cleanup, |
193 | int_get_new_index, | 193 | int_get_new_index, |
194 | int_new_ex_data, | 194 | int_new_ex_data, |
195 | int_dup_ex_data, | 195 | int_dup_ex_data, |
196 | int_free_ex_data | 196 | int_free_ex_data |
197 | }; | 197 | }; |
198 | 198 | ||
199 | /* Internal function that checks whether "impl" is set and if not, sets it to | 199 | /* Internal function that checks whether "impl" is set and if not, sets it to |
200 | * the default. */ | 200 | * the default. */ |
201 | static void impl_check(void) | 201 | static void |
202 | { | 202 | impl_check(void) |
203 | { | ||
203 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 204 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
204 | if(!impl) | 205 | if (!impl) |
205 | impl = &impl_default; | 206 | impl = &impl_default; |
206 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 207 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
207 | } | 208 | } |
208 | /* A macro wrapper for impl_check that first uses a non-locked test before | 209 | /* A macro wrapper for impl_check that first uses a non-locked test before |
209 | * invoking the function (which checks again inside a lock). */ | 210 | * invoking the function (which checks again inside a lock). */ |
210 | #define IMPL_CHECK if(!impl) impl_check(); | 211 | #define IMPL_CHECK if(!impl) impl_check(); |
211 | 212 | ||
212 | /* API functions to get/set the "ex_data" implementation */ | 213 | /* API functions to get/set the "ex_data" implementation */ |
213 | const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void) | 214 | const CRYPTO_EX_DATA_IMPL |
214 | { | 215 | *CRYPTO_get_ex_data_implementation(void) |
216 | { | ||
215 | IMPL_CHECK | 217 | IMPL_CHECK |
216 | return impl; | 218 | return impl; |
217 | } | 219 | } |
218 | int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i) | 220 | |
219 | { | 221 | int |
222 | CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i) | ||
223 | { | ||
220 | int toret = 0; | 224 | int toret = 0; |
221 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 225 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
222 | if(!impl) | 226 | if (!impl) { |
223 | { | ||
224 | impl = i; | 227 | impl = i; |
225 | toret = 1; | 228 | toret = 1; |
226 | } | 229 | } |
227 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 230 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
228 | return toret; | 231 | return toret; |
229 | } | 232 | } |
230 | 233 | ||
231 | /****************************************************************************/ | 234 | /****************************************************************************/ |
232 | /* Interal (default) implementation of "ex_data" support. API functions are | 235 | /* Interal (default) implementation of "ex_data" support. API functions are |
@@ -249,288 +252,283 @@ DECLARE_LHASH_OF(EX_CLASS_ITEM); | |||
249 | static LHASH_OF(EX_CLASS_ITEM) *ex_data = NULL; | 252 | static LHASH_OF(EX_CLASS_ITEM) *ex_data = NULL; |
250 | 253 | ||
251 | /* The callbacks required in the "ex_data" hash table */ | 254 | /* The callbacks required in the "ex_data" hash table */ |
252 | static unsigned long ex_class_item_hash(const EX_CLASS_ITEM *a) | 255 | static unsigned long |
253 | { | 256 | ex_class_item_hash(const EX_CLASS_ITEM *a) |
257 | { | ||
254 | return a->class_index; | 258 | return a->class_index; |
255 | } | 259 | } |
260 | |||
256 | static IMPLEMENT_LHASH_HASH_FN(ex_class_item, EX_CLASS_ITEM) | 261 | static IMPLEMENT_LHASH_HASH_FN(ex_class_item, EX_CLASS_ITEM) |
257 | 262 | ||
258 | static int ex_class_item_cmp(const EX_CLASS_ITEM *a, const EX_CLASS_ITEM *b) | 263 | static int |
259 | { | 264 | ex_class_item_cmp(const EX_CLASS_ITEM *a, const EX_CLASS_ITEM *b) |
265 | { | ||
260 | return a->class_index - b->class_index; | 266 | return a->class_index - b->class_index; |
261 | } | 267 | } |
268 | |||
262 | static IMPLEMENT_LHASH_COMP_FN(ex_class_item, EX_CLASS_ITEM) | 269 | static IMPLEMENT_LHASH_COMP_FN(ex_class_item, EX_CLASS_ITEM) |
263 | 270 | ||
264 | /* Internal functions used by the "impl_default" implementation to access the | 271 | /* Internal functions used by the "impl_default" implementation to access the |
265 | * state */ | 272 | * state */ |
266 | 273 | ||
267 | static int ex_data_check(void) | 274 | static int |
268 | { | 275 | ex_data_check(void) |
276 | { | ||
269 | int toret = 1; | 277 | int toret = 1; |
270 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 278 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
271 | if(!ex_data | 279 | if (!ex_data |
272 | && (ex_data = lh_EX_CLASS_ITEM_new()) == NULL) | 280 | && (ex_data = lh_EX_CLASS_ITEM_new()) == NULL) |
273 | toret = 0; | 281 | toret = 0; |
274 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 282 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
275 | return toret; | 283 | return toret; |
276 | } | 284 | } |
277 | /* This macros helps reduce the locking from repeated checks because the | 285 | /* This macros helps reduce the locking from repeated checks because the |
278 | * ex_data_check() function checks ex_data again inside a lock. */ | 286 | * ex_data_check() function checks ex_data again inside a lock. */ |
279 | #define EX_DATA_CHECK(iffail) if(!ex_data && !ex_data_check()) {iffail} | 287 | #define EX_DATA_CHECK(iffail) if(!ex_data && !ex_data_check()) {iffail} |
280 | 288 | ||
281 | /* This "inner" callback is used by the callback function that follows it */ | 289 | /* This "inner" callback is used by the callback function that follows it */ |
282 | static void def_cleanup_util_cb(CRYPTO_EX_DATA_FUNCS *funcs) | 290 | static void |
283 | { | 291 | def_cleanup_util_cb(CRYPTO_EX_DATA_FUNCS *funcs) |
292 | { | ||
284 | OPENSSL_free(funcs); | 293 | OPENSSL_free(funcs); |
285 | } | 294 | } |
286 | 295 | ||
287 | /* This callback is used in lh_doall to destroy all EX_CLASS_ITEM values from | 296 | /* This callback is used in lh_doall to destroy all EX_CLASS_ITEM values from |
288 | * "ex_data" prior to the ex_data hash table being itself destroyed. Doesn't do | 297 | * "ex_data" prior to the ex_data hash table being itself destroyed. Doesn't do |
289 | * any locking. */ | 298 | * any locking. */ |
290 | static void def_cleanup_cb(void *a_void) | 299 | static void |
291 | { | 300 | def_cleanup_cb(void *a_void) |
301 | { | ||
292 | EX_CLASS_ITEM *item = (EX_CLASS_ITEM *)a_void; | 302 | EX_CLASS_ITEM *item = (EX_CLASS_ITEM *)a_void; |
293 | sk_CRYPTO_EX_DATA_FUNCS_pop_free(item->meth, def_cleanup_util_cb); | 303 | sk_CRYPTO_EX_DATA_FUNCS_pop_free(item->meth, def_cleanup_util_cb); |
294 | OPENSSL_free(item); | 304 | OPENSSL_free(item); |
295 | } | 305 | } |
296 | 306 | ||
297 | /* Return the EX_CLASS_ITEM from the "ex_data" hash table that corresponds to a | 307 | /* Return the EX_CLASS_ITEM from the "ex_data" hash table that corresponds to a |
298 | * given class. Handles locking. */ | 308 | * given class. Handles locking. */ |
299 | static EX_CLASS_ITEM *def_get_class(int class_index) | 309 | static EX_CLASS_ITEM |
300 | { | 310 | *def_get_class(int class_index) |
311 | { | ||
301 | EX_CLASS_ITEM d, *p, *gen; | 312 | EX_CLASS_ITEM d, *p, *gen; |
302 | EX_DATA_CHECK(return NULL;) | 313 | EX_DATA_CHECK(return NULL;) |
303 | d.class_index = class_index; | 314 | d.class_index = class_index; |
304 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 315 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
305 | p = lh_EX_CLASS_ITEM_retrieve(ex_data, &d); | 316 | p = lh_EX_CLASS_ITEM_retrieve(ex_data, &d); |
306 | if(!p) | 317 | if (!p) { |
307 | { | ||
308 | gen = OPENSSL_malloc(sizeof(EX_CLASS_ITEM)); | 318 | gen = OPENSSL_malloc(sizeof(EX_CLASS_ITEM)); |
309 | if(gen) | 319 | if (gen) { |
310 | { | ||
311 | gen->class_index = class_index; | 320 | gen->class_index = class_index; |
312 | gen->meth_num = 0; | 321 | gen->meth_num = 0; |
313 | gen->meth = sk_CRYPTO_EX_DATA_FUNCS_new_null(); | 322 | gen->meth = sk_CRYPTO_EX_DATA_FUNCS_new_null(); |
314 | if(!gen->meth) | 323 | if (!gen->meth) |
315 | OPENSSL_free(gen); | 324 | OPENSSL_free(gen); |
316 | else | 325 | else { |
317 | { | ||
318 | /* Because we're inside the ex_data lock, the | 326 | /* Because we're inside the ex_data lock, the |
319 | * return value from the insert will be NULL */ | 327 | * return value from the insert will be NULL */ |
320 | (void)lh_EX_CLASS_ITEM_insert(ex_data, gen); | 328 | (void)lh_EX_CLASS_ITEM_insert(ex_data, gen); |
321 | p = gen; | 329 | p = gen; |
322 | } | ||
323 | } | 330 | } |
324 | } | 331 | } |
332 | } | ||
325 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 333 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
326 | if(!p) | 334 | if (!p) |
327 | CRYPTOerr(CRYPTO_F_DEF_GET_CLASS,ERR_R_MALLOC_FAILURE); | 335 | CRYPTOerr(CRYPTO_F_DEF_GET_CLASS, ERR_R_MALLOC_FAILURE); |
328 | return p; | 336 | return p; |
329 | } | 337 | } |
330 | 338 | ||
331 | /* Add a new method to the given EX_CLASS_ITEM and return the corresponding | 339 | /* Add a new method to the given EX_CLASS_ITEM and return the corresponding |
332 | * index (or -1 for error). Handles locking. */ | 340 | * index (or -1 for error). Handles locking. */ |
333 | static int def_add_index(EX_CLASS_ITEM *item, long argl, void *argp, | 341 | static int |
334 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 342 | def_add_index(EX_CLASS_ITEM *item, long argl, void *argp, |
335 | CRYPTO_EX_free *free_func) | 343 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
336 | { | 344 | { |
337 | int toret = -1; | 345 | int toret = -1; |
338 | CRYPTO_EX_DATA_FUNCS *a = (CRYPTO_EX_DATA_FUNCS *)OPENSSL_malloc( | 346 | CRYPTO_EX_DATA_FUNCS *a = (CRYPTO_EX_DATA_FUNCS *)OPENSSL_malloc( |
339 | sizeof(CRYPTO_EX_DATA_FUNCS)); | 347 | sizeof(CRYPTO_EX_DATA_FUNCS)); |
340 | if(!a) | 348 | if (!a) { |
341 | { | 349 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX, ERR_R_MALLOC_FAILURE); |
342 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX,ERR_R_MALLOC_FAILURE); | ||
343 | return -1; | 350 | return -1; |
344 | } | 351 | } |
345 | a->argl=argl; | 352 | a->argl = argl; |
346 | a->argp=argp; | 353 | a->argp = argp; |
347 | a->new_func=new_func; | 354 | a->new_func = new_func; |
348 | a->dup_func=dup_func; | 355 | a->dup_func = dup_func; |
349 | a->free_func=free_func; | 356 | a->free_func = free_func; |
350 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 357 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
351 | while (sk_CRYPTO_EX_DATA_FUNCS_num(item->meth) <= item->meth_num) | 358 | while (sk_CRYPTO_EX_DATA_FUNCS_num(item->meth) <= item->meth_num) { |
352 | { | 359 | if (!sk_CRYPTO_EX_DATA_FUNCS_push(item->meth, NULL)) { |
353 | if (!sk_CRYPTO_EX_DATA_FUNCS_push(item->meth, NULL)) | 360 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX, ERR_R_MALLOC_FAILURE); |
354 | { | ||
355 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX,ERR_R_MALLOC_FAILURE); | ||
356 | OPENSSL_free(a); | 361 | OPENSSL_free(a); |
357 | goto err; | 362 | goto err; |
358 | } | ||
359 | } | 363 | } |
364 | } | ||
360 | toret = item->meth_num++; | 365 | toret = item->meth_num++; |
361 | (void)sk_CRYPTO_EX_DATA_FUNCS_set(item->meth, toret, a); | 366 | (void)sk_CRYPTO_EX_DATA_FUNCS_set(item->meth, toret, a); |
362 | err: | 367 | err: |
363 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 368 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
364 | return toret; | 369 | return toret; |
365 | } | 370 | } |
366 | 371 | ||
367 | /**************************************************************/ | 372 | /**************************************************************/ |
368 | /* The functions in the default CRYPTO_EX_DATA_IMPL structure */ | 373 | /* The functions in the default CRYPTO_EX_DATA_IMPL structure */ |
369 | 374 | ||
370 | static int int_new_class(void) | 375 | static int |
371 | { | 376 | int_new_class(void) |
377 | { | ||
372 | int toret; | 378 | int toret; |
373 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 379 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
374 | toret = ex_class++; | 380 | toret = ex_class++; |
375 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 381 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
376 | return toret; | 382 | return toret; |
377 | } | 383 | } |
378 | 384 | ||
379 | static void int_cleanup(void) | 385 | static void |
380 | { | 386 | int_cleanup(void) |
387 | { | ||
381 | EX_DATA_CHECK(return;) | 388 | EX_DATA_CHECK(return;) |
382 | lh_EX_CLASS_ITEM_doall(ex_data, def_cleanup_cb); | 389 | lh_EX_CLASS_ITEM_doall(ex_data, def_cleanup_cb); |
383 | lh_EX_CLASS_ITEM_free(ex_data); | 390 | lh_EX_CLASS_ITEM_free(ex_data); |
384 | ex_data = NULL; | 391 | ex_data = NULL; |
385 | impl = NULL; | 392 | impl = NULL; |
386 | } | 393 | } |
387 | 394 | ||
388 | static int int_get_new_index(int class_index, long argl, void *argp, | 395 | static int |
389 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 396 | int_get_new_index(int class_index, long argl, void *argp, |
390 | CRYPTO_EX_free *free_func) | 397 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
391 | { | 398 | CRYPTO_EX_free *free_func) |
399 | { | ||
392 | EX_CLASS_ITEM *item = def_get_class(class_index); | 400 | EX_CLASS_ITEM *item = def_get_class(class_index); |
393 | if(!item) | 401 | if (!item) |
394 | return -1; | 402 | return -1; |
395 | return def_add_index(item, argl, argp, new_func, dup_func, free_func); | 403 | return def_add_index(item, argl, argp, new_func, dup_func, free_func); |
396 | } | 404 | } |
397 | 405 | ||
398 | /* Thread-safe by copying a class's array of "CRYPTO_EX_DATA_FUNCS" entries in | 406 | /* Thread-safe by copying a class's array of "CRYPTO_EX_DATA_FUNCS" entries in |
399 | * the lock, then using them outside the lock. NB: Thread-safety only applies to | 407 | * the lock, then using them outside the lock. NB: Thread-safety only applies to |
400 | * the global "ex_data" state (ie. class definitions), not thread-safe on 'ad' | 408 | * the global "ex_data" state (ie. class definitions), not thread-safe on 'ad' |
401 | * itself. */ | 409 | * itself. */ |
402 | static int int_new_ex_data(int class_index, void *obj, | 410 | static int |
403 | CRYPTO_EX_DATA *ad) | 411 | int_new_ex_data(int class_index, void *obj, |
404 | { | 412 | CRYPTO_EX_DATA *ad) |
405 | int mx,i; | 413 | { |
414 | int mx, i; | ||
406 | void *ptr; | 415 | void *ptr; |
407 | CRYPTO_EX_DATA_FUNCS **storage = NULL; | 416 | CRYPTO_EX_DATA_FUNCS **storage = NULL; |
408 | EX_CLASS_ITEM *item = def_get_class(class_index); | 417 | EX_CLASS_ITEM *item = def_get_class(class_index); |
409 | if(!item) | 418 | if (!item) |
410 | /* error is already set */ | 419 | /* error is already set */ |
411 | return 0; | 420 | return 0; |
412 | ad->sk = NULL; | 421 | ad->sk = NULL; |
413 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); | 422 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); |
414 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); | 423 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); |
415 | if(mx > 0) | 424 | if (mx > 0) { |
416 | { | ||
417 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); | 425 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); |
418 | if(!storage) | 426 | if (!storage) |
419 | goto skip; | 427 | goto skip; |
420 | for(i = 0; i < mx; i++) | 428 | for (i = 0; i < mx; i++) |
421 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth,i); | 429 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth, i); |
422 | } | 430 | } |
423 | skip: | 431 | skip: |
424 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); | 432 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); |
425 | if((mx > 0) && !storage) | 433 | if ((mx > 0) && !storage) { |
426 | { | 434 | CRYPTOerr(CRYPTO_F_INT_NEW_EX_DATA, ERR_R_MALLOC_FAILURE); |
427 | CRYPTOerr(CRYPTO_F_INT_NEW_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
428 | return 0; | 435 | return 0; |
429 | } | 436 | } |
430 | for(i = 0; i < mx; i++) | 437 | for (i = 0; i < mx; i++) { |
431 | { | 438 | if (storage[i] && storage[i]->new_func) { |
432 | if(storage[i] && storage[i]->new_func) | ||
433 | { | ||
434 | ptr = CRYPTO_get_ex_data(ad, i); | 439 | ptr = CRYPTO_get_ex_data(ad, i); |
435 | storage[i]->new_func(obj,ptr,ad,i, | 440 | storage[i]->new_func(obj, ptr, ad, i, |
436 | storage[i]->argl,storage[i]->argp); | 441 | storage[i]->argl, storage[i]->argp); |
437 | } | ||
438 | } | 442 | } |
439 | if(storage) | 443 | } |
444 | if (storage) | ||
440 | OPENSSL_free(storage); | 445 | OPENSSL_free(storage); |
441 | return 1; | 446 | return 1; |
442 | } | 447 | } |
443 | 448 | ||
444 | /* Same thread-safety notes as for "int_new_ex_data" */ | 449 | /* Same thread-safety notes as for "int_new_ex_data" */ |
445 | static int int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 450 | static int |
446 | CRYPTO_EX_DATA *from) | 451 | int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, |
447 | { | 452 | CRYPTO_EX_DATA *from) |
453 | { | ||
448 | int mx, j, i; | 454 | int mx, j, i; |
449 | char *ptr; | 455 | char *ptr; |
450 | CRYPTO_EX_DATA_FUNCS **storage = NULL; | 456 | CRYPTO_EX_DATA_FUNCS **storage = NULL; |
451 | EX_CLASS_ITEM *item; | 457 | EX_CLASS_ITEM *item; |
452 | if(!from->sk) | 458 | if (!from->sk) |
453 | /* 'to' should be "blank" which *is* just like 'from' */ | 459 | /* 'to' should be "blank" which *is* just like 'from' */ |
454 | return 1; | 460 | return 1; |
455 | if((item = def_get_class(class_index)) == NULL) | 461 | if ((item = def_get_class(class_index)) == NULL) |
456 | return 0; | 462 | return 0; |
457 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); | 463 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); |
458 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); | 464 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); |
459 | j = sk_void_num(from->sk); | 465 | j = sk_void_num(from->sk); |
460 | if(j < mx) | 466 | if (j < mx) |
461 | mx = j; | 467 | mx = j; |
462 | if(mx > 0) | 468 | if (mx > 0) { |
463 | { | ||
464 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); | 469 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); |
465 | if(!storage) | 470 | if (!storage) |
466 | goto skip; | 471 | goto skip; |
467 | for(i = 0; i < mx; i++) | 472 | for (i = 0; i < mx; i++) |
468 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth,i); | 473 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth, i); |
469 | } | 474 | } |
470 | skip: | 475 | skip: |
471 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); | 476 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); |
472 | if((mx > 0) && !storage) | 477 | if ((mx > 0) && !storage) { |
473 | { | 478 | CRYPTOerr(CRYPTO_F_INT_DUP_EX_DATA, ERR_R_MALLOC_FAILURE); |
474 | CRYPTOerr(CRYPTO_F_INT_DUP_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
475 | return 0; | 479 | return 0; |
476 | } | 480 | } |
477 | for(i = 0; i < mx; i++) | 481 | for (i = 0; i < mx; i++) { |
478 | { | ||
479 | ptr = CRYPTO_get_ex_data(from, i); | 482 | ptr = CRYPTO_get_ex_data(from, i); |
480 | if(storage[i] && storage[i]->dup_func) | 483 | if (storage[i] && storage[i]->dup_func) |
481 | storage[i]->dup_func(to,from,&ptr,i, | 484 | storage[i]->dup_func(to, from, &ptr, i, |
482 | storage[i]->argl,storage[i]->argp); | 485 | storage[i]->argl, storage[i]->argp); |
483 | CRYPTO_set_ex_data(to,i,ptr); | 486 | CRYPTO_set_ex_data(to, i, ptr); |
484 | } | 487 | } |
485 | if(storage) | 488 | if (storage) |
486 | OPENSSL_free(storage); | 489 | OPENSSL_free(storage); |
487 | return 1; | 490 | return 1; |
488 | } | 491 | } |
489 | 492 | ||
490 | /* Same thread-safety notes as for "int_new_ex_data" */ | 493 | /* Same thread-safety notes as for "int_new_ex_data" */ |
491 | static void int_free_ex_data(int class_index, void *obj, | 494 | static void |
492 | CRYPTO_EX_DATA *ad) | 495 | int_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) |
493 | { | 496 | { |
494 | int mx,i; | 497 | int mx, i; |
495 | EX_CLASS_ITEM *item; | 498 | EX_CLASS_ITEM *item; |
496 | void *ptr; | 499 | void *ptr; |
497 | CRYPTO_EX_DATA_FUNCS **storage = NULL; | 500 | CRYPTO_EX_DATA_FUNCS **storage = NULL; |
498 | if((item = def_get_class(class_index)) == NULL) | 501 | if ((item = def_get_class(class_index)) == NULL) |
499 | return; | 502 | return; |
500 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); | 503 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); |
501 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); | 504 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); |
502 | if(mx > 0) | 505 | if (mx > 0) { |
503 | { | ||
504 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); | 506 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); |
505 | if(!storage) | 507 | if (!storage) |
506 | goto skip; | 508 | goto skip; |
507 | for(i = 0; i < mx; i++) | 509 | for (i = 0; i < mx; i++) |
508 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth,i); | 510 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth, i); |
509 | } | 511 | } |
510 | skip: | 512 | skip: |
511 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); | 513 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); |
512 | if((mx > 0) && !storage) | 514 | if ((mx > 0) && !storage) { |
513 | { | 515 | CRYPTOerr(CRYPTO_F_INT_FREE_EX_DATA, ERR_R_MALLOC_FAILURE); |
514 | CRYPTOerr(CRYPTO_F_INT_FREE_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
515 | return; | 516 | return; |
517 | } | ||
518 | for (i = 0; i < mx; i++) { | ||
519 | if (storage[i] && storage[i]->free_func) { | ||
520 | ptr = CRYPTO_get_ex_data(ad, i); | ||
521 | storage[i]->free_func(obj, ptr, ad, i, | ||
522 | storage[i]->argl, storage[i]->argp); | ||
516 | } | 523 | } |
517 | for(i = 0; i < mx; i++) | 524 | } |
518 | { | 525 | if (storage) |
519 | if(storage[i] && storage[i]->free_func) | ||
520 | { | ||
521 | ptr = CRYPTO_get_ex_data(ad,i); | ||
522 | storage[i]->free_func(obj,ptr,ad,i, | ||
523 | storage[i]->argl,storage[i]->argp); | ||
524 | } | ||
525 | } | ||
526 | if(storage) | ||
527 | OPENSSL_free(storage); | 526 | OPENSSL_free(storage); |
528 | if(ad->sk) | 527 | if (ad->sk) { |
529 | { | ||
530 | sk_void_free(ad->sk); | 528 | sk_void_free(ad->sk); |
531 | ad->sk=NULL; | 529 | ad->sk = NULL; |
532 | } | ||
533 | } | 530 | } |
531 | } | ||
534 | 532 | ||
535 | /********************************************************************/ | 533 | /********************************************************************/ |
536 | /* API functions that defer all "state" operations to the "ex_data" | 534 | /* API functions that defer all "state" operations to the "ex_data" |
@@ -538,99 +536,101 @@ skip: | |||
538 | 536 | ||
539 | /* Obtain an index for a new class (not the same as getting a new index within | 537 | /* Obtain an index for a new class (not the same as getting a new index within |
540 | * an existing class - this is actually getting a new *class*) */ | 538 | * an existing class - this is actually getting a new *class*) */ |
541 | int CRYPTO_ex_data_new_class(void) | 539 | int |
542 | { | 540 | CRYPTO_ex_data_new_class(void) |
541 | { | ||
543 | IMPL_CHECK | 542 | IMPL_CHECK |
544 | return EX_IMPL(new_class)(); | 543 | return EX_IMPL(new_class)(); |
545 | } | 544 | } |
546 | 545 | ||
547 | /* Release all "ex_data" state to prevent memory leaks. This can't be made | 546 | /* Release all "ex_data" state to prevent memory leaks. This can't be made |
548 | * thread-safe without overhauling a lot of stuff, and shouldn't really be | 547 | * thread-safe without overhauling a lot of stuff, and shouldn't really be |
549 | * called under potential race-conditions anyway (it's for program shutdown | 548 | * called under potential race-conditions anyway (it's for program shutdown |
550 | * after all). */ | 549 | * after all). */ |
551 | void CRYPTO_cleanup_all_ex_data(void) | 550 | void |
552 | { | 551 | CRYPTO_cleanup_all_ex_data(void) |
552 | { | ||
553 | IMPL_CHECK | 553 | IMPL_CHECK |
554 | EX_IMPL(cleanup)(); | 554 | EX_IMPL(cleanup)(); |
555 | } | 555 | } |
556 | 556 | ||
557 | /* Inside an existing class, get/register a new index. */ | 557 | /* Inside an existing class, get/register a new index. */ |
558 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, | 558 | int |
559 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 559 | CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, |
560 | CRYPTO_EX_free *free_func) | 560 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
561 | { | 561 | { |
562 | int ret = -1; | 562 | int ret = -1; |
563 | 563 | ||
564 | IMPL_CHECK | 564 | IMPL_CHECK |
565 | ret = EX_IMPL(get_new_index)(class_index, | 565 | ret = EX_IMPL(get_new_index)(class_index, |
566 | argl, argp, new_func, dup_func, free_func); | 566 | argl, argp, new_func, dup_func, free_func); |
567 | return ret; | 567 | return ret; |
568 | } | 568 | } |
569 | 569 | ||
570 | /* Initialise a new CRYPTO_EX_DATA for use in a particular class - including | 570 | /* Initialise a new CRYPTO_EX_DATA for use in a particular class - including |
571 | * calling new() callbacks for each index in the class used by this variable */ | 571 | * calling new() callbacks for each index in the class used by this variable */ |
572 | int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) | 572 | int |
573 | { | 573 | CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) |
574 | { | ||
574 | IMPL_CHECK | 575 | IMPL_CHECK |
575 | return EX_IMPL(new_ex_data)(class_index, obj, ad); | 576 | return EX_IMPL(new_ex_data)(class_index, obj, ad); |
576 | } | 577 | } |
577 | 578 | ||
578 | /* Duplicate a CRYPTO_EX_DATA variable - including calling dup() callbacks for | 579 | /* Duplicate a CRYPTO_EX_DATA variable - including calling dup() callbacks for |
579 | * each index in the class used by this variable */ | 580 | * each index in the class used by this variable */ |
580 | int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 581 | int |
581 | CRYPTO_EX_DATA *from) | 582 | CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from) |
582 | { | 583 | { |
583 | IMPL_CHECK | 584 | IMPL_CHECK |
584 | return EX_IMPL(dup_ex_data)(class_index, to, from); | 585 | return EX_IMPL(dup_ex_data)(class_index, to, from); |
585 | } | 586 | } |
586 | 587 | ||
587 | /* Cleanup a CRYPTO_EX_DATA variable - including calling free() callbacks for | 588 | /* Cleanup a CRYPTO_EX_DATA variable - including calling free() callbacks for |
588 | * each index in the class used by this variable */ | 589 | * each index in the class used by this variable */ |
589 | void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) | 590 | void |
590 | { | 591 | CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) |
592 | { | ||
591 | IMPL_CHECK | 593 | IMPL_CHECK |
592 | EX_IMPL(free_ex_data)(class_index, obj, ad); | 594 | EX_IMPL(free_ex_data)(class_index, obj, ad); |
593 | } | 595 | } |
594 | 596 | ||
595 | /* For a given CRYPTO_EX_DATA variable, set the value corresponding to a | 597 | /* For a given CRYPTO_EX_DATA variable, set the value corresponding to a |
596 | * particular index in the class used by this variable */ | 598 | * particular index in the class used by this variable */ |
597 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val) | 599 | int |
598 | { | 600 | CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val) |
601 | { | ||
599 | int i; | 602 | int i; |
600 | 603 | ||
601 | if (ad->sk == NULL) | 604 | if (ad->sk == NULL) { |
602 | { | 605 | if ((ad->sk = sk_void_new_null()) == NULL) { |
603 | if ((ad->sk=sk_void_new_null()) == NULL) | 606 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA, ERR_R_MALLOC_FAILURE); |
604 | { | 607 | return (0); |
605 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
606 | return(0); | ||
607 | } | ||
608 | } | 608 | } |
609 | i=sk_void_num(ad->sk); | 609 | } |
610 | 610 | i = sk_void_num(ad->sk); | |
611 | while (i <= idx) | 611 | |
612 | { | 612 | while (i <= idx) { |
613 | if (!sk_void_push(ad->sk,NULL)) | 613 | if (!sk_void_push(ad->sk, NULL)) { |
614 | { | 614 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA, ERR_R_MALLOC_FAILURE); |
615 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA,ERR_R_MALLOC_FAILURE); | 615 | return (0); |
616 | return(0); | ||
617 | } | ||
618 | i++; | ||
619 | } | 616 | } |
620 | sk_void_set(ad->sk,idx,val); | 617 | i++; |
621 | return(1); | ||
622 | } | 618 | } |
619 | sk_void_set(ad->sk, idx, val); | ||
620 | return (1); | ||
621 | } | ||
623 | 622 | ||
624 | /* For a given CRYPTO_EX_DATA_ variable, get the value corresponding to a | 623 | /* For a given CRYPTO_EX_DATA_ variable, get the value corresponding to a |
625 | * particular index in the class used by this variable */ | 624 | * particular index in the class used by this variable */ |
626 | void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx) | 625 | void |
627 | { | 626 | *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx) |
627 | { | ||
628 | if (ad->sk == NULL) | 628 | if (ad->sk == NULL) |
629 | return(0); | 629 | return (0); |
630 | else if (idx >= sk_void_num(ad->sk)) | 630 | else if (idx >= sk_void_num(ad->sk)) |
631 | return(0); | 631 | return (0); |
632 | else | 632 | else |
633 | return(sk_void_value(ad->sk,idx)); | 633 | return (sk_void_value(ad->sk, idx)); |
634 | } | 634 | } |
635 | 635 | ||
636 | IMPLEMENT_STACK_OF(CRYPTO_EX_DATA_FUNCS) | 636 | IMPLEMENT_STACK_OF(CRYPTO_EX_DATA_FUNCS) |
diff --git a/src/lib/libcrypto/fips_ers.c b/src/lib/libcrypto/fips_ers.c index 09f11748f6..1788ed2884 100644 --- a/src/lib/libcrypto/fips_ers.c +++ b/src/lib/libcrypto/fips_ers.c | |||
@@ -3,5 +3,5 @@ | |||
3 | #ifdef OPENSSL_FIPS | 3 | #ifdef OPENSSL_FIPS |
4 | # include "fips_err.h" | 4 | # include "fips_err.h" |
5 | #else | 5 | #else |
6 | static void *dummy=&dummy; | 6 | static void *dummy = &dummy; |
7 | #endif | 7 | #endif |
diff --git a/src/lib/libcrypto/md32_common.h b/src/lib/libcrypto/md32_common.h index bb7381952a..bfb610e802 100644 --- a/src/lib/libcrypto/md32_common.h +++ b/src/lib/libcrypto/md32_common.h | |||
@@ -148,7 +148,7 @@ | |||
148 | # if defined(__POWERPC__) | 148 | # if defined(__POWERPC__) |
149 | # define ROTATE(a,n) __rlwinm(a,n,0,31) | 149 | # define ROTATE(a,n) __rlwinm(a,n,0,31) |
150 | # elif defined(__MC68K__) | 150 | # elif defined(__MC68K__) |
151 | /* Motorola specific tweak. <appro@fy.chalmers.se> */ | 151 | /* Motorola specific tweak. <appro@fy.chalmers.se> */ |
152 | # define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) ) | 152 | # define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) ) |
153 | # else | 153 | # else |
154 | # define ROTATE(a,n) __rol(a,n) | 154 | # define ROTATE(a,n) __rol(a,n) |
@@ -252,7 +252,7 @@ | |||
252 | #endif | 252 | #endif |
253 | #if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) | 253 | #if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) |
254 | # ifndef B_ENDIAN | 254 | # ifndef B_ENDIAN |
255 | /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */ | 255 | /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */ |
256 | # define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l) | 256 | # define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l) |
257 | # define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l) | 257 | # define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l) |
258 | # endif | 258 | # endif |
@@ -279,108 +279,103 @@ | |||
279 | * Time for some action:-) | 279 | * Time for some action:-) |
280 | */ | 280 | */ |
281 | 281 | ||
282 | int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len) | 282 | int |
283 | { | 283 | HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) |
284 | const unsigned char *data=data_; | 284 | { |
285 | const unsigned char *data = data_; | ||
285 | unsigned char *p; | 286 | unsigned char *p; |
286 | HASH_LONG l; | 287 | HASH_LONG l; |
287 | size_t n; | 288 | size_t n; |
288 | 289 | ||
289 | if (len==0) return 1; | 290 | if (len == 0) |
291 | return 1; | ||
290 | 292 | ||
291 | l=(c->Nl+(((HASH_LONG)len)<<3))&0xffffffffUL; | 293 | l = (c->Nl + (((HASH_LONG)len) << 3))&0xffffffffUL; |
292 | /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to | 294 | /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to |
293 | * Wei Dai <weidai@eskimo.com> for pointing it out. */ | 295 | * Wei Dai <weidai@eskimo.com> for pointing it out. */ |
294 | if (l < c->Nl) /* overflow */ | 296 | if (l < c->Nl) /* overflow */ |
295 | c->Nh++; | 297 | c->Nh++; |
296 | c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */ | 298 | c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */ |
297 | c->Nl=l; | 299 | c->Nl = l; |
298 | 300 | ||
299 | n = c->num; | 301 | n = c->num; |
300 | if (n != 0) | 302 | if (n != 0) { |
301 | { | 303 | p = (unsigned char *)c->data; |
302 | p=(unsigned char *)c->data; | 304 | |
303 | 305 | if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { | |
304 | if (len >= HASH_CBLOCK || len+n >= HASH_CBLOCK) | 306 | memcpy (p + n, data, HASH_CBLOCK - n); |
305 | { | 307 | HASH_BLOCK_DATA_ORDER (c, p, 1); |
306 | memcpy (p+n,data,HASH_CBLOCK-n); | 308 | n = HASH_CBLOCK - n; |
307 | HASH_BLOCK_DATA_ORDER (c,p,1); | 309 | data += n; |
308 | n = HASH_CBLOCK-n; | 310 | len -= n; |
309 | data += n; | ||
310 | len -= n; | ||
311 | c->num = 0; | 311 | c->num = 0; |
312 | memset (p,0,HASH_CBLOCK); /* keep it zeroed */ | 312 | memset (p,0,HASH_CBLOCK); /* keep it zeroed */ |
313 | } | 313 | } else { |
314 | else | 314 | memcpy (p + n, data, len); |
315 | { | ||
316 | memcpy (p+n,data,len); | ||
317 | c->num += (unsigned int)len; | 315 | c->num += (unsigned int)len; |
318 | return 1; | 316 | return 1; |
319 | } | ||
320 | } | 317 | } |
318 | } | ||
321 | 319 | ||
322 | n = len/HASH_CBLOCK; | 320 | n = len/HASH_CBLOCK; |
323 | if (n > 0) | 321 | if (n > 0) { |
324 | { | 322 | HASH_BLOCK_DATA_ORDER (c, data, n); |
325 | HASH_BLOCK_DATA_ORDER (c,data,n); | ||
326 | n *= HASH_CBLOCK; | 323 | n *= HASH_CBLOCK; |
327 | data += n; | 324 | data += n; |
328 | len -= n; | 325 | len -= n; |
329 | } | 326 | } |
330 | 327 | ||
331 | if (len != 0) | 328 | if (len != 0) { |
332 | { | ||
333 | p = (unsigned char *)c->data; | 329 | p = (unsigned char *)c->data; |
334 | c->num = (unsigned int)len; | 330 | c->num = (unsigned int)len; |
335 | memcpy (p,data,len); | 331 | memcpy (p, data, len); |
336 | } | ||
337 | return 1; | ||
338 | } | 332 | } |
333 | return 1; | ||
334 | } | ||
339 | 335 | ||
340 | 336 | ||
341 | void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) | 337 | void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) |
342 | { | 338 | { |
343 | HASH_BLOCK_DATA_ORDER (c,data,1); | 339 | HASH_BLOCK_DATA_ORDER (c, data, 1); |
344 | } | 340 | } |
345 | 341 | ||
346 | 342 | ||
347 | int HASH_FINAL (unsigned char *md, HASH_CTX *c) | 343 | int HASH_FINAL (unsigned char *md, HASH_CTX *c) |
348 | { | 344 | { |
349 | unsigned char *p = (unsigned char *)c->data; | 345 | unsigned char *p = (unsigned char *)c->data; |
350 | size_t n = c->num; | 346 | size_t n = c->num; |
351 | 347 | ||
352 | p[n] = 0x80; /* there is always room for one */ | 348 | p[n] = 0x80; /* there is always room for one */ |
353 | n++; | 349 | n++; |
354 | 350 | ||
355 | if (n > (HASH_CBLOCK-8)) | 351 | if (n > (HASH_CBLOCK - 8)) { |
356 | { | 352 | memset (p + n, 0, HASH_CBLOCK - n); |
357 | memset (p+n,0,HASH_CBLOCK-n); | 353 | n = 0; |
358 | n=0; | 354 | HASH_BLOCK_DATA_ORDER (c, p, 1); |
359 | HASH_BLOCK_DATA_ORDER (c,p,1); | 355 | } |
360 | } | 356 | memset (p + n, 0, HASH_CBLOCK - 8 - n); |
361 | memset (p+n,0,HASH_CBLOCK-8-n); | ||
362 | 357 | ||
363 | p += HASH_CBLOCK-8; | 358 | p += HASH_CBLOCK - 8; |
364 | #if defined(DATA_ORDER_IS_BIG_ENDIAN) | 359 | #if defined(DATA_ORDER_IS_BIG_ENDIAN) |
365 | (void)HOST_l2c(c->Nh,p); | 360 | (void)HOST_l2c(c->Nh, p); |
366 | (void)HOST_l2c(c->Nl,p); | 361 | (void)HOST_l2c(c->Nl, p); |
367 | #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) | 362 | #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) |
368 | (void)HOST_l2c(c->Nl,p); | 363 | (void)HOST_l2c(c->Nl, p); |
369 | (void)HOST_l2c(c->Nh,p); | 364 | (void)HOST_l2c(c->Nh, p); |
370 | #endif | 365 | #endif |
371 | p -= HASH_CBLOCK; | 366 | p -= HASH_CBLOCK; |
372 | HASH_BLOCK_DATA_ORDER (c,p,1); | 367 | HASH_BLOCK_DATA_ORDER (c, p, 1); |
373 | c->num=0; | 368 | c->num = 0; |
374 | memset (p,0,HASH_CBLOCK); | 369 | memset (p, 0, HASH_CBLOCK); |
375 | 370 | ||
376 | #ifndef HASH_MAKE_STRING | 371 | #ifndef HASH_MAKE_STRING |
377 | #error "HASH_MAKE_STRING must be defined!" | 372 | #error "HASH_MAKE_STRING must be defined!" |
378 | #else | 373 | #else |
379 | HASH_MAKE_STRING(c,md); | 374 | HASH_MAKE_STRING(c, md); |
380 | #endif | 375 | #endif |
381 | 376 | ||
382 | return 1; | 377 | return 1; |
383 | } | 378 | } |
384 | 379 | ||
385 | #ifndef MD32_REG_T | 380 | #ifndef MD32_REG_T |
386 | #if defined(__alpha) || defined(__sparcv9) || defined(__mips) | 381 | #if defined(__alpha) || defined(__sparcv9) || defined(__mips) |
diff --git a/src/lib/libcrypto/mem.c b/src/lib/libcrypto/mem.c index 55e829dc92..86e5ff1c8e 100644 --- a/src/lib/libcrypto/mem.c +++ b/src/lib/libcrypto/mem.c | |||
@@ -62,206 +62,230 @@ | |||
62 | #include "cryptlib.h" | 62 | #include "cryptlib.h" |
63 | 63 | ||
64 | 64 | ||
65 | static int allow_customize = 1; /* we provide flexible functions for */ | 65 | static int allow_customize = 1; |
66 | static int allow_customize_debug = 1;/* exchanging memory-related functions at | 66 | /* we provide flexible functions for */ |
67 | * run-time, but this must be done | 67 | static int allow_customize_debug = 1;/* exchanging memory - related functions at |
68 | * before any blocks are actually | 68 | * run - time, but this must be done |
69 | * allocated; or we'll run into huge | 69 | * before any blocks are actually |
70 | * problems when malloc/free pairs | 70 | * allocated; or we'll run into huge |
71 | * don't match etc. */ | 71 | * problems when malloc/free pairs |
72 | 72 | * don't match etc. */ | |
73 | |||
74 | 73 | ||
75 | /* the following pointers may be changed as long as 'allow_customize' is set */ | 74 | /* the following pointers may be changed as long as 'allow_customize' is set */ |
76 | 75 | ||
77 | static void *(*malloc_func)(size_t) = malloc; | 76 | static void *(*malloc_func)(size_t) = malloc; |
78 | static void *default_malloc_ex(size_t num, const char *file, int line) | 77 | static void |
79 | { return malloc_func(num); } | 78 | *default_malloc_ex(size_t num, const char *file, int line) |
80 | static void *(*malloc_ex_func)(size_t, const char *file, int line) | 79 | { |
81 | = default_malloc_ex; | 80 | return malloc_func(num); |
82 | 81 | } | |
83 | static void *(*realloc_func)(void *, size_t)= realloc; | 82 | static void *(*malloc_ex_func)(size_t, const char *file, int line) = |
84 | static void *default_realloc_ex(void *str, size_t num, | 83 | default_malloc_ex; |
85 | const char *file, int line) | 84 | |
86 | { return realloc_func(str,num); } | 85 | static void *(*realloc_func)(void *, size_t) = realloc; |
87 | static void *(*realloc_ex_func)(void *, size_t, const char *file, int line) | 86 | static void |
88 | = default_realloc_ex; | 87 | *default_realloc_ex(void *str, size_t num, const char *file, int line) |
89 | 88 | { | |
90 | static void (*free_func)(void *) = free; | 89 | return realloc_func(str, num); |
91 | 90 | } | |
92 | static void *(*malloc_locked_func)(size_t) = malloc; | 91 | static void *(*realloc_ex_func)(void *, size_t, const char *file, int line) = |
93 | static void *default_malloc_locked_ex(size_t num, const char *file, int line) | 92 | default_realloc_ex; |
94 | { return malloc_locked_func(num); } | 93 | |
95 | static void *(*malloc_locked_ex_func)(size_t, const char *file, int line) | 94 | static void (*free_func)(void *) = free; |
96 | = default_malloc_locked_ex; | 95 | |
97 | 96 | static void *(*malloc_locked_func)(size_t) = malloc; | |
98 | static void (*free_locked_func)(void *) = free; | 97 | static void |
99 | 98 | *default_malloc_locked_ex(size_t num, const char *file, int line) | |
99 | { | ||
100 | return malloc_locked_func(num); | ||
101 | } | ||
102 | static void *(*malloc_locked_ex_func)(size_t, const char *file, int line) = | ||
103 | default_malloc_locked_ex; | ||
104 | |||
105 | static void (*free_locked_func)(void *) = free; | ||
100 | 106 | ||
101 | 107 | ||
102 | /* may be changed as long as 'allow_customize_debug' is set */ | 108 | /* may be changed as long as 'allow_customize_debug' is set */ |
103 | /* XXX use correct function pointer types */ | 109 | /* XXX use correct function pointer types */ |
104 | #ifdef CRYPTO_MDEBUG | 110 | #ifdef CRYPTO_MDEBUG |
105 | /* use default functions from mem_dbg.c */ | 111 | /* use default functions from mem_dbg.c */ |
106 | static void (*malloc_debug_func)(void *,int,const char *,int,int) | 112 | static void (*malloc_debug_func)(void *, int, const char *, int, int) = |
107 | = CRYPTO_dbg_malloc; | 113 | CRYPTO_dbg_malloc; |
108 | static void (*realloc_debug_func)(void *,void *,int,const char *,int,int) | 114 | static void (*realloc_debug_func)(void *, void *, int, const char *, int, int) = |
109 | = CRYPTO_dbg_realloc; | 115 | CRYPTO_dbg_realloc; |
110 | static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free; | 116 | static void (*free_debug_func)(void *, int) = CRYPTO_dbg_free; |
111 | static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; | 117 | static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; |
112 | static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; | 118 | static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; |
113 | #else | 119 | #else |
114 | /* applications can use CRYPTO_malloc_debug_init() to select above case | 120 | /* applications can use CRYPTO_malloc_debug_init() to select above case |
115 | * at run-time */ | 121 | * at run-time */ |
116 | static void (*malloc_debug_func)(void *,int,const char *,int,int) = NULL; | 122 | static void (*malloc_debug_func)(void *, int, const char *, int, int) = NULL; |
117 | static void (*realloc_debug_func)(void *,void *,int,const char *,int,int) | 123 | static void (*realloc_debug_func)(void *, void *, int, const char *, int, int) = |
118 | = NULL; | 124 | NULL; |
119 | static void (*free_debug_func)(void *,int) = NULL; | 125 | static void (*free_debug_func)(void *, int) = NULL; |
120 | static void (*set_debug_options_func)(long) = NULL; | 126 | static void (*set_debug_options_func)(long) = NULL; |
121 | static long (*get_debug_options_func)(void) = NULL; | 127 | static long (*get_debug_options_func)(void) = NULL; |
122 | #endif | 128 | #endif |
123 | 129 | ||
124 | int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), | 130 | int |
125 | void (*f)(void *)) | 131 | CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), |
126 | { | 132 | void (*f)(void *)) |
133 | { | ||
127 | /* Dummy call just to ensure OPENSSL_init() gets linked in */ | 134 | /* Dummy call just to ensure OPENSSL_init() gets linked in */ |
128 | OPENSSL_init(); | 135 | OPENSSL_init(); |
129 | if (!allow_customize) | 136 | if (!allow_customize) |
130 | return 0; | 137 | return 0; |
131 | if ((m == 0) || (r == 0) || (f == 0)) | 138 | if ((m == 0) || (r == 0) || (f == 0)) |
132 | return 0; | 139 | return 0; |
133 | malloc_func=m; malloc_ex_func=default_malloc_ex; | 140 | malloc_func = m; |
134 | realloc_func=r; realloc_ex_func=default_realloc_ex; | 141 | malloc_ex_func = default_malloc_ex; |
135 | free_func=f; | 142 | realloc_func = r; |
136 | malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex; | 143 | realloc_ex_func = default_realloc_ex; |
137 | free_locked_func=f; | 144 | free_func = f; |
145 | malloc_locked_func = m; | ||
146 | malloc_locked_ex_func = default_malloc_locked_ex; | ||
147 | free_locked_func = f; | ||
138 | return 1; | 148 | return 1; |
139 | } | 149 | } |
140 | 150 | ||
141 | int CRYPTO_set_mem_ex_functions( | 151 | int |
142 | void *(*m)(size_t,const char *,int), | 152 | CRYPTO_set_mem_ex_functions(void *(*m)(size_t, const char *, int), |
143 | void *(*r)(void *, size_t,const char *,int), | 153 | void *(*r)(void *, size_t, const char *, int), void (*f)(void *)) |
144 | void (*f)(void *)) | 154 | { |
145 | { | ||
146 | if (!allow_customize) | 155 | if (!allow_customize) |
147 | return 0; | 156 | return 0; |
148 | if ((m == 0) || (r == 0) || (f == 0)) | 157 | if ((m == 0) || (r == 0) || (f == 0)) |
149 | return 0; | 158 | return 0; |
150 | malloc_func=0; malloc_ex_func=m; | 159 | malloc_func = 0; |
151 | realloc_func=0; realloc_ex_func=r; | 160 | malloc_ex_func = m; |
152 | free_func=f; | 161 | realloc_func = 0; |
153 | malloc_locked_func=0; malloc_locked_ex_func=m; | 162 | realloc_ex_func = r; |
154 | free_locked_func=f; | 163 | free_func = f; |
164 | malloc_locked_func = 0; | ||
165 | malloc_locked_ex_func = m; | ||
166 | free_locked_func = f; | ||
155 | return 1; | 167 | return 1; |
156 | } | 168 | } |
157 | 169 | ||
158 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *)) | 170 | int |
159 | { | 171 | CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *)) |
172 | { | ||
160 | if (!allow_customize) | 173 | if (!allow_customize) |
161 | return 0; | 174 | return 0; |
162 | if ((m == NULL) || (f == NULL)) | 175 | if ((m == NULL) || (f == NULL)) |
163 | return 0; | 176 | return 0; |
164 | malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex; | 177 | malloc_locked_func = m; |
165 | free_locked_func=f; | 178 | malloc_locked_ex_func = default_malloc_locked_ex; |
179 | free_locked_func = f; | ||
166 | return 1; | 180 | return 1; |
167 | } | 181 | } |
168 | 182 | ||
169 | int CRYPTO_set_locked_mem_ex_functions( | 183 | int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t, const char *, int), |
170 | void *(*m)(size_t,const char *,int), | 184 | void (*f)(void *)) |
171 | void (*f)(void *)) | 185 | { |
172 | { | ||
173 | if (!allow_customize) | 186 | if (!allow_customize) |
174 | return 0; | 187 | return 0; |
175 | if ((m == NULL) || (f == NULL)) | 188 | if ((m == NULL) || (f == NULL)) |
176 | return 0; | 189 | return 0; |
177 | malloc_locked_func=0; malloc_locked_ex_func=m; | 190 | malloc_locked_func = 0; |
178 | free_func=f; | 191 | malloc_locked_ex_func = m; |
192 | free_func = f; | ||
179 | return 1; | 193 | return 1; |
180 | } | 194 | } |
181 | 195 | ||
182 | int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), | 196 | int |
183 | void (*r)(void *,void *,int,const char *,int,int), | 197 | CRYPTO_set_mem_debug_functions(void (*m)(void *, int, const char *, int, int), |
184 | void (*f)(void *,int), | 198 | void (*r)(void *, void *, int, const char *, int, int), |
185 | void (*so)(long), | 199 | void (*f)(void *, int), void (*so)(long), long (*go)(void)) |
186 | long (*go)(void)) | 200 | { |
187 | { | ||
188 | if (!allow_customize_debug) | 201 | if (!allow_customize_debug) |
189 | return 0; | 202 | return 0; |
190 | OPENSSL_init(); | 203 | OPENSSL_init(); |
191 | malloc_debug_func=m; | 204 | malloc_debug_func = m; |
192 | realloc_debug_func=r; | 205 | realloc_debug_func = r; |
193 | free_debug_func=f; | 206 | free_debug_func = f; |
194 | set_debug_options_func=so; | 207 | set_debug_options_func = so; |
195 | get_debug_options_func=go; | 208 | get_debug_options_func = go; |
196 | return 1; | 209 | return 1; |
197 | } | 210 | } |
198 | 211 | ||
199 | 212 | ||
200 | void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), | 213 | void |
201 | void (**f)(void *)) | 214 | CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), |
202 | { | 215 | void (**f)(void *)) |
203 | if (m != NULL) *m = (malloc_ex_func == default_malloc_ex) ? | 216 | { |
204 | malloc_func : 0; | 217 | if (m != NULL) |
205 | if (r != NULL) *r = (realloc_ex_func == default_realloc_ex) ? | 218 | *m = (malloc_ex_func == default_malloc_ex) ? malloc_func : 0; |
206 | realloc_func : 0; | 219 | if (r != NULL) |
207 | if (f != NULL) *f=free_func; | 220 | *r = (realloc_ex_func == default_realloc_ex) ? realloc_func : 0; |
208 | } | 221 | if (f != NULL) |
209 | 222 | *f = free_func; | |
210 | void CRYPTO_get_mem_ex_functions( | 223 | } |
211 | void *(**m)(size_t,const char *,int), | 224 | |
212 | void *(**r)(void *, size_t,const char *,int), | 225 | void CRYPTO_get_mem_ex_functions(void *(**m)(size_t, const char *, int), |
213 | void (**f)(void *)) | 226 | void *(**r)(void *, size_t, const char *, int), void (**f)(void *)) |
214 | { | 227 | { |
215 | if (m != NULL) *m = (malloc_ex_func != default_malloc_ex) ? | 228 | if (m != NULL) |
216 | malloc_ex_func : 0; | 229 | *m = (malloc_ex_func != default_malloc_ex) ? malloc_ex_func : 0; |
217 | if (r != NULL) *r = (realloc_ex_func != default_realloc_ex) ? | 230 | if (r != NULL) |
218 | realloc_ex_func : 0; | 231 | *r = (realloc_ex_func != default_realloc_ex) ? |
219 | if (f != NULL) *f=free_func; | 232 | realloc_ex_func : 0; |
220 | } | 233 | if (f != NULL) |
221 | 234 | *f = free_func; | |
222 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)) | 235 | } |
223 | { | 236 | |
224 | if (m != NULL) *m = (malloc_locked_ex_func == default_malloc_locked_ex) ? | 237 | void |
225 | malloc_locked_func : 0; | 238 | CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)) |
226 | if (f != NULL) *f=free_locked_func; | 239 | { |
227 | } | 240 | if (m != NULL) |
228 | 241 | *m = (malloc_locked_ex_func == default_malloc_locked_ex) ? | |
229 | void CRYPTO_get_locked_mem_ex_functions( | 242 | malloc_locked_func : 0; |
230 | void *(**m)(size_t,const char *,int), | 243 | if (f != NULL) |
231 | void (**f)(void *)) | 244 | *f = free_locked_func; |
232 | { | 245 | } |
233 | if (m != NULL) *m = (malloc_locked_ex_func != default_malloc_locked_ex) ? | 246 | |
234 | malloc_locked_ex_func : 0; | 247 | void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t, const char *, int), |
235 | if (f != NULL) *f=free_locked_func; | 248 | void (**f)(void *)) |
236 | } | 249 | { |
237 | 250 | if (m != NULL) | |
238 | void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), | 251 | *m = (malloc_locked_ex_func != default_malloc_locked_ex) ? |
239 | void (**r)(void *,void *,int,const char *,int,int), | 252 | malloc_locked_ex_func : 0; |
240 | void (**f)(void *,int), | 253 | if (f != NULL) |
241 | void (**so)(long), | 254 | *f = free_locked_func; |
242 | long (**go)(void)) | 255 | } |
243 | { | 256 | |
244 | if (m != NULL) *m=malloc_debug_func; | 257 | void |
245 | if (r != NULL) *r=realloc_debug_func; | 258 | CRYPTO_get_mem_debug_functions(void (**m)(void *, int, const char *, int, int), |
246 | if (f != NULL) *f=free_debug_func; | 259 | void (**r)(void *, void *, int, const char *, int, int), |
247 | if (so != NULL) *so=set_debug_options_func; | 260 | void (**f)(void *, int), void (**so)(long), long (**go)(void)) |
248 | if (go != NULL) *go=get_debug_options_func; | 261 | { |
249 | } | 262 | if (m != NULL) |
250 | 263 | *m = malloc_debug_func; | |
251 | 264 | if (r != NULL) | |
252 | void *CRYPTO_malloc_locked(int num, const char *file, int line) | 265 | *r = realloc_debug_func; |
253 | { | 266 | if (f != NULL) |
267 | *f = free_debug_func; | ||
268 | if (so != NULL) | ||
269 | *so = set_debug_options_func; | ||
270 | if (go != NULL) | ||
271 | *go = get_debug_options_func; | ||
272 | } | ||
273 | |||
274 | |||
275 | void | ||
276 | *CRYPTO_malloc_locked(int num, const char *file, int line) | ||
277 | { | ||
254 | void *ret = NULL; | 278 | void *ret = NULL; |
255 | 279 | ||
256 | if (num <= 0) return NULL; | 280 | if (num <= 0) |
281 | return NULL; | ||
257 | 282 | ||
258 | allow_customize = 0; | 283 | allow_customize = 0; |
259 | if (malloc_debug_func != NULL) | 284 | if (malloc_debug_func != NULL) { |
260 | { | ||
261 | allow_customize_debug = 0; | 285 | allow_customize_debug = 0; |
262 | malloc_debug_func(NULL, num, file, line, 0); | 286 | malloc_debug_func(NULL, num, file, line, 0); |
263 | } | 287 | } |
264 | ret = malloc_locked_ex_func(num,file,line); | 288 | ret = malloc_locked_ex_func(num, file, line); |
265 | #ifdef LEVITTE_DEBUG_MEM | 289 | #ifdef LEVITTE_DEBUG_MEM |
266 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); | 290 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); |
267 | #endif | 291 | #endif |
@@ -272,17 +296,18 @@ void *CRYPTO_malloc_locked(int num, const char *file, int line) | |||
272 | /* Create a dependency on the value of 'cleanse_ctr' so our memory | 296 | /* Create a dependency on the value of 'cleanse_ctr' so our memory |
273 | * sanitisation function can't be optimised out. NB: We only do | 297 | * sanitisation function can't be optimised out. NB: We only do |
274 | * this for >2Kb so the overhead doesn't bother us. */ | 298 | * this for >2Kb so the overhead doesn't bother us. */ |
275 | if(ret && (num > 2048)) | 299 | if (ret && (num > 2048)) { |
276 | { extern unsigned char cleanse_ctr; | 300 | extern unsigned char cleanse_ctr; |
277 | ((unsigned char *)ret)[0] = cleanse_ctr; | 301 | ((unsigned char *)ret)[0] = cleanse_ctr; |
278 | } | 302 | } |
279 | #endif | 303 | #endif |
280 | 304 | ||
281 | return ret; | 305 | return ret; |
282 | } | 306 | } |
283 | 307 | ||
284 | void CRYPTO_free_locked(void *str) | 308 | void |
285 | { | 309 | CRYPTO_free_locked(void *str) |
310 | { | ||
286 | if (free_debug_func != NULL) | 311 | if (free_debug_func != NULL) |
287 | free_debug_func(str, 0); | 312 | free_debug_func(str, 0); |
288 | #ifdef LEVITTE_DEBUG_MEM | 313 | #ifdef LEVITTE_DEBUG_MEM |
@@ -291,21 +316,22 @@ void CRYPTO_free_locked(void *str) | |||
291 | free_locked_func(str); | 316 | free_locked_func(str); |
292 | if (free_debug_func != NULL) | 317 | if (free_debug_func != NULL) |
293 | free_debug_func(NULL, 1); | 318 | free_debug_func(NULL, 1); |
294 | } | 319 | } |
295 | 320 | ||
296 | void *CRYPTO_malloc(int num, const char *file, int line) | 321 | void |
297 | { | 322 | *CRYPTO_malloc(int num, const char *file, int line) |
323 | { | ||
298 | void *ret = NULL; | 324 | void *ret = NULL; |
299 | 325 | ||
300 | if (num <= 0) return NULL; | 326 | if (num <= 0) |
327 | return NULL; | ||
301 | 328 | ||
302 | allow_customize = 0; | 329 | allow_customize = 0; |
303 | if (malloc_debug_func != NULL) | 330 | if (malloc_debug_func != NULL) { |
304 | { | ||
305 | allow_customize_debug = 0; | 331 | allow_customize_debug = 0; |
306 | malloc_debug_func(NULL, num, file, line, 0); | 332 | malloc_debug_func(NULL, num, file, line, 0); |
307 | } | 333 | } |
308 | ret = malloc_ex_func(num,file,line); | 334 | ret = malloc_ex_func(num, file, line); |
309 | #ifdef LEVITTE_DEBUG_MEM | 335 | #ifdef LEVITTE_DEBUG_MEM |
310 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); | 336 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); |
311 | #endif | 337 | #endif |
@@ -316,35 +342,39 @@ void *CRYPTO_malloc(int num, const char *file, int line) | |||
316 | /* Create a dependency on the value of 'cleanse_ctr' so our memory | 342 | /* Create a dependency on the value of 'cleanse_ctr' so our memory |
317 | * sanitisation function can't be optimised out. NB: We only do | 343 | * sanitisation function can't be optimised out. NB: We only do |
318 | * this for >2Kb so the overhead doesn't bother us. */ | 344 | * this for >2Kb so the overhead doesn't bother us. */ |
319 | if(ret && (num > 2048)) | 345 | if (ret && (num > 2048)) { |
320 | { extern unsigned char cleanse_ctr; | 346 | extern unsigned char cleanse_ctr; |
321 | ((unsigned char *)ret)[0] = cleanse_ctr; | 347 | ((unsigned char *)ret)[0] = cleanse_ctr; |
322 | } | 348 | } |
323 | #endif | 349 | #endif |
324 | 350 | ||
325 | return ret; | 351 | return ret; |
326 | } | 352 | } |
327 | char *CRYPTO_strdup(const char *str, const char *file, int line) | 353 | |
328 | { | 354 | char |
329 | size_t len = strlen(str)+1; | 355 | *CRYPTO_strdup(const char *str, const char *file, int line) |
356 | { | ||
357 | size_t len = strlen(str) + 1; | ||
330 | char *ret = CRYPTO_malloc(len, file, line); | 358 | char *ret = CRYPTO_malloc(len, file, line); |
331 | 359 | ||
332 | memcpy(ret, str, len); | 360 | memcpy(ret, str, len); |
333 | return ret; | 361 | return ret; |
334 | } | 362 | } |
335 | 363 | ||
336 | void *CRYPTO_realloc(void *str, int num, const char *file, int line) | 364 | void |
337 | { | 365 | *CRYPTO_realloc(void *str, int num, const char *file, int line) |
366 | { | ||
338 | void *ret = NULL; | 367 | void *ret = NULL; |
339 | 368 | ||
340 | if (str == NULL) | 369 | if (str == NULL) |
341 | return CRYPTO_malloc(num, file, line); | 370 | return CRYPTO_malloc(num, file, line); |
342 | 371 | ||
343 | if (num <= 0) return NULL; | 372 | if (num <= 0) |
373 | return NULL; | ||
344 | 374 | ||
345 | if (realloc_debug_func != NULL) | 375 | if (realloc_debug_func != NULL) |
346 | realloc_debug_func(str, NULL, num, file, line, 0); | 376 | realloc_debug_func(str, NULL, num, file, line, 0); |
347 | ret = realloc_ex_func(str,num,file,line); | 377 | ret = realloc_ex_func(str, num, file, line); |
348 | #ifdef LEVITTE_DEBUG_MEM | 378 | #ifdef LEVITTE_DEBUG_MEM |
349 | fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); | 379 | fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); |
350 | #endif | 380 | #endif |
@@ -352,44 +382,47 @@ void *CRYPTO_realloc(void *str, int num, const char *file, int line) | |||
352 | realloc_debug_func(str, ret, num, file, line, 1); | 382 | realloc_debug_func(str, ret, num, file, line, 1); |
353 | 383 | ||
354 | return ret; | 384 | return ret; |
355 | } | 385 | } |
356 | 386 | ||
357 | void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file, | 387 | void |
358 | int line) | 388 | *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file, |
359 | { | 389 | int line) |
390 | { | ||
360 | void *ret = NULL; | 391 | void *ret = NULL; |
361 | 392 | ||
362 | if (str == NULL) | 393 | if (str == NULL) |
363 | return CRYPTO_malloc(num, file, line); | 394 | return CRYPTO_malloc(num, file, line); |
364 | 395 | ||
365 | if (num <= 0) return NULL; | 396 | if (num <= 0) |
397 | return NULL; | ||
366 | 398 | ||
367 | /* We don't support shrinking the buffer. Note the memcpy that copies | 399 | /* We don't support shrinking the buffer. Note the memcpy that copies |
368 | * |old_len| bytes to the new buffer, below. */ | 400 | * |old_len| bytes to the new buffer, below. */ |
369 | if (num < old_len) return NULL; | 401 | if (num < old_len) |
402 | return NULL; | ||
370 | 403 | ||
371 | if (realloc_debug_func != NULL) | 404 | if (realloc_debug_func != NULL) |
372 | realloc_debug_func(str, NULL, num, file, line, 0); | 405 | realloc_debug_func(str, NULL, num, file, line, 0); |
373 | ret=malloc_ex_func(num,file,line); | 406 | ret = malloc_ex_func(num, file, line); |
374 | if(ret) | 407 | if (ret) { |
375 | { | 408 | memcpy(ret, str, old_len); |
376 | memcpy(ret,str,old_len); | 409 | OPENSSL_cleanse(str, old_len); |
377 | OPENSSL_cleanse(str,old_len); | ||
378 | free_func(str); | 410 | free_func(str); |
379 | } | 411 | } |
380 | #ifdef LEVITTE_DEBUG_MEM | 412 | #ifdef LEVITTE_DEBUG_MEM |
381 | fprintf(stderr, | 413 | fprintf(stderr, |
382 | "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", | 414 | "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", |
383 | str, ret, num); | 415 | str, ret, num); |
384 | #endif | 416 | #endif |
385 | if (realloc_debug_func != NULL) | 417 | if (realloc_debug_func != NULL) |
386 | realloc_debug_func(str, ret, num, file, line, 1); | 418 | realloc_debug_func(str, ret, num, file, line, 1); |
387 | 419 | ||
388 | return ret; | 420 | return ret; |
389 | } | 421 | } |
390 | 422 | ||
391 | void CRYPTO_free(void *str) | 423 | void |
392 | { | 424 | CRYPTO_free(void *str) |
425 | { | ||
393 | if (free_debug_func != NULL) | 426 | if (free_debug_func != NULL) |
394 | free_debug_func(str, 0); | 427 | free_debug_func(str, 0); |
395 | #ifdef LEVITTE_DEBUG_MEM | 428 | #ifdef LEVITTE_DEBUG_MEM |
@@ -398,24 +431,28 @@ void CRYPTO_free(void *str) | |||
398 | free_func(str); | 431 | free_func(str); |
399 | if (free_debug_func != NULL) | 432 | if (free_debug_func != NULL) |
400 | free_debug_func(NULL, 1); | 433 | free_debug_func(NULL, 1); |
401 | } | 434 | } |
402 | 435 | ||
403 | void *CRYPTO_remalloc(void *a, int num, const char *file, int line) | 436 | void |
404 | { | 437 | *CRYPTO_remalloc(void *a, int num, const char *file, int line) |
405 | if (a != NULL) OPENSSL_free(a); | 438 | { |
406 | a=(char *)OPENSSL_malloc(num); | 439 | if (a != NULL) |
407 | return(a); | 440 | OPENSSL_free(a); |
408 | } | 441 | a = (char *)OPENSSL_malloc(num); |
409 | 442 | return (a); | |
410 | void CRYPTO_set_mem_debug_options(long bits) | 443 | } |
411 | { | 444 | |
445 | void | ||
446 | CRYPTO_set_mem_debug_options(long bits) | ||
447 | { | ||
412 | if (set_debug_options_func != NULL) | 448 | if (set_debug_options_func != NULL) |
413 | set_debug_options_func(bits); | 449 | set_debug_options_func(bits); |
414 | } | 450 | } |
415 | 451 | ||
416 | long CRYPTO_get_mem_debug_options(void) | 452 | long |
417 | { | 453 | CRYPTO_get_mem_debug_options(void) |
454 | { | ||
418 | if (get_debug_options_func != NULL) | 455 | if (get_debug_options_func != NULL) |
419 | return get_debug_options_func(); | 456 | return get_debug_options_func(); |
420 | return 0; | 457 | return 0; |
421 | } | 458 | } |
diff --git a/src/lib/libcrypto/mem_clr.c b/src/lib/libcrypto/mem_clr.c index add1f78020..fc108c83b4 100644 --- a/src/lib/libcrypto/mem_clr.c +++ b/src/lib/libcrypto/mem_clr.c | |||
@@ -61,17 +61,17 @@ | |||
61 | 61 | ||
62 | unsigned char cleanse_ctr = 0; | 62 | unsigned char cleanse_ctr = 0; |
63 | 63 | ||
64 | void OPENSSL_cleanse(void *ptr, size_t len) | 64 | void |
65 | { | 65 | OPENSSL_cleanse(void *ptr, size_t len) |
66 | { | ||
66 | unsigned char *p = ptr; | 67 | unsigned char *p = ptr; |
67 | size_t loop = len, ctr = cleanse_ctr; | 68 | size_t loop = len, ctr = cleanse_ctr; |
68 | while(loop--) | 69 | while (loop--) { |
69 | { | ||
70 | *(p++) = (unsigned char)ctr; | 70 | *(p++) = (unsigned char)ctr; |
71 | ctr += (17 + ((size_t)p & 0xF)); | 71 | ctr += (17 + ((size_t)p & 0xF)); |
72 | } | 72 | } |
73 | p=memchr(ptr, (unsigned char)ctr, len); | 73 | p = memchr(ptr, (unsigned char)ctr, len); |
74 | if(p) | 74 | if (p) |
75 | ctr += (63 + (size_t)p); | 75 | ctr += (63 + (size_t)p); |
76 | cleanse_ctr = (unsigned char)ctr; | 76 | cleanse_ctr = (unsigned char)ctr; |
77 | } | 77 | } |
diff --git a/src/lib/libcrypto/mem_dbg.c b/src/lib/libcrypto/mem_dbg.c index ac793397f1..9324ec4c7d 100644 --- a/src/lib/libcrypto/mem_dbg.c +++ b/src/lib/libcrypto/mem_dbg.c | |||
@@ -118,7 +118,7 @@ | |||
118 | #include <openssl/bio.h> | 118 | #include <openssl/bio.h> |
119 | #include <openssl/lhash.h> | 119 | #include <openssl/lhash.h> |
120 | 120 | ||
121 | static int mh_mode=CRYPTO_MEM_CHECK_OFF; | 121 | static int mh_mode = CRYPTO_MEM_CHECK_OFF; |
122 | /* The state changes to CRYPTO_MEM_CHECK_ON | CRYPTO_MEM_CHECK_ENABLE | 122 | /* The state changes to CRYPTO_MEM_CHECK_ON | CRYPTO_MEM_CHECK_ENABLE |
123 | * when the application asks for it (usually after library initialisation | 123 | * when the application asks for it (usually after library initialisation |
124 | * for which no book-keeping is desired). | 124 | * for which no book-keeping is desired). |
@@ -136,10 +136,9 @@ static int mh_mode=CRYPTO_MEM_CHECK_OFF; | |||
136 | static unsigned long order = 0; /* number of memory requests */ | 136 | static unsigned long order = 0; /* number of memory requests */ |
137 | 137 | ||
138 | DECLARE_LHASH_OF(MEM); | 138 | DECLARE_LHASH_OF(MEM); |
139 | static LHASH_OF(MEM) *mh=NULL; /* hash-table of memory requests | 139 | static LHASH_OF(MEM) *mh = NULL; /* hash - table of memory requests |
140 | * (address as key); access requires | 140 | * (address as key); access requires |
141 | * MALLOC2 lock */ | 141 | * MALLOC2 lock */ |
142 | |||
143 | 142 | ||
144 | typedef struct app_mem_info_st | 143 | typedef struct app_mem_info_st |
145 | /* For application-defined information (static C-string `info') | 144 | /* For application-defined information (static C-string `info') |
@@ -149,28 +148,28 @@ typedef struct app_mem_info_st | |||
149 | * CRYPTO_pop_info() to pop an entry, | 148 | * CRYPTO_pop_info() to pop an entry, |
150 | * CRYPTO_remove_all_info() to pop all entries. | 149 | * CRYPTO_remove_all_info() to pop all entries. |
151 | */ | 150 | */ |
152 | { | 151 | { |
153 | CRYPTO_THREADID threadid; | 152 | CRYPTO_THREADID threadid; |
154 | const char *file; | 153 | const char *file; |
155 | int line; | 154 | int line; |
156 | const char *info; | 155 | const char *info; |
157 | struct app_mem_info_st *next; /* tail of thread's stack */ | 156 | struct app_mem_info_st *next; /* tail of thread's stack */ |
158 | int references; | 157 | int references; |
159 | } APP_INFO; | 158 | } APP_INFO; |
160 | 159 | ||
161 | static void app_info_free(APP_INFO *); | 160 | static void app_info_free(APP_INFO *); |
162 | 161 | ||
163 | DECLARE_LHASH_OF(APP_INFO); | 162 | DECLARE_LHASH_OF(APP_INFO); |
164 | static LHASH_OF(APP_INFO) *amih=NULL; /* hash-table with those | 163 | static LHASH_OF(APP_INFO) *amih = NULL; /* hash - table with those |
165 | * app_mem_info_st's that are at | 164 | * app_mem_info_st's that are at |
166 | * the top of their thread's | 165 | * the top of their thread's |
167 | * stack (with `thread' as key); | 166 | * stack (with `thread' as key); |
168 | * access requires MALLOC2 | 167 | * access requires MALLOC2 |
169 | * lock */ | 168 | * lock */ |
170 | 169 | ||
171 | typedef struct mem_st | 170 | typedef struct mem_st |
172 | /* memory-block description */ | 171 | /* memory-block description */ |
173 | { | 172 | { |
174 | void *addr; | 173 | void *addr; |
175 | int num; | 174 | int num; |
176 | const char *file; | 175 | const char *file; |
@@ -179,47 +178,46 @@ typedef struct mem_st | |||
179 | unsigned long order; | 178 | unsigned long order; |
180 | time_t time; | 179 | time_t time; |
181 | APP_INFO *app_info; | 180 | APP_INFO *app_info; |
182 | } MEM; | 181 | } MEM; |
183 | 182 | ||
184 | static long options = /* extra information to be recorded */ | 183 | static long options = /* extra information to be recorded */ |
185 | #if defined(CRYPTO_MDEBUG_TIME) || defined(CRYPTO_MDEBUG_ALL) | 184 | #if defined(CRYPTO_MDEBUG_TIME) || defined(CRYPTO_MDEBUG_ALL) |
186 | V_CRYPTO_MDEBUG_TIME | | 185 | V_CRYPTO_MDEBUG_TIME | |
187 | #endif | 186 | #endif |
188 | #if defined(CRYPTO_MDEBUG_THREAD) || defined(CRYPTO_MDEBUG_ALL) | 187 | #if defined(CRYPTO_MDEBUG_THREAD) || defined(CRYPTO_MDEBUG_ALL) |
189 | V_CRYPTO_MDEBUG_THREAD | | 188 | V_CRYPTO_MDEBUG_THREAD | |
190 | #endif | 189 | #endif |
191 | 0; | 190 | 0; |
192 | 191 | ||
193 | 192 | ||
194 | static unsigned int num_disable = 0; /* num_disable > 0 | 193 | static unsigned int num_disable = 0; /* num_disable > 0 |
195 | * iff | 194 | * iff |
196 | * mh_mode == CRYPTO_MEM_CHECK_ON (w/o ..._ENABLE) | 195 | * mh_mode == CRYPTO_MEM_CHECK_ON (w/o ..._ENABLE) |
197 | */ | 196 | */ |
198 | 197 | ||
199 | /* Valid iff num_disable > 0. CRYPTO_LOCK_MALLOC2 is locked exactly in this | 198 | /* Valid iff num_disable > 0. CRYPTO_LOCK_MALLOC2 is locked exactly in this |
200 | * case (by the thread named in disabling_thread). | 199 | * case (by the thread named in disabling_thread). |
201 | */ | 200 | */ |
202 | static CRYPTO_THREADID disabling_threadid; | 201 | static CRYPTO_THREADID disabling_threadid; |
203 | 202 | ||
204 | static void app_info_free(APP_INFO *inf) | 203 | static void |
205 | { | 204 | app_info_free(APP_INFO *inf) |
206 | if (--(inf->references) <= 0) | 205 | { |
207 | { | 206 | if (--(inf->references) <= 0) { |
208 | if (inf->next != NULL) | 207 | if (inf->next != NULL) { |
209 | { | ||
210 | app_info_free(inf->next); | 208 | app_info_free(inf->next); |
211 | } | ||
212 | OPENSSL_free(inf); | ||
213 | } | 209 | } |
210 | OPENSSL_free(inf); | ||
214 | } | 211 | } |
212 | } | ||
215 | 213 | ||
216 | int CRYPTO_mem_ctrl(int mode) | 214 | int |
217 | { | 215 | CRYPTO_mem_ctrl(int mode) |
218 | int ret=mh_mode; | 216 | { |
217 | int ret = mh_mode; | ||
219 | 218 | ||
220 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); | 219 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); |
221 | switch (mode) | 220 | switch (mode) { |
222 | { | ||
223 | /* for applications (not to be called while multiple threads | 221 | /* for applications (not to be called while multiple threads |
224 | * use the library): */ | 222 | * use the library): */ |
225 | case CRYPTO_MEM_CHECK_ON: /* aka MemCheck_start() */ | 223 | case CRYPTO_MEM_CHECK_ON: /* aka MemCheck_start() */ |
@@ -232,14 +230,13 @@ int CRYPTO_mem_ctrl(int mode) | |||
232 | or there'll be a lot of confusion */ | 230 | or there'll be a lot of confusion */ |
233 | break; | 231 | break; |
234 | 232 | ||
235 | /* switch off temporarily (for library-internal use): */ | 233 | /* switch off temporarily (for library-internal use): */ |
236 | case CRYPTO_MEM_CHECK_DISABLE: /* aka MemCheck_off() */ | 234 | case CRYPTO_MEM_CHECK_DISABLE: /* aka MemCheck_off() */ |
237 | if (mh_mode & CRYPTO_MEM_CHECK_ON) | 235 | if (mh_mode & CRYPTO_MEM_CHECK_ON) { |
238 | { | ||
239 | CRYPTO_THREADID cur; | 236 | CRYPTO_THREADID cur; |
240 | CRYPTO_THREADID_current(&cur); | 237 | CRYPTO_THREADID_current(&cur); |
241 | if (!num_disable || CRYPTO_THREADID_cmp(&disabling_threadid, &cur)) /* otherwise we already have the MALLOC2 lock */ | 238 | if (!num_disable || CRYPTO_THREADID_cmp(&disabling_threadid, &cur)) /* otherwise we already have the MALLOC2 lock */ |
242 | { | 239 | { |
243 | /* Long-time lock CRYPTO_LOCK_MALLOC2 must not be claimed while | 240 | /* Long-time lock CRYPTO_LOCK_MALLOC2 must not be claimed while |
244 | * we're holding CRYPTO_LOCK_MALLOC, or we'll deadlock if | 241 | * we're holding CRYPTO_LOCK_MALLOC, or we'll deadlock if |
245 | * somebody else holds CRYPTO_LOCK_MALLOC2 (and cannot release | 242 | * somebody else holds CRYPTO_LOCK_MALLOC2 (and cannot release |
@@ -257,412 +254,402 @@ int CRYPTO_mem_ctrl(int mode) | |||
257 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); | 254 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); |
258 | mh_mode &= ~CRYPTO_MEM_CHECK_ENABLE; | 255 | mh_mode &= ~CRYPTO_MEM_CHECK_ENABLE; |
259 | CRYPTO_THREADID_cpy(&disabling_threadid, &cur); | 256 | CRYPTO_THREADID_cpy(&disabling_threadid, &cur); |
260 | } | ||
261 | num_disable++; | ||
262 | } | 257 | } |
258 | num_disable++; | ||
259 | } | ||
263 | break; | 260 | break; |
264 | case CRYPTO_MEM_CHECK_ENABLE: /* aka MemCheck_on() */ | 261 | case CRYPTO_MEM_CHECK_ENABLE: /* aka MemCheck_on() */ |
265 | if (mh_mode & CRYPTO_MEM_CHECK_ON) | 262 | if (mh_mode & CRYPTO_MEM_CHECK_ON) { |
266 | { | ||
267 | if (num_disable) /* always true, or something is going wrong */ | 263 | if (num_disable) /* always true, or something is going wrong */ |
268 | { | 264 | { |
269 | num_disable--; | 265 | num_disable--; |
270 | if (num_disable == 0) | 266 | if (num_disable == 0) { |
271 | { | ||
272 | mh_mode|=CRYPTO_MEM_CHECK_ENABLE; | 267 | mh_mode|=CRYPTO_MEM_CHECK_ENABLE; |
273 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); | 268 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); |
274 | } | ||
275 | } | 269 | } |
276 | } | 270 | } |
271 | } | ||
277 | break; | 272 | break; |
278 | 273 | ||
279 | default: | 274 | default: |
280 | break; | 275 | break; |
281 | } | ||
282 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); | ||
283 | return(ret); | ||
284 | } | 276 | } |
277 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); | ||
278 | return (ret); | ||
279 | } | ||
285 | 280 | ||
286 | int CRYPTO_is_mem_check_on(void) | 281 | int |
287 | { | 282 | CRYPTO_is_mem_check_on(void) |
283 | { | ||
288 | int ret = 0; | 284 | int ret = 0; |
289 | 285 | ||
290 | if (mh_mode & CRYPTO_MEM_CHECK_ON) | 286 | if (mh_mode & CRYPTO_MEM_CHECK_ON) { |
291 | { | ||
292 | CRYPTO_THREADID cur; | 287 | CRYPTO_THREADID cur; |
293 | CRYPTO_THREADID_current(&cur); | 288 | CRYPTO_THREADID_current(&cur); |
294 | CRYPTO_r_lock(CRYPTO_LOCK_MALLOC); | 289 | CRYPTO_r_lock(CRYPTO_LOCK_MALLOC); |
295 | 290 | ||
296 | ret = (mh_mode & CRYPTO_MEM_CHECK_ENABLE) | 291 | ret = (mh_mode & CRYPTO_MEM_CHECK_ENABLE) || |
297 | || CRYPTO_THREADID_cmp(&disabling_threadid, &cur); | 292 | CRYPTO_THREADID_cmp(&disabling_threadid, &cur); |
298 | 293 | ||
299 | CRYPTO_r_unlock(CRYPTO_LOCK_MALLOC); | 294 | CRYPTO_r_unlock(CRYPTO_LOCK_MALLOC); |
300 | } | 295 | } |
301 | return(ret); | 296 | return (ret); |
302 | } | 297 | } |
303 | 298 | ||
304 | 299 | ||
305 | void CRYPTO_dbg_set_options(long bits) | 300 | void |
306 | { | 301 | CRYPTO_dbg_set_options(long bits) |
302 | { | ||
307 | options = bits; | 303 | options = bits; |
308 | } | 304 | } |
309 | 305 | ||
310 | long CRYPTO_dbg_get_options(void) | 306 | long |
311 | { | 307 | CRYPTO_dbg_get_options(void) |
308 | { | ||
312 | return options; | 309 | return options; |
313 | } | 310 | } |
314 | 311 | ||
315 | static int mem_cmp(const MEM *a, const MEM *b) | 312 | static int |
316 | { | 313 | mem_cmp(const MEM *a, const MEM *b) |
314 | { | ||
317 | #ifdef _WIN64 | 315 | #ifdef _WIN64 |
318 | const char *ap=(const char *)a->addr, | 316 | const char *ap = (const char *)a->addr, |
319 | *bp=(const char *)b->addr; | 317 | *bp = (const char *)b->addr; |
320 | if (ap==bp) return 0; | 318 | if (ap == bp) |
321 | else if (ap>bp) return 1; | 319 | return 0; |
322 | else return -1; | 320 | else if (ap > bp) return 1; |
321 | else return -1; | ||
323 | #else | 322 | #else |
324 | return (const char *)a->addr - (const char *)b->addr; | 323 | return (const char *)a->addr - (const char *)b->addr; |
325 | #endif | 324 | #endif |
326 | } | 325 | } |
326 | |||
327 | static IMPLEMENT_LHASH_COMP_FN(mem, MEM) | 327 | static IMPLEMENT_LHASH_COMP_FN(mem, MEM) |
328 | 328 | ||
329 | static unsigned long mem_hash(const MEM *a) | 329 | static unsigned long |
330 | { | 330 | mem_hash(const MEM *a) |
331 | { | ||
331 | unsigned long ret; | 332 | unsigned long ret; |
332 | 333 | ||
333 | ret=(unsigned long)a->addr; | 334 | ret = (unsigned long)a->addr; |
334 | 335 | ||
335 | ret=ret*17851+(ret>>14)*7+(ret>>4)*251; | 336 | ret = ret * 17851 + (ret >> 14) * 7 + (ret >> 4) * 251; |
336 | return(ret); | 337 | return (ret); |
337 | } | 338 | } |
338 | static IMPLEMENT_LHASH_HASH_FN(mem, MEM) | 339 | |
340 | static | ||
341 | IMPLEMENT_LHASH_HASH_FN(mem, MEM) | ||
339 | 342 | ||
340 | /* static int app_info_cmp(APP_INFO *a, APP_INFO *b) */ | 343 | /* static int app_info_cmp(APP_INFO *a, APP_INFO *b) */ |
341 | static int app_info_cmp(const void *a_void, const void *b_void) | 344 | static int |
342 | { | 345 | app_info_cmp(const void *a_void, const void *b_void) |
346 | { | ||
343 | return CRYPTO_THREADID_cmp(&((const APP_INFO *)a_void)->threadid, | 347 | return CRYPTO_THREADID_cmp(&((const APP_INFO *)a_void)->threadid, |
344 | &((const APP_INFO *)b_void)->threadid); | 348 | &((const APP_INFO *)b_void)->threadid); |
345 | } | 349 | } |
350 | |||
346 | static IMPLEMENT_LHASH_COMP_FN(app_info, APP_INFO) | 351 | static IMPLEMENT_LHASH_COMP_FN(app_info, APP_INFO) |
347 | 352 | ||
348 | static unsigned long app_info_hash(const APP_INFO *a) | 353 | static unsigned long |
349 | { | 354 | app_info_hash(const APP_INFO *a) |
355 | { | ||
350 | unsigned long ret; | 356 | unsigned long ret; |
351 | 357 | ||
352 | ret = CRYPTO_THREADID_hash(&a->threadid); | 358 | ret = CRYPTO_THREADID_hash(&a->threadid); |
353 | /* This is left in as a "who am I to question legacy?" measure */ | 359 | /* This is left in as a "who am I to question legacy?" measure */ |
354 | ret=ret*17851+(ret>>14)*7+(ret>>4)*251; | 360 | ret = ret * 17851 + (ret >> 14) * 7 + (ret >> 4) * 251; |
355 | return(ret); | 361 | return (ret); |
356 | } | 362 | } |
363 | |||
357 | static IMPLEMENT_LHASH_HASH_FN(app_info, APP_INFO) | 364 | static IMPLEMENT_LHASH_HASH_FN(app_info, APP_INFO) |
358 | 365 | ||
359 | static APP_INFO *pop_info(void) | 366 | static APP_INFO |
360 | { | 367 | *pop_info(void) |
368 | { | ||
361 | APP_INFO tmp; | 369 | APP_INFO tmp; |
362 | APP_INFO *ret = NULL; | 370 | APP_INFO *ret = NULL; |
363 | 371 | ||
364 | if (amih != NULL) | 372 | if (amih != NULL) { |
365 | { | ||
366 | CRYPTO_THREADID_current(&tmp.threadid); | 373 | CRYPTO_THREADID_current(&tmp.threadid); |
367 | if ((ret=lh_APP_INFO_delete(amih,&tmp)) != NULL) | 374 | if ((ret = lh_APP_INFO_delete(amih, &tmp)) != NULL) { |
368 | { | 375 | APP_INFO *next = ret->next; |
369 | APP_INFO *next=ret->next; | ||
370 | 376 | ||
371 | if (next != NULL) | 377 | if (next != NULL) { |
372 | { | ||
373 | next->references++; | 378 | next->references++; |
374 | (void)lh_APP_INFO_insert(amih,next); | 379 | (void)lh_APP_INFO_insert(amih, next); |
375 | } | 380 | } |
376 | #ifdef LEVITTE_DEBUG_MEM | 381 | #ifdef LEVITTE_DEBUG_MEM |
377 | if (CRYPTO_THREADID_cmp(&ret->threadid, &tmp.threadid)) | 382 | if (CRYPTO_THREADID_cmp(&ret->threadid, &tmp.threadid)) { |
378 | { | ||
379 | fprintf(stderr, "pop_info(): deleted info has other thread ID (%lu) than the current thread (%lu)!!!!\n", | 383 | fprintf(stderr, "pop_info(): deleted info has other thread ID (%lu) than the current thread (%lu)!!!!\n", |
380 | CRYPTO_THREADID_hash(&ret->threadid), | 384 | CRYPTO_THREADID_hash(&ret->threadid), |
381 | CRYPTO_THREADID_hash(&tmp.threadid)); | 385 | CRYPTO_THREADID_hash(&tmp.threadid)); |
382 | abort(); | 386 | abort(); |
383 | } | 387 | } |
384 | #endif | 388 | #endif |
385 | if (--(ret->references) <= 0) | 389 | if (--(ret->references) <= 0) { |
386 | { | ||
387 | ret->next = NULL; | 390 | ret->next = NULL; |
388 | if (next != NULL) | 391 | if (next != NULL) |
389 | next->references--; | 392 | next->references--; |
390 | OPENSSL_free(ret); | 393 | OPENSSL_free(ret); |
391 | } | ||
392 | } | 394 | } |
393 | } | 395 | } |
394 | return(ret); | ||
395 | } | 396 | } |
397 | return (ret); | ||
398 | } | ||
396 | 399 | ||
397 | int CRYPTO_push_info_(const char *info, const char *file, int line) | 400 | int |
398 | { | 401 | CRYPTO_push_info_(const char *info, const char *file, int line) |
402 | { | ||
399 | APP_INFO *ami, *amim; | 403 | APP_INFO *ami, *amim; |
400 | int ret=0; | 404 | int ret = 0; |
401 | 405 | ||
402 | if (is_MemCheck_on()) | 406 | if (is_MemCheck_on()) { |
403 | { | ||
404 | MemCheck_off(); /* obtain MALLOC2 lock */ | 407 | MemCheck_off(); /* obtain MALLOC2 lock */ |
405 | 408 | ||
406 | if ((ami = (APP_INFO *)OPENSSL_malloc(sizeof(APP_INFO))) == NULL) | 409 | if ((ami = (APP_INFO *)OPENSSL_malloc(sizeof(APP_INFO))) == NULL) { |
407 | { | 410 | ret = 0; |
408 | ret=0; | ||
409 | goto err; | 411 | goto err; |
410 | } | 412 | } |
411 | if (amih == NULL) | 413 | if (amih == NULL) { |
412 | { | 414 | if ((amih = lh_APP_INFO_new()) == NULL) { |
413 | if ((amih=lh_APP_INFO_new()) == NULL) | ||
414 | { | ||
415 | OPENSSL_free(ami); | 415 | OPENSSL_free(ami); |
416 | ret=0; | 416 | ret = 0; |
417 | goto err; | 417 | goto err; |
418 | } | ||
419 | } | 418 | } |
419 | } | ||
420 | 420 | ||
421 | CRYPTO_THREADID_current(&ami->threadid); | 421 | CRYPTO_THREADID_current(&ami->threadid); |
422 | ami->file=file; | 422 | ami->file = file; |
423 | ami->line=line; | 423 | ami->line = line; |
424 | ami->info=info; | 424 | ami->info = info; |
425 | ami->references=1; | 425 | ami->references = 1; |
426 | ami->next=NULL; | 426 | ami->next = NULL; |
427 | 427 | ||
428 | if ((amim=lh_APP_INFO_insert(amih,ami)) != NULL) | 428 | if ((amim = lh_APP_INFO_insert(amih, ami)) != NULL) { |
429 | { | ||
430 | #ifdef LEVITTE_DEBUG_MEM | 429 | #ifdef LEVITTE_DEBUG_MEM |
431 | if (CRYPTO_THREADID_cmp(&ami->threadid, &amim->threadid)) | 430 | if (CRYPTO_THREADID_cmp(&ami->threadid, &amim->threadid)) { |
432 | { | ||
433 | fprintf(stderr, "CRYPTO_push_info(): previous info has other thread ID (%lu) than the current thread (%lu)!!!!\n", | 431 | fprintf(stderr, "CRYPTO_push_info(): previous info has other thread ID (%lu) than the current thread (%lu)!!!!\n", |
434 | CRYPTO_THREADID_hash(&amim->threadid), | 432 | CRYPTO_THREADID_hash(&amim->threadid), |
435 | CRYPTO_THREADID_hash(&ami->threadid)); | 433 | CRYPTO_THREADID_hash(&ami->threadid)); |
436 | abort(); | 434 | abort(); |
437 | } | ||
438 | #endif | ||
439 | ami->next=amim; | ||
440 | } | 435 | } |
441 | err: | 436 | #endif |
442 | MemCheck_on(); /* release MALLOC2 lock */ | 437 | ami->next = amim; |
443 | } | 438 | } |
444 | 439 | err: | |
445 | return(ret); | 440 | MemCheck_on(); /* release MALLOC2 lock */ |
446 | } | 441 | } |
447 | 442 | ||
448 | int CRYPTO_pop_info(void) | 443 | return (ret); |
449 | { | 444 | } |
450 | int ret=0; | 445 | |
446 | int | ||
447 | CRYPTO_pop_info(void) | ||
448 | { | ||
449 | int ret = 0; | ||
451 | 450 | ||
452 | if (is_MemCheck_on()) /* _must_ be true, or something went severely wrong */ | 451 | if (is_MemCheck_on()) /* _must_ be true, or something went severely wrong */ |
453 | { | 452 | { |
454 | MemCheck_off(); /* obtain MALLOC2 lock */ | 453 | MemCheck_off(); /* obtain MALLOC2 lock */ |
455 | 454 | ||
456 | ret=(pop_info() != NULL); | 455 | ret = (pop_info() != NULL); |
457 | 456 | ||
458 | MemCheck_on(); /* release MALLOC2 lock */ | 457 | MemCheck_on(); /* release MALLOC2 lock */ |
459 | } | ||
460 | return(ret); | ||
461 | } | 458 | } |
459 | return (ret); | ||
460 | } | ||
462 | 461 | ||
463 | int CRYPTO_remove_all_info(void) | 462 | int |
464 | { | 463 | CRYPTO_remove_all_info(void) |
465 | int ret=0; | 464 | { |
465 | int ret = 0; | ||
466 | 466 | ||
467 | if (is_MemCheck_on()) /* _must_ be true */ | 467 | if (is_MemCheck_on()) /* _must_ be true */ |
468 | { | 468 | { |
469 | MemCheck_off(); /* obtain MALLOC2 lock */ | 469 | MemCheck_off(); /* obtain MALLOC2 lock */ |
470 | 470 | ||
471 | while(pop_info() != NULL) | 471 | while (pop_info() != NULL) |
472 | ret++; | 472 | ret++; |
473 | 473 | ||
474 | MemCheck_on(); /* release MALLOC2 lock */ | 474 | MemCheck_on(); /* release MALLOC2 lock */ |
475 | } | ||
476 | return(ret); | ||
477 | } | 475 | } |
476 | return (ret); | ||
477 | } | ||
478 | 478 | ||
479 | 479 | ||
480 | static unsigned long break_order_num=0; | 480 | static unsigned long break_order_num = 0; |
481 | void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, | 481 | void |
482 | int before_p) | 482 | CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, |
483 | { | 483 | int before_p) |
484 | MEM *m,*mm; | 484 | { |
485 | APP_INFO tmp,*amim; | 485 | MEM *m, *mm; |
486 | APP_INFO tmp, *amim; | ||
486 | 487 | ||
487 | switch(before_p & 127) | 488 | switch (before_p & 127) { |
488 | { | ||
489 | case 0: | 489 | case 0: |
490 | break; | 490 | break; |
491 | case 1: | 491 | case 1: |
492 | if (addr == NULL) | 492 | if (addr == NULL) |
493 | break; | 493 | break; |
494 | 494 | ||
495 | if (is_MemCheck_on()) | 495 | if (is_MemCheck_on()) { |
496 | { | ||
497 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ | 496 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ |
498 | if ((m=(MEM *)OPENSSL_malloc(sizeof(MEM))) == NULL) | 497 | if ((m = (MEM *)OPENSSL_malloc(sizeof(MEM))) == NULL) { |
499 | { | ||
500 | OPENSSL_free(addr); | 498 | OPENSSL_free(addr); |
501 | MemCheck_on(); /* release MALLOC2 lock | 499 | MemCheck_on(); /* release MALLOC2 lock |
502 | * if num_disabled drops to 0 */ | 500 | * if num_disabled drops to 0 */ |
503 | return; | 501 | return; |
504 | } | 502 | } |
505 | if (mh == NULL) | 503 | if (mh == NULL) { |
506 | { | 504 | if ((mh = lh_MEM_new()) == NULL) { |
507 | if ((mh=lh_MEM_new()) == NULL) | ||
508 | { | ||
509 | OPENSSL_free(addr); | 505 | OPENSSL_free(addr); |
510 | OPENSSL_free(m); | 506 | OPENSSL_free(m); |
511 | addr=NULL; | 507 | addr = NULL; |
512 | goto err; | 508 | goto err; |
513 | } | ||
514 | } | 509 | } |
510 | } | ||
515 | 511 | ||
516 | m->addr=addr; | 512 | m->addr = addr; |
517 | m->file=file; | 513 | m->file = file; |
518 | m->line=line; | 514 | m->line = line; |
519 | m->num=num; | 515 | m->num = num; |
520 | if (options & V_CRYPTO_MDEBUG_THREAD) | 516 | if (options & V_CRYPTO_MDEBUG_THREAD) |
521 | CRYPTO_THREADID_current(&m->threadid); | 517 | CRYPTO_THREADID_current(&m->threadid); |
522 | else | 518 | else |
523 | memset(&m->threadid, 0, sizeof(m->threadid)); | 519 | memset(&m->threadid, 0, sizeof(m->threadid)); |
524 | 520 | ||
525 | if (order == break_order_num) | 521 | if (order == break_order_num) { |
526 | { | ||
527 | /* BREAK HERE */ | 522 | /* BREAK HERE */ |
528 | m->order=order; | 523 | m->order = order; |
529 | } | 524 | } |
530 | m->order=order++; | 525 | m->order = order++; |
531 | #ifdef LEVITTE_DEBUG_MEM | 526 | #ifdef LEVITTE_DEBUG_MEM |
532 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] %c 0x%p (%d)\n", | 527 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] %c 0x%p (%d)\n", |
533 | m->order, | 528 | m->order, |
534 | (before_p & 128) ? '*' : '+', | 529 | (before_p & 128) ? '*' : '+', |
535 | m->addr, m->num); | 530 | m->addr, m->num); |
536 | #endif | 531 | #endif |
537 | if (options & V_CRYPTO_MDEBUG_TIME) | 532 | if (options & V_CRYPTO_MDEBUG_TIME) |
538 | m->time=time(NULL); | 533 | m->time = time(NULL); |
539 | else | 534 | else |
540 | m->time=0; | 535 | m->time = 0; |
541 | 536 | ||
542 | CRYPTO_THREADID_current(&tmp.threadid); | 537 | CRYPTO_THREADID_current(&tmp.threadid); |
543 | m->app_info=NULL; | 538 | m->app_info = NULL; |
544 | if (amih != NULL | 539 | if (amih != NULL && |
545 | && (amim=lh_APP_INFO_retrieve(amih,&tmp)) != NULL) | 540 | (amim = lh_APP_INFO_retrieve(amih, &tmp)) != NULL) { |
546 | { | ||
547 | m->app_info = amim; | 541 | m->app_info = amim; |
548 | amim->references++; | 542 | amim->references++; |
549 | } | 543 | } |
550 | 544 | ||
551 | if ((mm=lh_MEM_insert(mh, m)) != NULL) | 545 | if ((mm = lh_MEM_insert(mh, m)) != NULL) { |
552 | { | ||
553 | /* Not good, but don't sweat it */ | 546 | /* Not good, but don't sweat it */ |
554 | if (mm->app_info != NULL) | 547 | if (mm->app_info != NULL) { |
555 | { | ||
556 | mm->app_info->references--; | 548 | mm->app_info->references--; |
557 | } | ||
558 | OPENSSL_free(mm); | ||
559 | } | 549 | } |
560 | err: | 550 | OPENSSL_free(mm); |
551 | } | ||
552 | err: | ||
561 | MemCheck_on(); /* release MALLOC2 lock | 553 | MemCheck_on(); /* release MALLOC2 lock |
562 | * if num_disabled drops to 0 */ | 554 | * if num_disabled drops to 0 */ |
563 | } | ||
564 | break; | ||
565 | } | 555 | } |
566 | return; | 556 | break; |
567 | } | 557 | } |
558 | return; | ||
559 | } | ||
568 | 560 | ||
569 | void CRYPTO_dbg_free(void *addr, int before_p) | 561 | void |
570 | { | 562 | CRYPTO_dbg_free(void *addr, int before_p) |
571 | MEM m,*mp; | 563 | { |
564 | MEM m, *mp; | ||
572 | 565 | ||
573 | switch(before_p) | 566 | switch (before_p) { |
574 | { | ||
575 | case 0: | 567 | case 0: |
576 | if (addr == NULL) | 568 | if (addr == NULL) |
577 | break; | 569 | break; |
578 | 570 | ||
579 | if (is_MemCheck_on() && (mh != NULL)) | 571 | if (is_MemCheck_on() && (mh != NULL)) { |
580 | { | ||
581 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ | 572 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ |
582 | 573 | ||
583 | m.addr=addr; | 574 | m.addr = addr; |
584 | mp=lh_MEM_delete(mh,&m); | 575 | mp = lh_MEM_delete(mh, &m); |
585 | if (mp != NULL) | 576 | if (mp != NULL) { |
586 | { | ||
587 | #ifdef LEVITTE_DEBUG_MEM | 577 | #ifdef LEVITTE_DEBUG_MEM |
588 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] - 0x%p (%d)\n", | 578 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] - 0x%p (%d)\n", |
589 | mp->order, mp->addr, mp->num); | 579 | mp->order, mp->addr, mp->num); |
590 | #endif | 580 | #endif |
591 | if (mp->app_info != NULL) | 581 | if (mp->app_info != NULL) |
592 | app_info_free(mp->app_info); | 582 | app_info_free(mp->app_info); |
593 | OPENSSL_free(mp); | 583 | OPENSSL_free(mp); |
594 | } | 584 | } |
595 | 585 | ||
596 | MemCheck_on(); /* release MALLOC2 lock | 586 | MemCheck_on(); /* release MALLOC2 lock |
597 | * if num_disabled drops to 0 */ | 587 | * if num_disabled drops to 0 */ |
598 | } | 588 | } |
599 | break; | 589 | break; |
600 | case 1: | 590 | case 1: |
601 | break; | 591 | break; |
602 | } | ||
603 | } | 592 | } |
593 | } | ||
604 | 594 | ||
605 | void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, | 595 | void |
606 | const char *file, int line, int before_p) | 596 | CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, |
607 | { | 597 | const char *file, int line, int before_p) |
608 | MEM m,*mp; | 598 | { |
599 | MEM m, *mp; | ||
609 | 600 | ||
610 | #ifdef LEVITTE_DEBUG_MEM | 601 | #ifdef LEVITTE_DEBUG_MEM |
611 | fprintf(stderr, "LEVITTE_DEBUG_MEM: --> CRYPTO_dbg_malloc(addr1 = %p, addr2 = %p, num = %d, file = \"%s\", line = %d, before_p = %d)\n", | 602 | fprintf(stderr, "LEVITTE_DEBUG_MEM: --> CRYPTO_dbg_malloc(addr1 = %p, addr2 = %p, num = %d, file = \"%s\", line = %d, before_p = %d)\n", |
612 | addr1, addr2, num, file, line, before_p); | 603 | addr1, addr2, num, file, line, before_p); |
613 | #endif | 604 | #endif |
614 | 605 | ||
615 | switch(before_p) | 606 | switch (before_p) { |
616 | { | ||
617 | case 0: | 607 | case 0: |
618 | break; | 608 | break; |
619 | case 1: | 609 | case 1: |
620 | if (addr2 == NULL) | 610 | if (addr2 == NULL) |
621 | break; | 611 | break; |
622 | 612 | ||
623 | if (addr1 == NULL) | 613 | if (addr1 == NULL) { |
624 | { | ||
625 | CRYPTO_dbg_malloc(addr2, num, file, line, 128 | before_p); | 614 | CRYPTO_dbg_malloc(addr2, num, file, line, 128 | before_p); |
626 | break; | 615 | break; |
627 | } | 616 | } |
628 | 617 | ||
629 | if (is_MemCheck_on()) | 618 | if (is_MemCheck_on()) { |
630 | { | ||
631 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ | 619 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ |
632 | 620 | ||
633 | m.addr=addr1; | 621 | m.addr = addr1; |
634 | mp=lh_MEM_delete(mh,&m); | 622 | mp = lh_MEM_delete(mh, &m); |
635 | if (mp != NULL) | 623 | if (mp != NULL) { |
636 | { | ||
637 | #ifdef LEVITTE_DEBUG_MEM | 624 | #ifdef LEVITTE_DEBUG_MEM |
638 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] * 0x%p (%d) -> 0x%p (%d)\n", | 625 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] * 0x%p (%d) -> 0x%p (%d)\n", |
639 | mp->order, | 626 | mp->order, |
640 | mp->addr, mp->num, | 627 | mp->addr, mp->num, |
641 | addr2, num); | 628 | addr2, num); |
642 | #endif | 629 | #endif |
643 | mp->addr=addr2; | 630 | mp->addr = addr2; |
644 | mp->num=num; | 631 | mp->num = num; |
645 | (void)lh_MEM_insert(mh,mp); | 632 | (void)lh_MEM_insert(mh, mp); |
646 | } | 633 | } |
647 | 634 | ||
648 | MemCheck_on(); /* release MALLOC2 lock | 635 | MemCheck_on(); /* release MALLOC2 lock |
649 | * if num_disabled drops to 0 */ | 636 | * if num_disabled drops to 0 */ |
650 | } | ||
651 | break; | ||
652 | } | 637 | } |
653 | return; | 638 | break; |
654 | } | 639 | } |
640 | return; | ||
641 | } | ||
655 | 642 | ||
656 | 643 | ||
657 | typedef struct mem_leak_st | 644 | typedef struct mem_leak_st { |
658 | { | ||
659 | BIO *bio; | 645 | BIO *bio; |
660 | int chunks; | 646 | int chunks; |
661 | long bytes; | 647 | long bytes; |
662 | } MEM_LEAK; | 648 | } MEM_LEAK; |
663 | 649 | ||
664 | static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l) | 650 | static void |
665 | { | 651 | print_leak_doall_arg(const MEM *m, MEM_LEAK *l) |
652 | { | ||
666 | char buf[1024]; | 653 | char buf[1024]; |
667 | char *bufp = buf; | 654 | char *bufp = buf; |
668 | APP_INFO *amip; | 655 | APP_INFO *amip; |
@@ -672,89 +659,83 @@ static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l) | |||
672 | 659 | ||
673 | #define BUF_REMAIN (sizeof buf - (size_t)(bufp - buf)) | 660 | #define BUF_REMAIN (sizeof buf - (size_t)(bufp - buf)) |
674 | 661 | ||
675 | if(m->addr == (char *)l->bio) | 662 | if (m->addr == (char *)l->bio) |
676 | return; | 663 | return; |
677 | 664 | ||
678 | if (options & V_CRYPTO_MDEBUG_TIME) | 665 | if (options & V_CRYPTO_MDEBUG_TIME) { |
679 | { | ||
680 | lcl = localtime(&m->time); | 666 | lcl = localtime(&m->time); |
681 | 667 | ||
682 | BIO_snprintf(bufp, BUF_REMAIN, "[%02d:%02d:%02d] ", | 668 | BIO_snprintf(bufp, BUF_REMAIN, "[%02d:%02d:%02d] ", |
683 | lcl->tm_hour,lcl->tm_min,lcl->tm_sec); | 669 | lcl->tm_hour, lcl->tm_min, lcl->tm_sec); |
684 | bufp += strlen(bufp); | 670 | bufp += strlen(bufp); |
685 | } | 671 | } |
686 | 672 | ||
687 | BIO_snprintf(bufp, BUF_REMAIN, "%5lu file=%s, line=%d, ", | 673 | BIO_snprintf(bufp, BUF_REMAIN, "%5lu file=%s, line=%d, ", |
688 | m->order,m->file,m->line); | 674 | m->order, m->file, m->line); |
689 | bufp += strlen(bufp); | 675 | bufp += strlen(bufp); |
690 | 676 | ||
691 | if (options & V_CRYPTO_MDEBUG_THREAD) | 677 | if (options & V_CRYPTO_MDEBUG_THREAD) { |
692 | { | ||
693 | BIO_snprintf(bufp, BUF_REMAIN, "thread=%lu, ", | 678 | BIO_snprintf(bufp, BUF_REMAIN, "thread=%lu, ", |
694 | CRYPTO_THREADID_hash(&m->threadid)); | 679 | CRYPTO_THREADID_hash(&m->threadid)); |
695 | bufp += strlen(bufp); | 680 | bufp += strlen(bufp); |
696 | } | 681 | } |
697 | 682 | ||
698 | BIO_snprintf(bufp, BUF_REMAIN, "number=%d, address=%08lX\n", | 683 | BIO_snprintf(bufp, BUF_REMAIN, "number=%d, address=%08lX\n", |
699 | m->num,(unsigned long)m->addr); | 684 | m->num,(unsigned long)m->addr); |
700 | bufp += strlen(bufp); | 685 | bufp += strlen(bufp); |
701 | 686 | ||
702 | BIO_puts(l->bio,buf); | 687 | BIO_puts(l->bio, buf); |
703 | 688 | ||
704 | l->chunks++; | 689 | l->chunks++; |
705 | l->bytes+=m->num; | 690 | l->bytes += m->num; |
706 | 691 | ||
707 | amip=m->app_info; | 692 | amip = m->app_info; |
708 | ami_cnt=0; | 693 | ami_cnt = 0; |
709 | if (!amip) | 694 | if (!amip) |
710 | return; | 695 | return; |
711 | CRYPTO_THREADID_cpy(&ti, &amip->threadid); | 696 | CRYPTO_THREADID_cpy(&ti, &amip->threadid); |
712 | 697 | ||
713 | do | 698 | do { |
714 | { | ||
715 | int buf_len; | 699 | int buf_len; |
716 | int info_len; | 700 | int info_len; |
717 | 701 | ||
718 | ami_cnt++; | 702 | ami_cnt++; |
719 | memset(buf,'>',ami_cnt); | 703 | memset(buf, '>', ami_cnt); |
720 | BIO_snprintf(buf + ami_cnt, sizeof buf - ami_cnt, | 704 | BIO_snprintf(buf + ami_cnt, sizeof buf - ami_cnt, |
721 | " thread=%lu, file=%s, line=%d, info=\"", | 705 | " thread=%lu, file=%s, line=%d, info=\"", |
722 | CRYPTO_THREADID_hash(&amip->threadid), amip->file, | 706 | CRYPTO_THREADID_hash(&amip->threadid), amip->file, |
723 | amip->line); | 707 | amip->line); |
724 | buf_len=strlen(buf); | 708 | buf_len = strlen(buf); |
725 | info_len=strlen(amip->info); | 709 | info_len = strlen(amip->info); |
726 | if (128 - buf_len - 3 < info_len) | 710 | if (128 - buf_len - 3 < info_len) { |
727 | { | ||
728 | memcpy(buf + buf_len, amip->info, 128 - buf_len - 3); | 711 | memcpy(buf + buf_len, amip->info, 128 - buf_len - 3); |
729 | buf_len = 128 - 3; | 712 | buf_len = 128 - 3; |
730 | } | 713 | } else { |
731 | else | ||
732 | { | ||
733 | BUF_strlcpy(buf + buf_len, amip->info, | 714 | BUF_strlcpy(buf + buf_len, amip->info, |
734 | sizeof buf - buf_len); | 715 | sizeof buf - buf_len); |
735 | buf_len = strlen(buf); | 716 | buf_len = strlen(buf); |
736 | } | 717 | } |
737 | BIO_snprintf(buf + buf_len, sizeof buf - buf_len, "\"\n"); | 718 | BIO_snprintf(buf + buf_len, sizeof buf - buf_len, "\"\n"); |
738 | 719 | ||
739 | BIO_puts(l->bio,buf); | 720 | BIO_puts(l->bio, buf); |
740 | 721 | ||
741 | amip = amip->next; | 722 | amip = amip->next; |
742 | } | 723 | } while (amip && !CRYPTO_THREADID_cmp(&amip->threadid, &ti)); |
743 | while(amip && !CRYPTO_THREADID_cmp(&amip->threadid, &ti)); | ||
744 | 724 | ||
745 | #ifdef LEVITTE_DEBUG_MEM | 725 | #ifdef LEVITTE_DEBUG_MEM |
746 | if (amip) | 726 | if (amip) { |
747 | { | ||
748 | fprintf(stderr, "Thread switch detected in backtrace!!!!\n"); | 727 | fprintf(stderr, "Thread switch detected in backtrace!!!!\n"); |
749 | abort(); | 728 | abort(); |
750 | } | ||
751 | #endif | ||
752 | } | 729 | } |
730 | #endif | ||
731 | } | ||
753 | 732 | ||
754 | static IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, const MEM, MEM_LEAK) | 733 | static |
734 | IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, const MEM, MEM_LEAK) | ||
755 | 735 | ||
756 | void CRYPTO_mem_leaks(BIO *b) | 736 | void |
757 | { | 737 | CRYPTO_mem_leaks(BIO *b) |
738 | { | ||
758 | MEM_LEAK ml; | 739 | MEM_LEAK ml; |
759 | 740 | ||
760 | if (mh == NULL && amih == NULL) | 741 | if (mh == NULL && amih == NULL) |
@@ -762,22 +743,19 @@ void CRYPTO_mem_leaks(BIO *b) | |||
762 | 743 | ||
763 | MemCheck_off(); /* obtain MALLOC2 lock */ | 744 | MemCheck_off(); /* obtain MALLOC2 lock */ |
764 | 745 | ||
765 | ml.bio=b; | 746 | ml.bio = b; |
766 | ml.bytes=0; | 747 | ml.bytes = 0; |
767 | ml.chunks=0; | 748 | ml.chunks = 0; |
768 | if (mh != NULL) | 749 | if (mh != NULL) |
769 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak), MEM_LEAK, | 750 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak), |
770 | &ml); | 751 | MEM_LEAK, &ml); |
771 | if (ml.chunks != 0) | 752 | if (ml.chunks != 0) { |
772 | { | 753 | BIO_printf(b, "%ld bytes leaked in %d chunks\n", |
773 | BIO_printf(b,"%ld bytes leaked in %d chunks\n", | 754 | ml.bytes, ml.chunks); |
774 | ml.bytes,ml.chunks); | ||
775 | #ifdef CRYPTO_MDEBUG_ABORT | 755 | #ifdef CRYPTO_MDEBUG_ABORT |
776 | abort(); | 756 | abort(); |
777 | #endif | 757 | #endif |
778 | } | 758 | } else { |
779 | else | ||
780 | { | ||
781 | /* Make sure that, if we found no leaks, memory-leak debugging itself | 759 | /* Make sure that, if we found no leaks, memory-leak debugging itself |
782 | * does not introduce memory leaks (which might irritate | 760 | * does not introduce memory leaks (which might irritate |
783 | * external debugging tools). | 761 | * external debugging tools). |
@@ -802,43 +780,43 @@ void CRYPTO_mem_leaks(BIO *b) | |||
802 | old_mh_mode = mh_mode; | 780 | old_mh_mode = mh_mode; |
803 | mh_mode = CRYPTO_MEM_CHECK_OFF; | 781 | mh_mode = CRYPTO_MEM_CHECK_OFF; |
804 | 782 | ||
805 | if (mh != NULL) | 783 | if (mh != NULL) { |
806 | { | ||
807 | lh_MEM_free(mh); | 784 | lh_MEM_free(mh); |
808 | mh = NULL; | 785 | mh = NULL; |
809 | } | 786 | } |
810 | if (amih != NULL) | 787 | if (amih != NULL) { |
811 | { | 788 | if (lh_APP_INFO_num_items(amih) == 0) { |
812 | if (lh_APP_INFO_num_items(amih) == 0) | ||
813 | { | ||
814 | lh_APP_INFO_free(amih); | 789 | lh_APP_INFO_free(amih); |
815 | amih = NULL; | 790 | amih = NULL; |
816 | } | ||
817 | } | 791 | } |
792 | } | ||
818 | 793 | ||
819 | mh_mode = old_mh_mode; | 794 | mh_mode = old_mh_mode; |
820 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); | 795 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); |
821 | } | ||
822 | MemCheck_on(); /* release MALLOC2 lock */ | ||
823 | } | 796 | } |
797 | MemCheck_on(); /* release MALLOC2 lock */ | ||
798 | } | ||
824 | 799 | ||
825 | #ifndef OPENSSL_NO_FP_API | 800 | #ifndef OPENSSL_NO_FP_API |
826 | void CRYPTO_mem_leaks_fp(FILE *fp) | 801 | void |
827 | { | 802 | CRYPTO_mem_leaks_fp(FILE *fp) |
803 | { | ||
828 | BIO *b; | 804 | BIO *b; |
829 | 805 | ||
830 | if (mh == NULL) return; | 806 | if (mh == NULL) |
807 | return; | ||
831 | /* Need to turn off memory checking when allocated BIOs ... especially | 808 | /* Need to turn off memory checking when allocated BIOs ... especially |
832 | * as we're creating them at a time when we're trying to check we've not | 809 | * as we're creating them at a time when we're trying to check we've not |
833 | * left anything un-free()'d!! */ | 810 | * left anything un-free()'d!! */ |
834 | MemCheck_off(); | 811 | MemCheck_off(); |
835 | b = BIO_new(BIO_s_file()); | 812 | b = BIO_new(BIO_s_file()); |
836 | MemCheck_on(); | 813 | MemCheck_on(); |
837 | if(!b) return; | 814 | if (!b) |
838 | BIO_set_fp(b,fp,BIO_NOCLOSE); | 815 | return; |
816 | BIO_set_fp(b, fp, BIO_NOCLOSE); | ||
839 | CRYPTO_mem_leaks(b); | 817 | CRYPTO_mem_leaks(b); |
840 | BIO_free(b); | 818 | BIO_free(b); |
841 | } | 819 | } |
842 | #endif | 820 | #endif |
843 | 821 | ||
844 | 822 | ||
@@ -857,18 +835,21 @@ void CRYPTO_mem_leaks_fp(FILE *fp) | |||
857 | 835 | ||
858 | typedef CRYPTO_MEM_LEAK_CB *PCRYPTO_MEM_LEAK_CB; | 836 | typedef CRYPTO_MEM_LEAK_CB *PCRYPTO_MEM_LEAK_CB; |
859 | 837 | ||
860 | static void cb_leak_doall_arg(const MEM *m, PCRYPTO_MEM_LEAK_CB *cb) | 838 | static void |
861 | { | 839 | cb_leak_doall_arg(const MEM *m, PCRYPTO_MEM_LEAK_CB *cb) |
862 | (*cb)(m->order,m->file,m->line,m->num,m->addr); | 840 | { |
863 | } | 841 | (*cb)(m->order, m->file, m->line, m->num, m->addr); |
842 | } | ||
864 | 843 | ||
865 | static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, const MEM, PCRYPTO_MEM_LEAK_CB) | 844 | static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, const MEM, PCRYPTO_MEM_LEAK_CB) |
866 | 845 | ||
867 | void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb) | 846 | void |
868 | { | 847 | CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb) |
869 | if (mh == NULL) return; | 848 | { |
849 | if (mh == NULL) | ||
850 | return; | ||
870 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); | 851 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); |
871 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(cb_leak), PCRYPTO_MEM_LEAK_CB, | 852 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(cb_leak), PCRYPTO_MEM_LEAK_CB, |
872 | &cb); | 853 | &cb); |
873 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); | 854 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); |
874 | } | 855 | } |
diff --git a/src/lib/libcrypto/o_dir_test.c b/src/lib/libcrypto/o_dir_test.c index 238717c110..2973458a94 100644 --- a/src/lib/libcrypto/o_dir_test.c +++ b/src/lib/libcrypto/o_dir_test.c | |||
@@ -43,26 +43,24 @@ | |||
43 | #error "No supported platform defined!" | 43 | #error "No supported platform defined!" |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | int main() | 46 | int |
47 | main() | ||
47 | { | 48 | { |
48 | OPENSSL_DIR_CTX *ctx = NULL; | 49 | OPENSSL_DIR_CTX *ctx = NULL; |
49 | const char *result; | 50 | const char *result; |
50 | 51 | ||
51 | while((result = OPENSSL_DIR_read(&ctx, CURRDIR)) != NULL) | 52 | while ((result = OPENSSL_DIR_read(&ctx, CURRDIR)) != NULL) { |
52 | { | 53 | printf("%s\n", result); |
53 | printf("%s\n", result); | 54 | } |
54 | } | ||
55 | 55 | ||
56 | if (errno) | 56 | if (errno) { |
57 | { | 57 | perror("test_dir"); |
58 | perror("test_dir"); | 58 | exit(1); |
59 | exit(1); | 59 | } |
60 | } | ||
61 | 60 | ||
62 | if (!OPENSSL_DIR_end(&ctx)) | 61 | if (!OPENSSL_DIR_end(&ctx)) { |
63 | { | 62 | perror("test_dir"); |
64 | perror("test_dir"); | 63 | exit(2); |
65 | exit(2); | 64 | } |
66 | } | 65 | exit(0); |
67 | exit(0); | ||
68 | } | 66 | } |
diff --git a/src/lib/libcrypto/o_fips.c b/src/lib/libcrypto/o_fips.c index f6d1b21855..9c185cfb18 100644 --- a/src/lib/libcrypto/o_fips.c +++ b/src/lib/libcrypto/o_fips.c | |||
@@ -62,18 +62,20 @@ | |||
62 | #include <openssl/rand.h> | 62 | #include <openssl/rand.h> |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | int FIPS_mode(void) | 65 | int |
66 | { | 66 | FIPS_mode(void) |
67 | { | ||
67 | OPENSSL_init(); | 68 | OPENSSL_init(); |
68 | #ifdef OPENSSL_FIPS | 69 | #ifdef OPENSSL_FIPS |
69 | return FIPS_module_mode(); | 70 | return FIPS_module_mode(); |
70 | #else | 71 | #else |
71 | return 0; | 72 | return 0; |
72 | #endif | 73 | #endif |
73 | } | 74 | } |
74 | 75 | ||
75 | int FIPS_mode_set(int r) | 76 | int |
76 | { | 77 | FIPS_mode_set(int r) |
78 | { | ||
77 | OPENSSL_init(); | 79 | OPENSSL_init(); |
78 | #ifdef OPENSSL_FIPS | 80 | #ifdef OPENSSL_FIPS |
79 | #ifndef FIPS_AUTH_USER_PASS | 81 | #ifndef FIPS_AUTH_USER_PASS |
@@ -92,5 +94,4 @@ int FIPS_mode_set(int r) | |||
92 | CRYPTOerr(CRYPTO_F_FIPS_MODE_SET, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED); | 94 | CRYPTOerr(CRYPTO_F_FIPS_MODE_SET, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED); |
93 | return 0; | 95 | return 0; |
94 | #endif | 96 | #endif |
95 | } | 97 | } |
96 | |||
diff --git a/src/lib/libcrypto/o_init.c b/src/lib/libcrypto/o_init.c index db4cdc443b..07c8e0d694 100644 --- a/src/lib/libcrypto/o_init.c +++ b/src/lib/libcrypto/o_init.c | |||
@@ -63,8 +63,9 @@ | |||
63 | * Currently only sets FIPS callbacks | 63 | * Currently only sets FIPS callbacks |
64 | */ | 64 | */ |
65 | 65 | ||
66 | void OPENSSL_init(void) | 66 | void |
67 | { | 67 | OPENSSL_init(void) |
68 | { | ||
68 | static int done = 0; | 69 | static int done = 0; |
69 | if (done) | 70 | if (done) |
70 | return; | 71 | return; |
@@ -78,5 +79,4 @@ void OPENSSL_init(void) | |||
78 | #if 0 | 79 | #if 0 |
79 | fprintf(stderr, "Called OPENSSL_init\n"); | 80 | fprintf(stderr, "Called OPENSSL_init\n"); |
80 | #endif | 81 | #endif |
81 | } | 82 | } |
82 | |||
diff --git a/src/lib/libcrypto/o_str.c b/src/lib/libcrypto/o_str.c index 56104a6c34..c3ab1f8093 100644 --- a/src/lib/libcrypto/o_str.c +++ b/src/lib/libcrypto/o_str.c | |||
@@ -66,17 +66,18 @@ | |||
66 | # include <strings.h> | 66 | # include <strings.h> |
67 | #endif | 67 | #endif |
68 | 68 | ||
69 | int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n) | 69 | int |
70 | { | 70 | OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n) |
71 | { | ||
71 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) | 72 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) |
72 | while (*str1 && *str2 && n) | 73 | while (*str1 && *str2 && n) { |
73 | { | ||
74 | int res = toupper(*str1) - toupper(*str2); | 74 | int res = toupper(*str1) - toupper(*str2); |
75 | if (res) return res < 0 ? -1 : 1; | 75 | if (res) |
76 | return res < 0 ? -1 : 1; | ||
76 | str1++; | 77 | str1++; |
77 | str2++; | 78 | str2++; |
78 | n--; | 79 | n--; |
79 | } | 80 | } |
80 | if (n == 0) | 81 | if (n == 0) |
81 | return 0; | 82 | return 0; |
82 | if (*str1) | 83 | if (*str1) |
@@ -90,22 +91,25 @@ int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n) | |||
90 | * defined as well. */ | 91 | * defined as well. */ |
91 | return strncasecmp(str1, str2, n); | 92 | return strncasecmp(str1, str2, n); |
92 | #endif | 93 | #endif |
93 | } | 94 | } |
94 | int OPENSSL_strcasecmp(const char *str1, const char *str2) | 95 | |
95 | { | 96 | int |
97 | OPENSSL_strcasecmp(const char *str1, const char *str2) | ||
98 | { | ||
96 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) | 99 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) |
97 | return OPENSSL_strncasecmp(str1, str2, (size_t)-1); | 100 | return OPENSSL_strncasecmp(str1, str2, (size_t) - 1); |
98 | #else | 101 | #else |
99 | return strcasecmp(str1, str2); | 102 | return strcasecmp(str1, str2); |
100 | #endif | 103 | #endif |
101 | } | 104 | } |
102 | 105 | ||
103 | int OPENSSL_memcmp(const void *v1,const void *v2,size_t n) | 106 | int |
104 | { | 107 | OPENSSL_memcmp(const void *v1, const void *v2, size_t n) |
105 | const unsigned char *c1=v1,*c2=v2; | 108 | { |
106 | int ret=0; | 109 | const unsigned char *c1 = v1, *c2 = v2; |
110 | int ret = 0; | ||
107 | 111 | ||
108 | while(n && (ret=*c1-*c2)==0) n--,c1++,c2++; | 112 | while (n && (ret = *c1 - *c2) == 0) n--, c1++, c2++; |
109 | 113 | ||
110 | return ret; | 114 | return ret; |
111 | } | 115 | } |
diff --git a/src/lib/libcrypto/o_str.h b/src/lib/libcrypto/o_str.h index dfc98494c6..e2a3fde299 100644 --- a/src/lib/libcrypto/o_str.h +++ b/src/lib/libcrypto/o_str.h | |||
@@ -63,6 +63,6 @@ | |||
63 | 63 | ||
64 | int OPENSSL_strcasecmp(const char *str1, const char *str2); | 64 | int OPENSSL_strcasecmp(const char *str1, const char *str2); |
65 | int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n); | 65 | int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n); |
66 | int OPENSSL_memcmp(const void *p1,const void *p2,size_t n); | 66 | int OPENSSL_memcmp(const void *p1, const void *p2, size_t n); |
67 | 67 | ||
68 | #endif | 68 | #endif |
diff --git a/src/lib/libcrypto/o_time.c b/src/lib/libcrypto/o_time.c index 5fb5d4e6d7..44f7ba3b8c 100644 --- a/src/lib/libcrypto/o_time.c +++ b/src/lib/libcrypto/o_time.c | |||
@@ -63,14 +63,14 @@ | |||
63 | #include <string.h> | 63 | #include <string.h> |
64 | #include "o_time.h" | 64 | #include "o_time.h" |
65 | 65 | ||
66 | struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | 66 | struct tm |
67 | { | 67 | *OPENSSL_gmtime(const time_t *timer, struct tm *result) { |
68 | struct tm *ts = NULL; | 68 | struct tm *ts = NULL; |
69 | 69 | ||
70 | #if defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_OS2) && (!defined(OPENSSL_SYS_VMS) || defined(gmtime_r)) && !defined(OPENSSL_SYS_MACOSX) && !defined(OPENSSL_SYS_SUNOS) | 70 | #if defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_OS2) && (!defined(OPENSSL_SYS_VMS) || defined(gmtime_r)) && !defined(OPENSSL_SYS_MACOSX) && !defined(OPENSSL_SYS_SUNOS) |
71 | /* should return &data, but doesn't on some systems, | 71 | /* should return &data, but doesn't on some systems, |
72 | so we don't even look at the return value */ | 72 | so we don't even look at the return value */ |
73 | gmtime_r(timer,result); | 73 | gmtime_r(timer, result); |
74 | ts = result; | 74 | ts = result; |
75 | #else | 75 | #else |
76 | ts = gmtime(timer); | 76 | ts = gmtime(timer); |
@@ -81,7 +81,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | |||
81 | ts = result; | 81 | ts = result; |
82 | #endif | 82 | #endif |
83 | return ts; | 83 | return ts; |
84 | } | 84 | } |
85 | 85 | ||
86 | /* Take a tm structure and add an offset to it. This avoids any OS issues | 86 | /* Take a tm structure and add an offset to it. This avoids any OS issues |
87 | * with restricted date types and overflows which cause the year 2038 | 87 | * with restricted date types and overflows which cause the year 2038 |
@@ -93,29 +93,27 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | |||
93 | static long date_to_julian(int y, int m, int d); | 93 | static long date_to_julian(int y, int m, int d); |
94 | static void julian_to_date(long jd, int *y, int *m, int *d); | 94 | static void julian_to_date(long jd, int *y, int *m, int *d); |
95 | 95 | ||
96 | int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec) | 96 | int |
97 | { | 97 | OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec) |
98 | { | ||
98 | int offset_hms, offset_day; | 99 | int offset_hms, offset_day; |
99 | long time_jd; | 100 | long time_jd; |
100 | int time_year, time_month, time_day; | 101 | int time_year, time_month, time_day; |
101 | /* split offset into days and day seconds */ | 102 | /* split offset into days and day seconds */ |
102 | offset_day = offset_sec / SECS_PER_DAY; | 103 | offset_day = offset_sec / SECS_PER_DAY; |
103 | /* Avoid sign issues with % operator */ | 104 | /* Avoid sign issues with % operator */ |
104 | offset_hms = offset_sec - (offset_day * SECS_PER_DAY); | 105 | offset_hms = offset_sec - (offset_day * SECS_PER_DAY); |
105 | offset_day += off_day; | 106 | offset_day += off_day; |
106 | /* Add current time seconds to offset */ | 107 | /* Add current time seconds to offset */ |
107 | offset_hms += tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; | 108 | offset_hms += tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; |
108 | /* Adjust day seconds if overflow */ | 109 | /* Adjust day seconds if overflow */ |
109 | if (offset_hms >= SECS_PER_DAY) | 110 | if (offset_hms >= SECS_PER_DAY) { |
110 | { | ||
111 | offset_day++; | 111 | offset_day++; |
112 | offset_hms -= SECS_PER_DAY; | 112 | offset_hms -= SECS_PER_DAY; |
113 | } | 113 | } else if (offset_hms < 0) { |
114 | else if (offset_hms < 0) | ||
115 | { | ||
116 | offset_day--; | 114 | offset_day--; |
117 | offset_hms += SECS_PER_DAY; | 115 | offset_hms += SECS_PER_DAY; |
118 | } | 116 | } |
119 | 117 | ||
120 | /* Convert date of time structure into a Julian day number. | 118 | /* Convert date of time structure into a Julian day number. |
121 | */ | 119 | */ |
@@ -150,22 +148,24 @@ int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec) | |||
150 | tm->tm_sec = offset_hms % 60; | 148 | tm->tm_sec = offset_hms % 60; |
151 | 149 | ||
152 | return 1; | 150 | return 1; |
153 | 151 | ||
154 | } | 152 | } |
155 | 153 | ||
156 | /* Convert date to and from julian day | 154 | /* Convert date to and from julian day |
157 | * Uses Fliegel & Van Flandern algorithm | 155 | * Uses Fliegel & Van Flandern algorithm |
158 | */ | 156 | */ |
159 | static long date_to_julian(int y, int m, int d) | 157 | static long |
158 | date_to_julian(int y, int m, int d) | ||
160 | { | 159 | { |
161 | return (1461 * (y + 4800 + (m - 14) / 12)) / 4 + | 160 | return (1461 * (y + 4800 + (m - 14) / 12)) / 4 + |
162 | (367 * (m - 2 - 12 * ((m - 14) / 12))) / 12 - | 161 | (367 * (m - 2 - 12 * ((m - 14) / 12))) / 12 - |
163 | (3 * ((y + 4900 + (m - 14) / 12) / 100)) / 4 + | 162 | (3 * ((y + 4900 + (m - 14) / 12) / 100)) / 4 + |
164 | d - 32075; | 163 | d - 32075; |
165 | } | 164 | } |
166 | 165 | ||
167 | static void julian_to_date(long jd, int *y, int *m, int *d) | 166 | static void |
168 | { | 167 | julian_to_date(long jd, int *y, int *m, int *d) |
168 | { | ||
169 | long L = jd + 68569; | 169 | long L = jd + 68569; |
170 | long n = (4 * L) / 146097; | 170 | long n = (4 * L) / 146097; |
171 | long i, j; | 171 | long i, j; |
@@ -178,7 +178,7 @@ static void julian_to_date(long jd, int *y, int *m, int *d) | |||
178 | L = j / 11; | 178 | L = j / 11; |
179 | *m = j + 2 - (12 * L); | 179 | *m = j + 2 - (12 * L); |
180 | *y = 100 * (n - 49) + i + L; | 180 | *y = 100 * (n - 49) + i + L; |
181 | } | 181 | } |
182 | 182 | ||
183 | #ifdef OPENSSL_TIME_TEST | 183 | #ifdef OPENSSL_TIME_TEST |
184 | 184 | ||
@@ -189,20 +189,21 @@ static void julian_to_date(long jd, int *y, int *m, int *d) | |||
189 | * trigger the very errors the routines fix. | 189 | * trigger the very errors the routines fix. |
190 | */ | 190 | */ |
191 | 191 | ||
192 | int main(int argc, char **argv) | 192 | int |
193 | { | 193 | main(int argc, char **argv) |
194 | { | ||
194 | long offset; | 195 | long offset; |
195 | for (offset = 0; offset < 1000000; offset++) | 196 | for (offset = 0; offset < 1000000; offset++) { |
196 | { | ||
197 | check_time(offset); | 197 | check_time(offset); |
198 | check_time(-offset); | 198 | check_time(-offset); |
199 | check_time(offset * 1000); | 199 | check_time(offset * 1000); |
200 | check_time(-offset * 1000); | 200 | check_time(-offset * 1000); |
201 | } | ||
202 | } | 201 | } |
202 | } | ||
203 | 203 | ||
204 | int check_time(long offset) | 204 | int |
205 | { | 205 | check_time(long offset) |
206 | { | ||
206 | struct tm tm1, tm2; | 207 | struct tm tm1, tm2; |
207 | time_t t1, t2; | 208 | time_t t1, t2; |
208 | time(&t1); | 209 | time(&t1); |
@@ -211,20 +212,20 @@ int check_time(long offset) | |||
211 | OPENSSL_gmtime(&t1, &tm1); | 212 | OPENSSL_gmtime(&t1, &tm1); |
212 | OPENSSL_gmtime_adj(&tm1, 0, offset); | 213 | OPENSSL_gmtime_adj(&tm1, 0, offset); |
213 | if ((tm1.tm_year == tm2.tm_year) && | 214 | if ((tm1.tm_year == tm2.tm_year) && |
214 | (tm1.tm_mon == tm2.tm_mon) && | 215 | (tm1.tm_mon == tm2.tm_mon) && |
215 | (tm1.tm_mday == tm2.tm_mday) && | 216 | (tm1.tm_mday == tm2.tm_mday) && |
216 | (tm1.tm_hour == tm2.tm_hour) && | 217 | (tm1.tm_hour == tm2.tm_hour) && |
217 | (tm1.tm_min == tm2.tm_min) && | 218 | (tm1.tm_min == tm2.tm_min) && |
218 | (tm1.tm_sec == tm2.tm_sec)) | 219 | (tm1.tm_sec == tm2.tm_sec)) |
219 | return 1; | 220 | return 1; |
220 | fprintf(stderr, "TIME ERROR!!\n"); | 221 | fprintf(stderr, "TIME ERROR!!\n"); |
221 | fprintf(stderr, "Time1: %d/%d/%d, %d:%02d:%02d\n", | 222 | fprintf(stderr, "Time1: %d/%d/%d, %d:%02d:%02d\n", |
222 | tm2.tm_mday, tm2.tm_mon + 1, tm2.tm_year + 1900, | 223 | tm2.tm_mday, tm2.tm_mon + 1, tm2.tm_year + 1900, |
223 | tm2.tm_hour, tm2.tm_min, tm2.tm_sec); | 224 | tm2.tm_hour, tm2.tm_min, tm2.tm_sec); |
224 | fprintf(stderr, "Time2: %d/%d/%d, %d:%02d:%02d\n", | 225 | fprintf(stderr, "Time2: %d/%d/%d, %d:%02d:%02d\n", |
225 | tm1.tm_mday, tm1.tm_mon + 1, tm1.tm_year + 1900, | 226 | tm1.tm_mday, tm1.tm_mon + 1, tm1.tm_year + 1900, |
226 | tm1.tm_hour, tm1.tm_min, tm1.tm_sec); | 227 | tm1.tm_hour, tm1.tm_min, tm1.tm_sec); |
227 | return 0; | 228 | return 0; |
228 | } | 229 | } |
229 | 230 | ||
230 | #endif | 231 | #endif |
diff --git a/src/lib/libcrypto/ossl_typ.h b/src/lib/libcrypto/ossl_typ.h index ea9227f6f9..ae79bf8ae4 100644 --- a/src/lib/libcrypto/ossl_typ.h +++ b/src/lib/libcrypto/ossl_typ.h | |||
@@ -182,18 +182,18 @@ typedef struct DIST_POINT_st DIST_POINT; | |||
182 | typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; | 182 | typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; |
183 | typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; | 183 | typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; |
184 | 184 | ||
185 | /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ | 185 | /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ |
186 | #define DECLARE_PKCS12_STACK_OF(type) /* Nothing */ | 186 | #define DECLARE_PKCS12_STACK_OF(type) /* Nothing */ |
187 | #define IMPLEMENT_PKCS12_STACK_OF(type) /* Nothing */ | 187 | #define IMPLEMENT_PKCS12_STACK_OF(type) /* Nothing */ |
188 | 188 | ||
189 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; | 189 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; |
190 | /* Callback types for crypto.h */ | 190 | /* Callback types for crypto.h */ |
191 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 191 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
192 | int idx, long argl, void *argp); | 192 | int idx, long argl, void *argp); |
193 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 193 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
194 | int idx, long argl, void *argp); | 194 | int idx, long argl, void *argp); |
195 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, | 195 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, |
196 | int idx, long argl, void *argp); | 196 | void *from_d, int idx, long argl, void *argp); |
197 | 197 | ||
198 | typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; | 198 | typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; |
199 | typedef struct ocsp_response_st OCSP_RESPONSE; | 199 | typedef struct ocsp_response_st OCSP_RESPONSE; |
diff --git a/src/lib/libcrypto/ppccap.c b/src/lib/libcrypto/ppccap.c index f71ba66aa3..16cc9c445e 100644 --- a/src/lib/libcrypto/ppccap.c +++ b/src/lib/libcrypto/ppccap.c | |||
@@ -15,112 +15,110 @@ static int OPENSSL_ppccap_P = 0; | |||
15 | static sigset_t all_masked; | 15 | static sigset_t all_masked; |
16 | 16 | ||
17 | #ifdef OPENSSL_BN_ASM_MONT | 17 | #ifdef OPENSSL_BN_ASM_MONT |
18 | int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num) | 18 | int |
19 | { | 19 | bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, |
20 | const BN_ULONG *np, const BN_ULONG *n0, int num) | ||
21 | { | ||
20 | int bn_mul_mont_fpu64(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); | 22 | int bn_mul_mont_fpu64(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); |
21 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); | 23 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); |
22 | 24 | ||
23 | if (sizeof(size_t)==4) | 25 | if (sizeof(size_t) == 4) { |
24 | { | ||
25 | #if (defined(__APPLE__) && defined(__MACH__)) | 26 | #if (defined(__APPLE__) && defined(__MACH__)) |
26 | if (num>=8 && (num&3)==0 && (OPENSSL_ppccap_P&PPC_FPU64)) | 27 | if (num >= 8 && (num&3) == 0 && (OPENSSL_ppccap_P&PPC_FPU64)) |
27 | return bn_mul_mont_fpu64(rp,ap,bp,np,n0,num); | 28 | return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); |
28 | #else | 29 | #else |
29 | /* boundary of 32 was experimentally determined on | 30 | /* boundary of 32 was experimentally determined on |
30 | Linux 2.6.22, might have to be adjusted on AIX... */ | 31 | Linux 2.6.22, might have to be adjusted on AIX... */ |
31 | if (num>=32 && (num&3)==0 && (OPENSSL_ppccap_P&PPC_FPU64)) | 32 | if (num >= 32 && (num&3) == 0 && (OPENSSL_ppccap_P&PPC_FPU64)) { |
32 | { | ||
33 | sigset_t oset; | 33 | sigset_t oset; |
34 | int ret; | 34 | int ret; |
35 | 35 | ||
36 | sigprocmask(SIG_SETMASK,&all_masked,&oset); | 36 | sigprocmask(SIG_SETMASK, &all_masked, &oset); |
37 | ret=bn_mul_mont_fpu64(rp,ap,bp,np,n0,num); | 37 | ret = bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); |
38 | sigprocmask(SIG_SETMASK,&oset,NULL); | 38 | sigprocmask(SIG_SETMASK, &oset, NULL); |
39 | 39 | ||
40 | return ret; | 40 | return ret; |
41 | } | ||
42 | #endif | ||
43 | } | 41 | } |
44 | else if ((OPENSSL_ppccap_P&PPC_FPU64)) | 42 | #endif |
43 | } else if ((OPENSSL_ppccap_P&PPC_FPU64)) | ||
45 | /* this is a "must" on POWER6, but run-time detection | 44 | /* this is a "must" on POWER6, but run-time detection |
46 | * is not implemented yet... */ | 45 | * is not implemented yet... */ |
47 | return bn_mul_mont_fpu64(rp,ap,bp,np,n0,num); | 46 | return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); |
48 | 47 | ||
49 | return bn_mul_mont_int(rp,ap,bp,np,n0,num); | 48 | return bn_mul_mont_int(rp, ap, bp, np, n0, num); |
50 | } | 49 | } |
51 | #endif | 50 | #endif |
52 | 51 | ||
53 | static sigjmp_buf ill_jmp; | 52 | static sigjmp_buf ill_jmp; |
54 | static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | 53 | static void ill_handler (int sig) |
54 | { | ||
55 | siglongjmp(ill_jmp, sig); | ||
56 | } | ||
55 | 57 | ||
56 | void OPENSSL_ppc64_probe(void); | 58 | void OPENSSL_ppc64_probe(void); |
57 | void OPENSSL_altivec_probe(void); | 59 | void OPENSSL_altivec_probe(void); |
58 | 60 | ||
59 | void OPENSSL_cpuid_setup(void) | 61 | void |
60 | { | 62 | OPENSSL_cpuid_setup(void) |
63 | { | ||
61 | char *e; | 64 | char *e; |
62 | struct sigaction ill_oact,ill_act; | 65 | struct sigaction ill_oact, ill_act; |
63 | sigset_t oset; | 66 | sigset_t oset; |
64 | static int trigger=0; | 67 | static int trigger = 0; |
68 | |||
69 | if (trigger) | ||
70 | return; | ||
71 | trigger = 1; | ||
65 | 72 | ||
66 | if (trigger) return; | ||
67 | trigger=1; | ||
68 | |||
69 | sigfillset(&all_masked); | 73 | sigfillset(&all_masked); |
70 | sigdelset(&all_masked,SIGILL); | 74 | sigdelset(&all_masked, SIGILL); |
71 | sigdelset(&all_masked,SIGTRAP); | 75 | sigdelset(&all_masked, SIGTRAP); |
72 | #ifdef SIGEMT | 76 | #ifdef SIGEMT |
73 | sigdelset(&all_masked,SIGEMT); | 77 | sigdelset(&all_masked, SIGEMT); |
74 | #endif | 78 | #endif |
75 | sigdelset(&all_masked,SIGFPE); | 79 | sigdelset(&all_masked, SIGFPE); |
76 | sigdelset(&all_masked,SIGBUS); | 80 | sigdelset(&all_masked, SIGBUS); |
77 | sigdelset(&all_masked,SIGSEGV); | 81 | sigdelset(&all_masked, SIGSEGV); |
78 | 82 | ||
79 | if ((e=getenv("OPENSSL_ppccap"))) | 83 | if ((e = getenv("OPENSSL_ppccap"))) { |
80 | { | 84 | OPENSSL_ppccap_P = strtoul(e, NULL, 0); |
81 | OPENSSL_ppccap_P=strtoul(e,NULL,0); | ||
82 | return; | 85 | return; |
83 | } | 86 | } |
84 | 87 | ||
85 | OPENSSL_ppccap_P = 0; | 88 | OPENSSL_ppccap_P = 0; |
86 | 89 | ||
87 | #if defined(_AIX) | 90 | #if defined(_AIX) |
88 | if (sizeof(size_t)==4 | 91 | if (sizeof(size_t) == 4 |
89 | # if defined(_SC_AIX_KERNEL_BITMODE) | 92 | # if defined(_SC_AIX_KERNEL_BITMODE) |
90 | && sysconf(_SC_AIX_KERNEL_BITMODE)!=64 | 93 | && sysconf(_SC_AIX_KERNEL_BITMODE) != 64 |
91 | # endif | 94 | # endif |
92 | ) | 95 | ) |
93 | return; | 96 | return; |
94 | #endif | 97 | #endif |
95 | 98 | ||
96 | memset(&ill_act,0,sizeof(ill_act)); | 99 | memset(&ill_act, 0, sizeof(ill_act)); |
97 | ill_act.sa_handler = ill_handler; | 100 | ill_act.sa_handler = ill_handler; |
98 | ill_act.sa_mask = all_masked; | 101 | ill_act.sa_mask = all_masked; |
99 | 102 | ||
100 | sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); | 103 | sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); |
101 | sigaction(SIGILL,&ill_act,&ill_oact); | 104 | sigaction(SIGILL, &ill_act, &ill_oact); |
102 | 105 | ||
103 | if (sizeof(size_t)==4) | 106 | if (sizeof(size_t) == 4) { |
104 | { | 107 | if (sigsetjmp(ill_jmp, 1) == 0) { |
105 | if (sigsetjmp(ill_jmp,1) == 0) | ||
106 | { | ||
107 | OPENSSL_ppc64_probe(); | 108 | OPENSSL_ppc64_probe(); |
108 | OPENSSL_ppccap_P |= PPC_FPU64; | 109 | OPENSSL_ppccap_P |= PPC_FPU64; |
109 | } | ||
110 | } | 110 | } |
111 | else | 111 | } else { |
112 | { | ||
113 | /* | 112 | /* |
114 | * Wanted code detecting POWER6 CPU and setting PPC_FPU64 | 113 | * Wanted code detecting POWER6 CPU and setting PPC_FPU64 |
115 | */ | 114 | */ |
116 | } | 115 | } |
117 | 116 | ||
118 | if (sigsetjmp(ill_jmp,1) == 0) | 117 | if (sigsetjmp(ill_jmp, 1) == 0) { |
119 | { | ||
120 | OPENSSL_altivec_probe(); | 118 | OPENSSL_altivec_probe(); |
121 | OPENSSL_ppccap_P |= PPC_ALTIVEC; | 119 | OPENSSL_ppccap_P |= PPC_ALTIVEC; |
122 | } | ||
123 | |||
124 | sigaction (SIGILL,&ill_oact,NULL); | ||
125 | sigprocmask(SIG_SETMASK,&oset,NULL); | ||
126 | } | 120 | } |
121 | |||
122 | sigaction (SIGILL, &ill_oact, NULL); | ||
123 | sigprocmask(SIG_SETMASK, &oset, NULL); | ||
124 | } | ||
diff --git a/src/lib/libcrypto/s390xcap.c b/src/lib/libcrypto/s390xcap.c index f2e94ef47e..77f6260785 100644 --- a/src/lib/libcrypto/s390xcap.c +++ b/src/lib/libcrypto/s390xcap.c | |||
@@ -7,31 +7,36 @@ | |||
7 | extern unsigned long OPENSSL_s390xcap_P[]; | 7 | extern unsigned long OPENSSL_s390xcap_P[]; |
8 | 8 | ||
9 | static sigjmp_buf ill_jmp; | 9 | static sigjmp_buf ill_jmp; |
10 | static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | 10 | static void ill_handler (int sig) |
11 | { | ||
12 | siglongjmp(ill_jmp, sig); | ||
13 | } | ||
11 | 14 | ||
12 | unsigned long OPENSSL_s390x_facilities(void); | 15 | unsigned long OPENSSL_s390x_facilities(void); |
13 | 16 | ||
14 | void OPENSSL_cpuid_setup(void) | 17 | void |
15 | { | 18 | OPENSSL_cpuid_setup(void) |
19 | { | ||
16 | sigset_t oset; | 20 | sigset_t oset; |
17 | struct sigaction ill_act,oact; | 21 | struct sigaction ill_act, oact; |
18 | 22 | ||
19 | if (OPENSSL_s390xcap_P[0]) return; | 23 | if (OPENSSL_s390xcap_P[0]) |
24 | return; | ||
20 | 25 | ||
21 | OPENSSL_s390xcap_P[0] = 1UL<<(8*sizeof(unsigned long)-1); | 26 | OPENSSL_s390xcap_P[0] = 1UL << (8*sizeof(unsigned long) - 1); |
22 | 27 | ||
23 | memset(&ill_act,0,sizeof(ill_act)); | 28 | memset(&ill_act, 0, sizeof(ill_act)); |
24 | ill_act.sa_handler = ill_handler; | 29 | ill_act.sa_handler = ill_handler; |
25 | sigfillset(&ill_act.sa_mask); | 30 | sigfillset(&ill_act.sa_mask); |
26 | sigdelset(&ill_act.sa_mask,SIGILL); | 31 | sigdelset(&ill_act.sa_mask, SIGILL); |
27 | sigdelset(&ill_act.sa_mask,SIGTRAP); | 32 | sigdelset(&ill_act.sa_mask, SIGTRAP); |
28 | sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); | 33 | sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); |
29 | sigaction (SIGILL,&ill_act,&oact); | 34 | sigaction (SIGILL, &ill_act, &oact); |
30 | 35 | ||
31 | /* protection against missing store-facility-list-extended */ | 36 | /* protection against missing store-facility-list-extended */ |
32 | if (sigsetjmp(ill_jmp,1) == 0) | 37 | if (sigsetjmp(ill_jmp, 1) == 0) |
33 | OPENSSL_s390x_facilities(); | 38 | OPENSSL_s390x_facilities(); |
34 | 39 | ||
35 | sigaction (SIGILL,&oact,NULL); | 40 | sigaction (SIGILL, &oact, NULL); |
36 | sigprocmask(SIG_SETMASK,&oset,NULL); | 41 | sigprocmask(SIG_SETMASK, &oset, NULL); |
37 | } | 42 | } |
diff --git a/src/lib/libcrypto/sparcv9cap.c b/src/lib/libcrypto/sparcv9cap.c index 43b3ac6f81..08f7de3ec8 100644 --- a/src/lib/libcrypto/sparcv9cap.c +++ b/src/lib/libcrypto/sparcv9cap.c | |||
@@ -12,20 +12,22 @@ | |||
12 | #define SPARCV9_VIS2 (1<<3) /* reserved */ | 12 | #define SPARCV9_VIS2 (1<<3) /* reserved */ |
13 | #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ | 13 | #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ |
14 | 14 | ||
15 | static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED; | 15 | static int OPENSSL_sparcv9cap_P = SPARCV9_TICK_PRIVILEGED; |
16 | 16 | ||
17 | int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num) | 17 | int |
18 | { | 18 | bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, |
19 | int bn_mul_mont_fpu(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); | 19 | const BN_ULONG *np, const BN_ULONG *n0, int num) |
20 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); | 20 | { |
21 | 21 | int bn_mul_mont_fpu(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); | |
22 | if (num>=8 && !(num&1) && | 22 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); |
23 | (OPENSSL_sparcv9cap_P&(SPARCV9_PREFER_FPU|SPARCV9_VIS1)) == | 23 | |
24 | (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) | 24 | if (num >= 8 && !(num & 1) && |
25 | return bn_mul_mont_fpu(rp,ap,bp,np,n0,num); | 25 | (OPENSSL_sparcv9cap_P & (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) == |
26 | (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) | ||
27 | return bn_mul_mont_fpu(rp, ap, bp, np, n0, num); | ||
26 | else | 28 | else |
27 | return bn_mul_mont_int(rp,ap,bp,np,n0,num); | 29 | return bn_mul_mont_int(rp, ap, bp, np, n0, num); |
28 | } | 30 | } |
29 | 31 | ||
30 | unsigned long _sparcv9_rdtick(void); | 32 | unsigned long _sparcv9_rdtick(void); |
31 | void _sparcv9_vis1_probe(void); | 33 | void _sparcv9_vis1_probe(void); |
@@ -33,8 +35,9 @@ unsigned long _sparcv9_vis1_instrument(void); | |||
33 | void _sparcv9_vis2_probe(void); | 35 | void _sparcv9_vis2_probe(void); |
34 | void _sparcv9_fmadd_probe(void); | 36 | void _sparcv9_fmadd_probe(void); |
35 | 37 | ||
36 | unsigned long OPENSSL_rdtsc(void) | 38 | unsigned long |
37 | { | 39 | OPENSSL_rdtsc(void) |
40 | { | ||
38 | if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED) | 41 | if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED) |
39 | #if defined(__sun) && defined(__SVR4) | 42 | #if defined(__sun) && defined(__SVR4) |
40 | return gethrtime(); | 43 | return gethrtime(); |
@@ -43,7 +46,7 @@ unsigned long OPENSSL_rdtsc(void) | |||
43 | #endif | 46 | #endif |
44 | else | 47 | else |
45 | return _sparcv9_rdtick(); | 48 | return _sparcv9_rdtick(); |
46 | } | 49 | } |
47 | 50 | ||
48 | #if 0 && defined(__sun) && defined(__SVR4) | 51 | #if 0 && defined(__sun) && defined(__SVR4) |
49 | /* This code path is disabled, because of incompatibility of | 52 | /* This code path is disabled, because of incompatibility of |
@@ -54,21 +57,22 @@ unsigned long OPENSSL_rdtsc(void) | |||
54 | #include <libdevinfo.h> | 57 | #include <libdevinfo.h> |
55 | #include <sys/systeminfo.h> | 58 | #include <sys/systeminfo.h> |
56 | 59 | ||
57 | typedef di_node_t (*di_init_t)(const char *,uint_t); | 60 | typedef di_node_t (*di_init_t)(const char *, uint_t); |
58 | typedef void (*di_fini_t)(di_node_t); | 61 | typedef void (*di_fini_t)(di_node_t); |
59 | typedef char * (*di_node_name_t)(di_node_t); | 62 | typedef char * (*di_node_name_t)(di_node_t); |
60 | typedef int (*di_walk_node_t)(di_node_t,uint_t,di_node_name_t,int (*)(di_node_t,di_node_name_t)); | 63 | typedef int (*di_walk_node_t)(di_node_t, uint_t, di_node_name_t, int (*)(di_node_t, di_node_name_t)); |
61 | 64 | ||
62 | #define DLLINK(h,name) (name=(name##_t)dlsym((h),#name)) | 65 | #define DLLINK(h,name) (name=(name##_t)dlsym((h),#name)) |
63 | 66 | ||
64 | static int walk_nodename(di_node_t node, di_node_name_t di_node_name) | 67 | static int |
65 | { | 68 | walk_nodename(di_node_t node, di_node_name_t di_node_name) |
69 | { | ||
66 | char *name = (*di_node_name)(node); | 70 | char *name = (*di_node_name)(node); |
67 | 71 | ||
68 | /* This is expected to catch all UltraSPARC flavors prior T1 */ | 72 | /* This is expected to catch all UltraSPARC flavors prior T1 */ |
69 | if (!strcmp (name,"SUNW,UltraSPARC") || | 73 | if (!strcmp (name, "SUNW, UltraSPARC") || |
70 | !strncmp(name,"SUNW,UltraSPARC-I",17)) /* covers II,III,IV */ | 74 | !strncmp(name,"SUNW,UltraSPARC-I",17)) /* covers II,III,IV */ |
71 | { | 75 | { |
72 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1; | 76 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1; |
73 | 77 | ||
74 | /* %tick is privileged only on UltraSPARC-I/II, but not IIe */ | 78 | /* %tick is privileged only on UltraSPARC-I/II, but not IIe */ |
@@ -76,51 +80,48 @@ static int walk_nodename(di_node_t node, di_node_name_t di_node_name) | |||
76 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 80 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
77 | 81 | ||
78 | return DI_WALK_TERMINATE; | 82 | return DI_WALK_TERMINATE; |
79 | } | 83 | } |
80 | /* This is expected to catch remaining UltraSPARCs, such as T1 */ | 84 | /* This is expected to catch remaining UltraSPARCs, such as T1 */ |
81 | else if (!strncmp(name,"SUNW,UltraSPARC",15)) | 85 | else if (!strncmp(name, "SUNW, UltraSPARC", 15)) { |
82 | { | ||
83 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 86 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
84 | 87 | ||
85 | return DI_WALK_TERMINATE; | 88 | return DI_WALK_TERMINATE; |
86 | } | 89 | } |
87 | 90 | ||
88 | return DI_WALK_CONTINUE; | 91 | return DI_WALK_CONTINUE; |
89 | } | 92 | } |
90 | 93 | ||
91 | void OPENSSL_cpuid_setup(void) | 94 | void |
92 | { | 95 | OPENSSL_cpuid_setup(void) |
96 | { | ||
93 | void *h; | 97 | void *h; |
94 | char *e,si[256]; | 98 | char *e, si[256]; |
95 | static int trigger=0; | 99 | static int trigger = 0; |
96 | 100 | ||
97 | if (trigger) return; | 101 | if (trigger) |
98 | trigger=1; | 102 | return; |
103 | trigger = 1; | ||
99 | 104 | ||
100 | if ((e=getenv("OPENSSL_sparcv9cap"))) | 105 | if ((e = getenv("OPENSSL_sparcv9cap"))) { |
101 | { | 106 | OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0); |
102 | OPENSSL_sparcv9cap_P=strtoul(e,NULL,0); | ||
103 | return; | 107 | return; |
104 | } | 108 | } |
105 | 109 | ||
106 | if (sysinfo(SI_MACHINE,si,sizeof(si))>0) | 110 | if (sysinfo(SI_MACHINE, si, sizeof(si)) > 0) { |
107 | { | 111 | if (strcmp(si, "sun4v")) |
108 | if (strcmp(si,"sun4v")) | ||
109 | /* FPU is preferred for all CPUs, but US-T1/2 */ | 112 | /* FPU is preferred for all CPUs, but US-T1/2 */ |
110 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU; | 113 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU; |
111 | } | 114 | } |
112 | 115 | ||
113 | if (sysinfo(SI_ISALIST,si,sizeof(si))>0) | 116 | if (sysinfo(SI_ISALIST, si, sizeof(si)) > 0) { |
114 | { | 117 | if (strstr(si, "+vis")) |
115 | if (strstr(si,"+vis")) | ||
116 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; | 118 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; |
117 | if (strstr(si,"+vis2")) | 119 | if (strstr(si, "+vis2")) { |
118 | { | ||
119 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; | 120 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; |
120 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 121 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
121 | return; | 122 | return; |
122 | } | ||
123 | } | 123 | } |
124 | } | ||
124 | #ifdef M_KEEP | 125 | #ifdef M_KEEP |
125 | /* | 126 | /* |
126 | * Solaris libdevinfo.so.1 is effectively incomatible with | 127 | * Solaris libdevinfo.so.1 is effectively incomatible with |
@@ -129,109 +130,115 @@ void OPENSSL_cpuid_setup(void) | |||
129 | * free(3LIBMALLOC) called by di_fini. Prior call to | 130 | * free(3LIBMALLOC) called by di_fini. Prior call to |
130 | * mallopt(M_KEEP,0) somehow helps... But not always... | 131 | * mallopt(M_KEEP,0) somehow helps... But not always... |
131 | */ | 132 | */ |
132 | if ((h = dlopen(NULL,RTLD_LAZY))) | 133 | if ((h = dlopen(NULL, RTLD_LAZY))) { |
133 | { | 134 | union { void *p; |
134 | union { void *p; int (*f)(int,int); } sym; | 135 | int (*f)(int, int); |
135 | if ((sym.p = dlsym(h,"mallopt"))) (*sym.f)(M_KEEP,0); | 136 | } sym; |
136 | dlclose(h); | 137 | if ((sym.p = dlsym(h, "mallopt"))) (*sym.f)(M_KEEP, 0); |
137 | } | 138 | dlclose(h); |
139 | } | ||
138 | #endif | 140 | #endif |
139 | if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do | 141 | if ((h = dlopen("libdevinfo.so.1", RTLD_LAZY))) |
140 | { | 142 | do { |
141 | di_init_t di_init; | 143 | di_init_t di_init; |
142 | di_fini_t di_fini; | 144 | di_fini_t di_fini; |
143 | di_walk_node_t di_walk_node; | 145 | di_walk_node_t di_walk_node; |
144 | di_node_name_t di_node_name; | 146 | di_node_name_t di_node_name; |
145 | di_node_t root_node; | 147 | di_node_t root_node; |
146 | 148 | ||
147 | if (!DLLINK(h,di_init)) break; | 149 | if (!DLLINK(h, di_init)) |
148 | if (!DLLINK(h,di_fini)) break; | 150 | break; |
149 | if (!DLLINK(h,di_walk_node)) break; | 151 | if (!DLLINK(h, di_fini)) |
150 | if (!DLLINK(h,di_node_name)) break; | 152 | break; |
151 | 153 | if (!DLLINK(h, di_walk_node)) | |
152 | if ((root_node = (*di_init)("/",DINFOSUBTREE))!=DI_NODE_NIL) | 154 | break; |
153 | { | 155 | if (!DLLINK(h, di_node_name)) |
154 | (*di_walk_node)(root_node,DI_WALK_SIBFIRST, | 156 | break; |
155 | di_node_name,walk_nodename); | 157 | |
156 | (*di_fini)(root_node); | 158 | if ((root_node = (*di_init)("/", DINFOSUBTREE)) != |
159 | DI_NODE_NIL) { | ||
160 | (*di_walk_node)(root_node, DI_WALK_SIBFIRST, | ||
161 | di_node_name, walk_nodename); | ||
162 | (*di_fini)(root_node); | ||
157 | } | 163 | } |
158 | } while(0); | 164 | } while (0); |
159 | 165 | ||
160 | if (h) dlclose(h); | 166 | if (h) |
161 | } | 167 | dlclose(h); |
168 | } | ||
162 | 169 | ||
163 | #else | 170 | #else |
164 | 171 | ||
165 | static sigjmp_buf common_jmp; | 172 | static sigjmp_buf common_jmp; |
166 | static void common_handler(int sig) { siglongjmp(common_jmp,sig); } | 173 | static void common_handler(int sig) |
167 | 174 | { | |
168 | void OPENSSL_cpuid_setup(void) | 175 | siglongjmp(common_jmp, sig); |
169 | { | 176 | } |
177 | |||
178 | void | ||
179 | OPENSSL_cpuid_setup(void) | ||
180 | { | ||
170 | char *e; | 181 | char *e; |
171 | struct sigaction common_act,ill_oact,bus_oact; | 182 | struct sigaction common_act, ill_oact, bus_oact; |
172 | sigset_t all_masked,oset; | 183 | sigset_t all_masked, oset; |
173 | static int trigger=0; | 184 | static int trigger = 0; |
174 | 185 | ||
175 | if (trigger) return; | 186 | if (trigger) |
176 | trigger=1; | ||
177 | |||
178 | if ((e=getenv("OPENSSL_sparcv9cap"))) | ||
179 | { | ||
180 | OPENSSL_sparcv9cap_P=strtoul(e,NULL,0); | ||
181 | return; | 187 | return; |
182 | } | 188 | trigger = 1; |
189 | |||
190 | if ((e = getenv("OPENSSL_sparcv9cap"))) { | ||
191 | OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0); | ||
192 | return; | ||
193 | } | ||
183 | 194 | ||
184 | /* Initial value, fits UltraSPARC-I&II... */ | 195 | /* Initial value, fits UltraSPARC-I&II... */ |
185 | OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED; | 196 | OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED; |
186 | 197 | ||
187 | sigfillset(&all_masked); | 198 | sigfillset(&all_masked); |
188 | sigdelset(&all_masked,SIGILL); | 199 | sigdelset(&all_masked, SIGILL); |
189 | sigdelset(&all_masked,SIGTRAP); | 200 | sigdelset(&all_masked, SIGTRAP); |
190 | #ifdef SIGEMT | 201 | #ifdef SIGEMT |
191 | sigdelset(&all_masked,SIGEMT); | 202 | sigdelset(&all_masked, SIGEMT); |
192 | #endif | 203 | #endif |
193 | sigdelset(&all_masked,SIGFPE); | 204 | sigdelset(&all_masked, SIGFPE); |
194 | sigdelset(&all_masked,SIGBUS); | 205 | sigdelset(&all_masked, SIGBUS); |
195 | sigdelset(&all_masked,SIGSEGV); | 206 | sigdelset(&all_masked, SIGSEGV); |
196 | sigprocmask(SIG_SETMASK,&all_masked,&oset); | 207 | sigprocmask(SIG_SETMASK, &all_masked, &oset); |
197 | 208 | ||
198 | memset(&common_act,0,sizeof(common_act)); | 209 | memset(&common_act, 0, sizeof(common_act)); |
199 | common_act.sa_handler = common_handler; | 210 | common_act.sa_handler = common_handler; |
200 | common_act.sa_mask = all_masked; | 211 | common_act.sa_mask = all_masked; |
201 | 212 | ||
202 | sigaction(SIGILL,&common_act,&ill_oact); | 213 | sigaction(SIGILL, &common_act, &ill_oact); |
203 | sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */ | 214 | sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */ |
204 | 215 | ||
205 | if (sigsetjmp(common_jmp,1) == 0) | 216 | if (sigsetjmp(common_jmp, 1) == 0) { |
206 | { | ||
207 | _sparcv9_rdtick(); | 217 | _sparcv9_rdtick(); |
208 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 218 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
209 | } | 219 | } |
210 | 220 | ||
211 | if (sigsetjmp(common_jmp,1) == 0) | 221 | if (sigsetjmp(common_jmp, 1) == 0) { |
212 | { | ||
213 | _sparcv9_vis1_probe(); | 222 | _sparcv9_vis1_probe(); |
214 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; | 223 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; |
215 | /* detect UltraSPARC-Tx, see sparccpud.S for details... */ | 224 | /* detect UltraSPARC-Tx, see sparccpud.S for details... */ |
216 | if (_sparcv9_vis1_instrument() >= 12) | 225 | if (_sparcv9_vis1_instrument() >= 12) |
217 | OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1|SPARCV9_PREFER_FPU); | 226 | OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1|SPARCV9_PREFER_FPU); |
218 | else | 227 | else { |
219 | { | ||
220 | _sparcv9_vis2_probe(); | 228 | _sparcv9_vis2_probe(); |
221 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; | 229 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; |
222 | } | ||
223 | } | 230 | } |
231 | } | ||
224 | 232 | ||
225 | if (sigsetjmp(common_jmp,1) == 0) | 233 | if (sigsetjmp(common_jmp, 1) == 0) { |
226 | { | ||
227 | _sparcv9_fmadd_probe(); | 234 | _sparcv9_fmadd_probe(); |
228 | OPENSSL_sparcv9cap_P |= SPARCV9_FMADD; | 235 | OPENSSL_sparcv9cap_P |= SPARCV9_FMADD; |
229 | } | 236 | } |
230 | 237 | ||
231 | sigaction(SIGBUS,&bus_oact,NULL); | 238 | sigaction(SIGBUS, &bus_oact, NULL); |
232 | sigaction(SIGILL,&ill_oact,NULL); | 239 | sigaction(SIGILL, &ill_oact, NULL); |
233 | 240 | ||
234 | sigprocmask(SIG_SETMASK,&oset,NULL); | 241 | sigprocmask(SIG_SETMASK, &oset, NULL); |
235 | } | 242 | } |
236 | 243 | ||
237 | #endif | 244 | #endif |
diff --git a/src/lib/libcrypto/uid.c b/src/lib/libcrypto/uid.c index b1fd52bada..fcfa05ce0c 100644 --- a/src/lib/libcrypto/uid.c +++ b/src/lib/libcrypto/uid.c | |||
@@ -60,30 +60,32 @@ | |||
60 | 60 | ||
61 | #include OPENSSL_UNISTD | 61 | #include OPENSSL_UNISTD |
62 | 62 | ||
63 | int OPENSSL_issetugid(void) | 63 | int |
64 | { | 64 | OPENSSL_issetugid(void) |
65 | { | ||
65 | return issetugid(); | 66 | return issetugid(); |
66 | } | 67 | } |
67 | 68 | ||
68 | #elif defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) | 69 | #elif defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) |
69 | 70 | ||
70 | int OPENSSL_issetugid(void) | 71 | int |
71 | { | 72 | OPENSSL_issetugid(void) |
73 | { | ||
72 | return 0; | 74 | return 0; |
73 | } | 75 | } |
74 | 76 | ||
75 | #else | 77 | #else |
76 | 78 | ||
77 | #include OPENSSL_UNISTD | 79 | #include OPENSSL_UNISTD |
78 | #include <sys/types.h> | 80 | #include <sys/types.h> |
79 | 81 | ||
80 | int OPENSSL_issetugid(void) | 82 | int |
81 | { | 83 | OPENSSL_issetugid(void) |
82 | if (getuid() != geteuid()) return 1; | 84 | { |
83 | if (getgid() != getegid()) return 1; | 85 | if (getuid() |
86 | != geteuid()) return 1; | ||
87 | if (getgid() | ||
88 | != getegid()) return 1; | ||
84 | return 0; | 89 | return 0; |
85 | } | 90 | } |
86 | #endif | 91 | #endif |
87 | |||
88 | |||
89 | |||
diff --git a/src/lib/libssl/src/crypto/arm_arch.h b/src/lib/libssl/src/crypto/arm_arch.h index 5a83107680..0ccafb2215 100644 --- a/src/lib/libssl/src/crypto/arm_arch.h +++ b/src/lib/libssl/src/crypto/arm_arch.h | |||
@@ -43,7 +43,7 @@ | |||
43 | 43 | ||
44 | #if !__ASSEMBLER__ | 44 | #if !__ASSEMBLER__ |
45 | extern unsigned int OPENSSL_armcap_P; | 45 | extern unsigned int OPENSSL_armcap_P; |
46 | 46 | ||
47 | #define ARMV7_NEON (1<<0) | 47 | #define ARMV7_NEON (1<<0) |
48 | #define ARMV7_TICK (1<<1) | 48 | #define ARMV7_TICK (1<<1) |
49 | #endif | 49 | #endif |
diff --git a/src/lib/libssl/src/crypto/armcap.c b/src/lib/libssl/src/crypto/armcap.c index 9abaf396e5..0625587bdd 100644 --- a/src/lib/libssl/src/crypto/armcap.c +++ b/src/lib/libssl/src/crypto/armcap.c | |||
@@ -12,7 +12,8 @@ unsigned int OPENSSL_armcap_P; | |||
12 | static sigset_t all_masked; | 12 | static sigset_t all_masked; |
13 | 13 | ||
14 | static sigjmp_buf ill_jmp; | 14 | static sigjmp_buf ill_jmp; |
15 | static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | 15 | static void ill_handler (int sig) { siglongjmp(ill_jmp, sig); |
16 | } | ||
16 | 17 | ||
17 | /* | 18 | /* |
18 | * Following subroutines could have been inlined, but it's not all | 19 | * Following subroutines could have been inlined, but it's not all |
@@ -21,60 +22,61 @@ static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | |||
21 | void _armv7_neon_probe(void); | 22 | void _armv7_neon_probe(void); |
22 | unsigned int _armv7_tick(void); | 23 | unsigned int _armv7_tick(void); |
23 | 24 | ||
24 | unsigned int OPENSSL_rdtsc(void) | 25 | unsigned int |
25 | { | 26 | OPENSSL_rdtsc(void) |
27 | { | ||
26 | if (OPENSSL_armcap_P & ARMV7_TICK) | 28 | if (OPENSSL_armcap_P & ARMV7_TICK) |
27 | return _armv7_tick(); | 29 | return _armv7_tick(); |
28 | else | 30 | else |
29 | return 0; | 31 | return 0; |
30 | } | 32 | } |
31 | 33 | ||
32 | #if defined(__GNUC__) && __GNUC__>=2 | 34 | #if defined(__GNUC__) && __GNUC__>=2 |
33 | void OPENSSL_cpuid_setup(void) __attribute__((constructor)); | 35 | void OPENSSL_cpuid_setup(void) __attribute__((constructor)); |
34 | #endif | 36 | #endif |
35 | void OPENSSL_cpuid_setup(void) | 37 | |
36 | { | 38 | void |
39 | OPENSSL_cpuid_setup(void) | ||
40 | { | ||
37 | char *e; | 41 | char *e; |
38 | struct sigaction ill_oact,ill_act; | 42 | struct sigaction ill_oact, ill_act; |
39 | sigset_t oset; | 43 | sigset_t oset; |
40 | static int trigger=0; | 44 | static int trigger = 0; |
41 | 45 | ||
42 | if (trigger) return; | 46 | if (trigger) |
43 | trigger=1; | ||
44 | |||
45 | if ((e=getenv("OPENSSL_armcap"))) | ||
46 | { | ||
47 | OPENSSL_armcap_P=strtoul(e,NULL,0); | ||
48 | return; | 47 | return; |
49 | } | 48 | trigger = 1; |
49 | |||
50 | if ((e = getenv("OPENSSL_armcap"))) { | ||
51 | OPENSSL_armcap_P = strtoul(e, NULL, 0); | ||
52 | return; | ||
53 | } | ||
50 | 54 | ||
51 | sigfillset(&all_masked); | 55 | sigfillset(&all_masked); |
52 | sigdelset(&all_masked,SIGILL); | 56 | sigdelset(&all_masked, SIGILL); |
53 | sigdelset(&all_masked,SIGTRAP); | 57 | sigdelset(&all_masked, SIGTRAP); |
54 | sigdelset(&all_masked,SIGFPE); | 58 | sigdelset(&all_masked, SIGFPE); |
55 | sigdelset(&all_masked,SIGBUS); | 59 | sigdelset(&all_masked, SIGBUS); |
56 | sigdelset(&all_masked,SIGSEGV); | 60 | sigdelset(&all_masked, SIGSEGV); |
57 | 61 | ||
58 | OPENSSL_armcap_P = 0; | 62 | OPENSSL_armcap_P = 0; |
59 | 63 | ||
60 | memset(&ill_act,0,sizeof(ill_act)); | 64 | memset(&ill_act, 0, sizeof(ill_act)); |
61 | ill_act.sa_handler = ill_handler; | 65 | ill_act.sa_handler = ill_handler; |
62 | ill_act.sa_mask = all_masked; | 66 | ill_act.sa_mask = all_masked; |
63 | 67 | ||
64 | sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); | 68 | sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); |
65 | sigaction(SIGILL,&ill_act,&ill_oact); | 69 | sigaction(SIGILL, &ill_act, &ill_oact); |
66 | 70 | ||
67 | if (sigsetjmp(ill_jmp,1) == 0) | 71 | if (sigsetjmp(ill_jmp, 1) == 0) { |
68 | { | ||
69 | _armv7_neon_probe(); | 72 | _armv7_neon_probe(); |
70 | OPENSSL_armcap_P |= ARMV7_NEON; | 73 | OPENSSL_armcap_P |= ARMV7_NEON; |
71 | } | 74 | } |
72 | if (sigsetjmp(ill_jmp,1) == 0) | 75 | if (sigsetjmp(ill_jmp, 1) == 0) { |
73 | { | ||
74 | _armv7_tick(); | 76 | _armv7_tick(); |
75 | OPENSSL_armcap_P |= ARMV7_TICK; | 77 | OPENSSL_armcap_P |= ARMV7_TICK; |
76 | } | ||
77 | |||
78 | sigaction (SIGILL,&ill_oact,NULL); | ||
79 | sigprocmask(SIG_SETMASK,&oset,NULL); | ||
80 | } | 78 | } |
79 | |||
80 | sigaction (SIGILL, &ill_oact, NULL); | ||
81 | sigprocmask(SIG_SETMASK, &oset, NULL); | ||
82 | } | ||
diff --git a/src/lib/libssl/src/crypto/buildinf.h b/src/lib/libssl/src/crypto/buildinf.h index 957f09d5fd..8fdb24cb33 100644 --- a/src/lib/libssl/src/crypto/buildinf.h +++ b/src/lib/libssl/src/crypto/buildinf.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef MK1MF_BUILD | 1 | #ifndef MK1MF_BUILD |
2 | /* auto-generated by crypto/Makefile for crypto/cversion.c */ | 2 | /* auto-generated by crypto/Makefile for crypto/cversion.c */ |
3 | #define CFLAGS "cc -O" | 3 | #define CFLAGS "cc -O" |
4 | #define PLATFORM "dist" | 4 | #define PLATFORM "dist" |
5 | #define DATE "Sat Aug 21 10:52:09 EST 2010" | 5 | #define DATE "Sat Aug 21 10:52:09 EST 2010" |
6 | #endif | 6 | #endif |
diff --git a/src/lib/libssl/src/crypto/cpt_err.c b/src/lib/libssl/src/crypto/cpt_err.c index 289005f662..a8e94ccd16 100644 --- a/src/lib/libssl/src/crypto/cpt_err.c +++ b/src/lib/libssl/src/crypto/cpt_err.c | |||
@@ -68,38 +68,35 @@ | |||
68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_CRYPTO,func,0) | 68 | #define ERR_FUNC(func) ERR_PACK(ERR_LIB_CRYPTO,func,0) |
69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_CRYPTO,0,reason) | 69 | #define ERR_REASON(reason) ERR_PACK(ERR_LIB_CRYPTO,0,reason) |
70 | 70 | ||
71 | static ERR_STRING_DATA CRYPTO_str_functs[]= | 71 | static ERR_STRING_DATA CRYPTO_str_functs[]= { |
72 | { | 72 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX), "CRYPTO_get_ex_new_index"}, |
73 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX), "CRYPTO_get_ex_new_index"}, | 73 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID), "CRYPTO_get_new_dynlockid"}, |
74 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID), "CRYPTO_get_new_dynlockid"}, | 74 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_LOCKID), "CRYPTO_get_new_lockid"}, |
75 | {ERR_FUNC(CRYPTO_F_CRYPTO_GET_NEW_LOCKID), "CRYPTO_get_new_lockid"}, | 75 | {ERR_FUNC(CRYPTO_F_CRYPTO_SET_EX_DATA), "CRYPTO_set_ex_data"}, |
76 | {ERR_FUNC(CRYPTO_F_CRYPTO_SET_EX_DATA), "CRYPTO_set_ex_data"}, | 76 | {ERR_FUNC(CRYPTO_F_DEF_ADD_INDEX), "DEF_ADD_INDEX"}, |
77 | {ERR_FUNC(CRYPTO_F_DEF_ADD_INDEX), "DEF_ADD_INDEX"}, | 77 | {ERR_FUNC(CRYPTO_F_DEF_GET_CLASS), "DEF_GET_CLASS"}, |
78 | {ERR_FUNC(CRYPTO_F_DEF_GET_CLASS), "DEF_GET_CLASS"}, | 78 | {ERR_FUNC(CRYPTO_F_FIPS_MODE_SET), "FIPS_mode_set"}, |
79 | {ERR_FUNC(CRYPTO_F_FIPS_MODE_SET), "FIPS_mode_set"}, | 79 | {ERR_FUNC(CRYPTO_F_INT_DUP_EX_DATA), "INT_DUP_EX_DATA"}, |
80 | {ERR_FUNC(CRYPTO_F_INT_DUP_EX_DATA), "INT_DUP_EX_DATA"}, | 80 | {ERR_FUNC(CRYPTO_F_INT_FREE_EX_DATA), "INT_FREE_EX_DATA"}, |
81 | {ERR_FUNC(CRYPTO_F_INT_FREE_EX_DATA), "INT_FREE_EX_DATA"}, | 81 | {ERR_FUNC(CRYPTO_F_INT_NEW_EX_DATA), "INT_NEW_EX_DATA"}, |
82 | {ERR_FUNC(CRYPTO_F_INT_NEW_EX_DATA), "INT_NEW_EX_DATA"}, | 82 | {0, NULL} |
83 | {0,NULL} | 83 | }; |
84 | }; | ||
85 | 84 | ||
86 | static ERR_STRING_DATA CRYPTO_str_reasons[]= | 85 | static ERR_STRING_DATA CRYPTO_str_reasons[]= { |
87 | { | 86 | {ERR_REASON(CRYPTO_R_FIPS_MODE_NOT_SUPPORTED), "fips mode not supported"}, |
88 | {ERR_REASON(CRYPTO_R_FIPS_MODE_NOT_SUPPORTED),"fips mode not supported"}, | 87 | {ERR_REASON(CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK), "no dynlock create callback"}, |
89 | {ERR_REASON(CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK),"no dynlock create callback"}, | 88 | {0, NULL} |
90 | {0,NULL} | 89 | }; |
91 | }; | ||
92 | 90 | ||
93 | #endif | 91 | #endif |
94 | 92 | ||
95 | void ERR_load_CRYPTO_strings(void) | 93 | void |
96 | { | 94 | ERR_load_CRYPTO_strings(void) |
95 | { | ||
97 | #ifndef OPENSSL_NO_ERR | 96 | #ifndef OPENSSL_NO_ERR |
98 | 97 | if (ERR_func_error_string(CRYPTO_str_functs[0].error) == NULL) { | |
99 | if (ERR_func_error_string(CRYPTO_str_functs[0].error) == NULL) | 98 | ERR_load_strings(0, CRYPTO_str_functs); |
100 | { | 99 | ERR_load_strings(0, CRYPTO_str_reasons); |
101 | ERR_load_strings(0,CRYPTO_str_functs); | ||
102 | ERR_load_strings(0,CRYPTO_str_reasons); | ||
103 | } | ||
104 | #endif | ||
105 | } | 100 | } |
101 | #endif | ||
102 | } | ||
diff --git a/src/lib/libssl/src/crypto/cryptlib.c b/src/lib/libssl/src/crypto/cryptlib.c index 082b2e88ee..89667d175a 100644 --- a/src/lib/libssl/src/crypto/cryptlib.c +++ b/src/lib/libssl/src/crypto/cryptlib.c | |||
@@ -118,14 +118,13 @@ | |||
118 | #include <openssl/safestack.h> | 118 | #include <openssl/safestack.h> |
119 | 119 | ||
120 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) | 120 | #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) |
121 | static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */ | 121 | static double SSLeay_MSVC5_hack = 0.0; /* and for VC1.5 */ |
122 | #endif | 122 | #endif |
123 | 123 | ||
124 | DECLARE_STACK_OF(CRYPTO_dynlock) | 124 | DECLARE_STACK_OF(CRYPTO_dynlock) |
125 | 125 | ||
126 | /* real #defines in crypto.h, keep these upto date */ | 126 | /* real #defines in crypto.h, keep these upto date */ |
127 | static const char* const lock_names[CRYPTO_NUM_LOCKS] = | 127 | static const char* const lock_names[CRYPTO_NUM_LOCKS] = { |
128 | { | ||
129 | "<<ERROR>>", | 128 | "<<ERROR>>", |
130 | "err", | 129 | "err", |
131 | "ex_data", | 130 | "ex_data", |
@@ -170,35 +169,35 @@ static const char* const lock_names[CRYPTO_NUM_LOCKS] = | |||
170 | #if CRYPTO_NUM_LOCKS != 41 | 169 | #if CRYPTO_NUM_LOCKS != 41 |
171 | # error "Inconsistency between crypto.h and cryptlib.c" | 170 | # error "Inconsistency between crypto.h and cryptlib.c" |
172 | #endif | 171 | #endif |
173 | }; | 172 | }; |
174 | 173 | ||
175 | /* This is for applications to allocate new type names in the non-dynamic | 174 | /* This is for applications to allocate new type names in the non-dynamic |
176 | array of lock names. These are numbered with positive numbers. */ | 175 | array of lock names. These are numbered with positive numbers. */ |
177 | static STACK_OF(OPENSSL_STRING) *app_locks=NULL; | 176 | static STACK_OF(OPENSSL_STRING) *app_locks = NULL; |
178 | 177 | ||
179 | /* For applications that want a more dynamic way of handling threads, the | 178 | /* For applications that want a more dynamic way of handling threads, the |
180 | following stack is used. These are externally numbered with negative | 179 | following stack is used. These are externally numbered with negative |
181 | numbers. */ | 180 | numbers. */ |
182 | static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL; | 181 | static STACK_OF(CRYPTO_dynlock) *dyn_locks = NULL; |
183 | |||
184 | 182 | ||
185 | static void (*locking_callback)(int mode,int type, | 183 | static void (*locking_callback)(int mode, int type, |
186 | const char *file,int line)=0; | 184 | const char *file, int line) = 0; |
187 | static int (*add_lock_callback)(int *pointer,int amount, | 185 | static int (*add_lock_callback)(int *pointer, int amount, |
188 | int type,const char *file,int line)=0; | 186 | int type, const char *file, int line) = 0; |
189 | #ifndef OPENSSL_NO_DEPRECATED | 187 | #ifndef OPENSSL_NO_DEPRECATED |
190 | static unsigned long (*id_callback)(void)=0; | 188 | static unsigned long (*id_callback)(void) = 0; |
191 | #endif | 189 | #endif |
192 | static void (*threadid_callback)(CRYPTO_THREADID *)=0; | 190 | static void (*threadid_callback)(CRYPTO_THREADID *) = 0; |
193 | static struct CRYPTO_dynlock_value *(*dynlock_create_callback) | 191 | static struct CRYPTO_dynlock_value *(*dynlock_create_callback)( |
194 | (const char *file,int line)=0; | 192 | const char *file, int line) = 0; |
195 | static void (*dynlock_lock_callback)(int mode, | 193 | static void (*dynlock_lock_callback)(int mode, |
196 | struct CRYPTO_dynlock_value *l, const char *file,int line)=0; | 194 | struct CRYPTO_dynlock_value *l, const char *file, int line) = 0; |
197 | static void (*dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l, | 195 | static void (*dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l, |
198 | const char *file,int line)=0; | 196 | const char *file, int line) = 0; |
199 | 197 | ||
200 | int CRYPTO_get_new_lockid(char *name) | 198 | int |
201 | { | 199 | CRYPTO_get_new_lockid(char *name) |
200 | { | ||
202 | char *str; | 201 | char *str; |
203 | int i; | 202 | int i; |
204 | 203 | ||
@@ -207,141 +206,130 @@ int CRYPTO_get_new_lockid(char *name) | |||
207 | * a DLL using /MT. Without this, the application cannot use | 206 | * a DLL using /MT. Without this, the application cannot use |
208 | * any floating point printf's. | 207 | * any floating point printf's. |
209 | * It also seems to be needed for Visual C 1.5 (win16) */ | 208 | * It also seems to be needed for Visual C 1.5 (win16) */ |
210 | SSLeay_MSVC5_hack=(double)name[0]*(double)name[1]; | 209 | SSLeay_MSVC5_hack = (double)name[0]*(double)name[1]; |
211 | #endif | 210 | #endif |
212 | 211 | ||
213 | if ((app_locks == NULL) && ((app_locks=sk_OPENSSL_STRING_new_null()) == NULL)) | 212 | if ((app_locks == NULL) && ((app_locks = sk_OPENSSL_STRING_new_null()) == NULL)) { |
214 | { | 213 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID, ERR_R_MALLOC_FAILURE); |
215 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE); | 214 | return (0); |
216 | return(0); | 215 | } |
217 | } | 216 | if ((str = BUF_strdup(name)) == NULL) { |
218 | if ((str=BUF_strdup(name)) == NULL) | 217 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID, ERR_R_MALLOC_FAILURE); |
219 | { | 218 | return (0); |
220 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE); | 219 | } |
221 | return(0); | 220 | i = sk_OPENSSL_STRING_push(app_locks, str); |
222 | } | ||
223 | i=sk_OPENSSL_STRING_push(app_locks,str); | ||
224 | if (!i) | 221 | if (!i) |
225 | OPENSSL_free(str); | 222 | OPENSSL_free(str); |
226 | else | 223 | else |
227 | i+=CRYPTO_NUM_LOCKS; /* gap of one :-) */ | 224 | i += CRYPTO_NUM_LOCKS; /* gap of one :-) */ |
228 | return(i); | 225 | return (i); |
229 | } | 226 | } |
230 | 227 | ||
231 | int CRYPTO_num_locks(void) | 228 | int |
232 | { | 229 | CRYPTO_num_locks(void) |
230 | { | ||
233 | return CRYPTO_NUM_LOCKS; | 231 | return CRYPTO_NUM_LOCKS; |
234 | } | 232 | } |
235 | 233 | ||
236 | int CRYPTO_get_new_dynlockid(void) | 234 | int |
237 | { | 235 | CRYPTO_get_new_dynlockid(void) |
236 | { | ||
238 | int i = 0; | 237 | int i = 0; |
239 | CRYPTO_dynlock *pointer = NULL; | 238 | CRYPTO_dynlock *pointer = NULL; |
240 | 239 | ||
241 | if (dynlock_create_callback == NULL) | 240 | if (dynlock_create_callback == NULL) { |
242 | { | 241 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK); |
243 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK); | 242 | return (0); |
244 | return(0); | 243 | } |
245 | } | ||
246 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 244 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
247 | if ((dyn_locks == NULL) | 245 | if ((dyn_locks == NULL) |
248 | && ((dyn_locks=sk_CRYPTO_dynlock_new_null()) == NULL)) | 246 | && ((dyn_locks = sk_CRYPTO_dynlock_new_null()) == NULL)) { |
249 | { | ||
250 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 247 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
251 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE); | 248 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, ERR_R_MALLOC_FAILURE); |
252 | return(0); | 249 | return (0); |
253 | } | 250 | } |
254 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 251 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
255 | 252 | ||
256 | pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock)); | 253 | pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock)); |
257 | if (pointer == NULL) | 254 | if (pointer == NULL) { |
258 | { | 255 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, ERR_R_MALLOC_FAILURE); |
259 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE); | 256 | return (0); |
260 | return(0); | 257 | } |
261 | } | ||
262 | pointer->references = 1; | 258 | pointer->references = 1; |
263 | pointer->data = dynlock_create_callback(__FILE__,__LINE__); | 259 | pointer->data = dynlock_create_callback(__FILE__, __LINE__); |
264 | if (pointer->data == NULL) | 260 | if (pointer->data == NULL) { |
265 | { | ||
266 | OPENSSL_free(pointer); | 261 | OPENSSL_free(pointer); |
267 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE); | 262 | CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID, ERR_R_MALLOC_FAILURE); |
268 | return(0); | 263 | return (0); |
269 | } | 264 | } |
270 | 265 | ||
271 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 266 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
272 | /* First, try to find an existing empty slot */ | 267 | /* First, try to find an existing empty slot */ |
273 | i=sk_CRYPTO_dynlock_find(dyn_locks,NULL); | 268 | i = sk_CRYPTO_dynlock_find(dyn_locks, NULL); |
274 | /* If there was none, push, thereby creating a new one */ | 269 | /* If there was none, push, thereby creating a new one */ |
275 | if (i == -1) | 270 | if (i == -1) |
276 | /* Since sk_push() returns the number of items on the | 271 | /* Since sk_push() returns the number of items on the |
277 | stack, not the location of the pushed item, we need | 272 | stack, not the location of the pushed item, we need |
278 | to transform the returned number into a position, | 273 | to transform the returned number into a position, |
279 | by decreasing it. */ | 274 | by decreasing it. */ |
280 | i=sk_CRYPTO_dynlock_push(dyn_locks,pointer) - 1; | 275 | i = sk_CRYPTO_dynlock_push(dyn_locks, pointer) - 1; |
281 | else | 276 | else |
282 | /* If we found a place with a NULL pointer, put our pointer | 277 | /* If we found a place with a NULL pointer, put our pointer |
283 | in it. */ | 278 | in it. */ |
284 | (void)sk_CRYPTO_dynlock_set(dyn_locks,i,pointer); | 279 | (void)sk_CRYPTO_dynlock_set(dyn_locks, i, pointer); |
285 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 280 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
286 | 281 | ||
287 | if (i == -1) | 282 | if (i == -1) { |
288 | { | 283 | dynlock_destroy_callback(pointer->data, __FILE__, __LINE__); |
289 | dynlock_destroy_callback(pointer->data,__FILE__,__LINE__); | ||
290 | OPENSSL_free(pointer); | 284 | OPENSSL_free(pointer); |
291 | } | 285 | } else |
292 | else | ||
293 | i += 1; /* to avoid 0 */ | 286 | i += 1; /* to avoid 0 */ |
294 | return -i; | 287 | return - i; |
295 | } | 288 | } |
296 | 289 | ||
297 | void CRYPTO_destroy_dynlockid(int i) | 290 | void |
298 | { | 291 | CRYPTO_destroy_dynlockid(int i) |
292 | { | ||
299 | CRYPTO_dynlock *pointer = NULL; | 293 | CRYPTO_dynlock *pointer = NULL; |
300 | if (i) | 294 | if (i) |
301 | i = -i-1; | 295 | i = -i - 1; |
302 | if (dynlock_destroy_callback == NULL) | 296 | if (dynlock_destroy_callback == NULL) |
303 | return; | 297 | return; |
304 | 298 | ||
305 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 299 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
306 | 300 | ||
307 | if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks)) | 301 | if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks)) { |
308 | { | ||
309 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 302 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
310 | return; | 303 | return; |
311 | } | 304 | } |
312 | pointer = sk_CRYPTO_dynlock_value(dyn_locks, i); | 305 | pointer = sk_CRYPTO_dynlock_value(dyn_locks, i); |
313 | if (pointer != NULL) | 306 | if (pointer != NULL) { |
314 | { | ||
315 | --pointer->references; | 307 | --pointer->references; |
316 | #ifdef REF_CHECK | 308 | #ifdef REF_CHECK |
317 | if (pointer->references < 0) | 309 | if (pointer->references < 0) { |
318 | { | 310 | fprintf(stderr, "CRYPTO_destroy_dynlockid, bad reference count\n"); |
319 | fprintf(stderr,"CRYPTO_destroy_dynlockid, bad reference count\n"); | ||
320 | abort(); | 311 | abort(); |
321 | } | 312 | } else |
322 | else | ||
323 | #endif | 313 | #endif |
324 | if (pointer->references <= 0) | 314 | if (pointer->references <= 0) { |
325 | { | 315 | (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL); |
326 | (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL); | 316 | } else |
327 | } | 317 | pointer = NULL; |
328 | else | 318 | } |
329 | pointer = NULL; | ||
330 | } | ||
331 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); | 319 | CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK); |
332 | 320 | ||
333 | if (pointer) | 321 | if (pointer) { |
334 | { | 322 | dynlock_destroy_callback(pointer->data, __FILE__, __LINE__); |
335 | dynlock_destroy_callback(pointer->data,__FILE__,__LINE__); | ||
336 | OPENSSL_free(pointer); | 323 | OPENSSL_free(pointer); |
337 | } | ||
338 | } | 324 | } |
325 | } | ||
339 | 326 | ||
340 | struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i) | 327 | struct CRYPTO_dynlock_value |
341 | { | 328 | *CRYPTO_get_dynlock_value(int i) |
329 | { | ||
342 | CRYPTO_dynlock *pointer = NULL; | 330 | CRYPTO_dynlock *pointer = NULL; |
343 | if (i) | 331 | if (i) |
344 | i = -i-1; | 332 | i = -i - 1; |
345 | 333 | ||
346 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); | 334 | CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK); |
347 | 335 | ||
@@ -355,97 +343,102 @@ struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i) | |||
355 | if (pointer) | 343 | if (pointer) |
356 | return pointer->data; | 344 | return pointer->data; |
357 | return NULL; | 345 | return NULL; |
358 | } | 346 | } |
359 | 347 | ||
360 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void)) | 348 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))( |
361 | (const char *file,int line) | 349 | const char *file, int line) |
362 | { | 350 | { |
363 | return(dynlock_create_callback); | 351 | return (dynlock_create_callback); |
364 | } | 352 | } |
365 | 353 | ||
366 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, | 354 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, |
367 | struct CRYPTO_dynlock_value *l, const char *file,int line) | 355 | struct CRYPTO_dynlock_value *l, const char *file, int line) |
368 | { | 356 | { |
369 | return(dynlock_lock_callback); | 357 | return (dynlock_lock_callback); |
370 | } | 358 | } |
371 | |||
372 | void (*CRYPTO_get_dynlock_destroy_callback(void)) | ||
373 | (struct CRYPTO_dynlock_value *l, const char *file,int line) | ||
374 | { | ||
375 | return(dynlock_destroy_callback); | ||
376 | } | ||
377 | 359 | ||
378 | void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func) | 360 | void (*CRYPTO_get_dynlock_destroy_callback(void))( |
379 | (const char *file, int line)) | 361 | struct CRYPTO_dynlock_value *l, const char *file, int line) |
380 | { | 362 | { |
381 | dynlock_create_callback=func; | 363 | return (dynlock_destroy_callback); |
382 | } | 364 | } |
383 | 365 | ||
384 | void CRYPTO_set_dynlock_lock_callback(void (*func)(int mode, | 366 | void |
385 | struct CRYPTO_dynlock_value *l, const char *file, int line)) | 367 | CRYPTO_set_dynlock_create_callback( |
386 | { | 368 | struct CRYPTO_dynlock_value *(*func)(const char *file, int line)) |
387 | dynlock_lock_callback=func; | 369 | { |
388 | } | 370 | dynlock_create_callback = func; |
371 | } | ||
389 | 372 | ||
390 | void CRYPTO_set_dynlock_destroy_callback(void (*func) | 373 | void |
391 | (struct CRYPTO_dynlock_value *l, const char *file, int line)) | 374 | CRYPTO_set_dynlock_lock_callback(void (*func)(int mode, |
392 | { | 375 | struct CRYPTO_dynlock_value *l, const char *file, int line)) |
393 | dynlock_destroy_callback=func; | 376 | { |
394 | } | 377 | dynlock_lock_callback = func; |
378 | } | ||
395 | 379 | ||
380 | void | ||
381 | CRYPTO_set_dynlock_destroy_callback( | ||
382 | void (*func)(struct CRYPTO_dynlock_value *l, const char *file, int line)) | ||
383 | { | ||
384 | dynlock_destroy_callback = func; | ||
385 | } | ||
396 | 386 | ||
397 | void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file, | 387 | void (*CRYPTO_get_locking_callback(void))(int mode, int type, |
398 | int line) | 388 | const char *file, int line) |
399 | { | 389 | { |
400 | return(locking_callback); | 390 | return (locking_callback); |
401 | } | 391 | } |
402 | 392 | ||
403 | int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type, | 393 | int (*CRYPTO_get_add_lock_callback(void))(int *num, int mount, int type, |
404 | const char *file,int line) | 394 | const char *file, int line) |
405 | { | 395 | { |
406 | return(add_lock_callback); | 396 | return (add_lock_callback); |
407 | } | 397 | } |
408 | 398 | ||
409 | void CRYPTO_set_locking_callback(void (*func)(int mode,int type, | 399 | void |
410 | const char *file,int line)) | 400 | CRYPTO_set_locking_callback(void (*func)(int mode, int type, |
411 | { | 401 | const char *file, int line)) |
402 | { | ||
412 | /* Calling this here ensures initialisation before any threads | 403 | /* Calling this here ensures initialisation before any threads |
413 | * are started. | 404 | * are started. |
414 | */ | 405 | */ |
415 | OPENSSL_init(); | 406 | OPENSSL_init(); |
416 | locking_callback=func; | 407 | locking_callback = func; |
417 | } | 408 | } |
418 | 409 | ||
419 | void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type, | 410 | void |
420 | const char *file,int line)) | 411 | CRYPTO_set_add_lock_callback(int (*func)(int *num, int mount, int type, |
421 | { | 412 | const char *file, int line)) |
422 | add_lock_callback=func; | 413 | { |
423 | } | 414 | add_lock_callback = func; |
415 | } | ||
424 | 416 | ||
425 | /* the memset() here and in set_pointer() seem overkill, but for the sake of | 417 | /* the memset() here and in set_pointer() seem overkill, but for the sake of |
426 | * CRYPTO_THREADID_cmp() this avoids any platform silliness that might cause two | 418 | * CRYPTO_THREADID_cmp() this avoids any platform silliness that might cause two |
427 | * "equal" THREADID structs to not be memcmp()-identical. */ | 419 | * "equal" THREADID structs to not be memcmp()-identical. */ |
428 | void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val) | 420 | void |
429 | { | 421 | CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val) |
422 | { | ||
430 | memset(id, 0, sizeof(*id)); | 423 | memset(id, 0, sizeof(*id)); |
431 | id->val = val; | 424 | id->val = val; |
432 | } | 425 | } |
433 | 426 | ||
434 | static const unsigned char hash_coeffs[] = { 3, 5, 7, 11, 13, 17, 19, 23 }; | 427 | static const unsigned char hash_coeffs[] = { 3, 5, 7, 11, 13, 17, 19, 23 }; |
435 | void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr) | 428 | void |
436 | { | 429 | CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr) |
430 | { | ||
437 | unsigned char *dest = (void *)&id->val; | 431 | unsigned char *dest = (void *)&id->val; |
438 | unsigned int accum = 0; | 432 | unsigned int accum = 0; |
439 | unsigned char dnum = sizeof(id->val); | 433 | unsigned char dnum = sizeof(id->val); |
440 | 434 | ||
441 | memset(id, 0, sizeof(*id)); | 435 | memset(id, 0, sizeof(*id)); |
442 | id->ptr = ptr; | 436 | id->ptr = ptr; |
443 | if (sizeof(id->val) >= sizeof(id->ptr)) | 437 | if (sizeof(id->val) >= sizeof(id->ptr)) { |
444 | { | ||
445 | /* 'ptr' can be embedded in 'val' without loss of uniqueness */ | 438 | /* 'ptr' can be embedded in 'val' without loss of uniqueness */ |
446 | id->val = (unsigned long)id->ptr; | 439 | id->val = (unsigned long)id->ptr; |
447 | return; | 440 | return; |
448 | } | 441 | } |
449 | /* hash ptr ==> val. Each byte of 'val' gets the mod-256 total of a | 442 | /* hash ptr ==> val. Each byte of 'val' gets the mod-256 total of a |
450 | * linear function over the bytes in 'ptr', the co-efficients of which | 443 | * linear function over the bytes in 'ptr', the co-efficients of which |
451 | * are a sequence of low-primes (hash_coeffs is an 8-element cycle) - | 444 | * are a sequence of low-primes (hash_coeffs is an 8-element cycle) - |
@@ -456,44 +449,43 @@ void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr) | |||
456 | * a black-belt, I'd scan big-endian pointers in reverse to give | 449 | * a black-belt, I'd scan big-endian pointers in reverse to give |
457 | * low-order bits more play, but this isn't crypto and I'd prefer nobody | 450 | * low-order bits more play, but this isn't crypto and I'd prefer nobody |
458 | * mistake it as such. Plus I'm lazy. */ | 451 | * mistake it as such. Plus I'm lazy. */ |
459 | while (dnum--) | 452 | while (dnum--) { |
460 | { | ||
461 | const unsigned char *src = (void *)&id->ptr; | 453 | const unsigned char *src = (void *)&id->ptr; |
462 | unsigned char snum = sizeof(id->ptr); | 454 | unsigned char snum = sizeof(id->ptr); |
463 | while (snum--) | 455 | while (snum--) |
464 | accum += *(src++) * hash_coeffs[(snum + dnum) & 7]; | 456 | accum += *(src++) * hash_coeffs[(snum + dnum) & 7]; |
465 | accum += dnum; | 457 | accum += dnum; |
466 | *(dest++) = accum & 255; | 458 | *(dest++) = accum & 255; |
467 | } | ||
468 | } | 459 | } |
460 | } | ||
469 | 461 | ||
470 | int CRYPTO_THREADID_set_callback(void (*func)(CRYPTO_THREADID *)) | 462 | int |
471 | { | 463 | CRYPTO_THREADID_set_callback(void (*func)(CRYPTO_THREADID *)) |
464 | { | ||
472 | if (threadid_callback) | 465 | if (threadid_callback) |
473 | return 0; | 466 | return 0; |
474 | threadid_callback = func; | 467 | threadid_callback = func; |
475 | return 1; | 468 | return 1; |
476 | } | 469 | } |
477 | 470 | ||
478 | void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *) | 471 | void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *) |
479 | { | 472 | { |
480 | return threadid_callback; | 473 | return threadid_callback; |
481 | } | 474 | } |
482 | 475 | ||
483 | void CRYPTO_THREADID_current(CRYPTO_THREADID *id) | 476 | void |
484 | { | 477 | CRYPTO_THREADID_current(CRYPTO_THREADID *id) |
485 | if (threadid_callback) | 478 | { |
486 | { | 479 | if (threadid_callback) { |
487 | threadid_callback(id); | 480 | threadid_callback(id); |
488 | return; | 481 | return; |
489 | } | 482 | } |
490 | #ifndef OPENSSL_NO_DEPRECATED | 483 | #ifndef OPENSSL_NO_DEPRECATED |
491 | /* If the deprecated callback was set, fall back to that */ | 484 | /* If the deprecated callback was set, fall back to that */ |
492 | if (id_callback) | 485 | if (id_callback) { |
493 | { | ||
494 | CRYPTO_THREADID_set_numeric(id, id_callback()); | 486 | CRYPTO_THREADID_set_numeric(id, id_callback()); |
495 | return; | 487 | return; |
496 | } | 488 | } |
497 | #endif | 489 | #endif |
498 | /* Else pick a backup */ | 490 | /* Else pick a backup */ |
499 | #ifdef OPENSSL_SYS_WIN16 | 491 | #ifdef OPENSSL_SYS_WIN16 |
@@ -506,64 +498,68 @@ void CRYPTO_THREADID_current(CRYPTO_THREADID *id) | |||
506 | /* For everything else, default to using the address of 'errno' */ | 498 | /* For everything else, default to using the address of 'errno' */ |
507 | CRYPTO_THREADID_set_pointer(id, (void*)&errno); | 499 | CRYPTO_THREADID_set_pointer(id, (void*)&errno); |
508 | #endif | 500 | #endif |
509 | } | 501 | } |
510 | 502 | ||
511 | int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b) | 503 | int |
512 | { | 504 | CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b) |
505 | { | ||
513 | return memcmp(a, b, sizeof(*a)); | 506 | return memcmp(a, b, sizeof(*a)); |
514 | } | 507 | } |
515 | 508 | ||
516 | void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src) | 509 | void |
517 | { | 510 | CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src) |
511 | { | ||
518 | memcpy(dest, src, sizeof(*src)); | 512 | memcpy(dest, src, sizeof(*src)); |
519 | } | 513 | } |
520 | 514 | ||
521 | unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id) | 515 | unsigned long |
522 | { | 516 | CRYPTO_THREADID_hash(const CRYPTO_THREADID *id) |
517 | { | ||
523 | return id->val; | 518 | return id->val; |
524 | } | 519 | } |
525 | 520 | ||
526 | #ifndef OPENSSL_NO_DEPRECATED | 521 | #ifndef OPENSSL_NO_DEPRECATED |
527 | unsigned long (*CRYPTO_get_id_callback(void))(void) | 522 | unsigned long (*CRYPTO_get_id_callback(void))(void) |
528 | { | 523 | { |
529 | return(id_callback); | 524 | return (id_callback); |
530 | } | 525 | } |
531 | 526 | ||
532 | void CRYPTO_set_id_callback(unsigned long (*func)(void)) | 527 | void |
533 | { | 528 | CRYPTO_set_id_callback(unsigned long (*func)(void)) |
534 | id_callback=func; | 529 | { |
535 | } | 530 | id_callback = func; |
531 | } | ||
536 | 532 | ||
537 | unsigned long CRYPTO_thread_id(void) | 533 | unsigned long |
538 | { | 534 | CRYPTO_thread_id(void) |
539 | unsigned long ret=0; | 535 | { |
536 | unsigned long ret = 0; | ||
540 | 537 | ||
541 | if (id_callback == NULL) | 538 | if (id_callback == NULL) { |
542 | { | ||
543 | #ifdef OPENSSL_SYS_WIN16 | 539 | #ifdef OPENSSL_SYS_WIN16 |
544 | ret=(unsigned long)GetCurrentTask(); | 540 | ret = (unsigned long)GetCurrentTask(); |
545 | #elif defined(OPENSSL_SYS_WIN32) | 541 | #elif defined(OPENSSL_SYS_WIN32) |
546 | ret=(unsigned long)GetCurrentThreadId(); | 542 | ret = (unsigned long)GetCurrentThreadId(); |
547 | #elif defined(GETPID_IS_MEANINGLESS) | 543 | #elif defined(GETPID_IS_MEANINGLESS) |
548 | ret=1L; | 544 | ret = 1L; |
549 | #elif defined(OPENSSL_SYS_BEOS) | 545 | #elif defined(OPENSSL_SYS_BEOS) |
550 | ret=(unsigned long)find_thread(NULL); | 546 | ret = (unsigned long)find_thread(NULL); |
551 | #else | 547 | #else |
552 | ret=(unsigned long)getpid(); | 548 | ret = (unsigned long)getpid(); |
553 | #endif | 549 | #endif |
554 | } | 550 | } else |
555 | else | 551 | ret = id_callback(); |
556 | ret=id_callback(); | 552 | return (ret); |
557 | return(ret); | 553 | } |
558 | } | ||
559 | #endif | 554 | #endif |
560 | 555 | ||
561 | void CRYPTO_lock(int mode, int type, const char *file, int line) | 556 | void |
562 | { | 557 | CRYPTO_lock(int mode, int type, const char *file, int line) |
558 | { | ||
563 | #ifdef LOCK_DEBUG | 559 | #ifdef LOCK_DEBUG |
564 | { | 560 | { |
565 | CRYPTO_THREADID id; | 561 | CRYPTO_THREADID id; |
566 | char *rw_text,*operation_text; | 562 | char *rw_text, *operation_text; |
567 | 563 | ||
568 | if (mode & CRYPTO_LOCK) | 564 | if (mode & CRYPTO_LOCK) |
569 | operation_text="lock "; | 565 | operation_text="lock "; |
@@ -580,101 +576,98 @@ void CRYPTO_lock(int mode, int type, const char *file, int line) | |||
580 | rw_text="ERROR"; | 576 | rw_text="ERROR"; |
581 | 577 | ||
582 | CRYPTO_THREADID_current(&id); | 578 | CRYPTO_THREADID_current(&id); |
583 | fprintf(stderr,"lock:%08lx:(%s)%s %-18s %s:%d\n", | 579 | fprintf(stderr, "lock:%08lx:(%s)%s %-18s %s:%d\n", |
584 | CRYPTO_THREADID_hash(&id), rw_text, operation_text, | 580 | CRYPTO_THREADID_hash(&id), rw_text, operation_text, |
585 | CRYPTO_get_lock_name(type), file, line); | 581 | CRYPTO_get_lock_name(type), file, line); |
586 | } | 582 | } |
587 | #endif | 583 | #endif |
588 | if (type < 0) | 584 | if (type < 0) { |
589 | { | 585 | if (dynlock_lock_callback != NULL) { |
590 | if (dynlock_lock_callback != NULL) | 586 | struct CRYPTO_dynlock_value *pointer = |
591 | { | 587 | CRYPTO_get_dynlock_value(type); |
592 | struct CRYPTO_dynlock_value *pointer | ||
593 | = CRYPTO_get_dynlock_value(type); | ||
594 | 588 | ||
595 | OPENSSL_assert(pointer != NULL); | 589 | OPENSSL_assert(pointer != NULL); |
596 | 590 | ||
597 | dynlock_lock_callback(mode, pointer, file, line); | 591 | dynlock_lock_callback(mode, pointer, file, line); |
598 | 592 | ||
599 | CRYPTO_destroy_dynlockid(type); | 593 | CRYPTO_destroy_dynlockid(type); |
600 | } | ||
601 | } | 594 | } |
602 | else | 595 | } else if (locking_callback != NULL) |
603 | if (locking_callback != NULL) | 596 | locking_callback(mode, type, file, line); |
604 | locking_callback(mode,type,file,line); | 597 | } |
605 | } | ||
606 | 598 | ||
607 | int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, | 599 | int |
608 | int line) | 600 | CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, |
609 | { | 601 | int line) |
602 | { | ||
610 | int ret = 0; | 603 | int ret = 0; |
611 | 604 | ||
612 | if (add_lock_callback != NULL) | 605 | if (add_lock_callback != NULL) { |
613 | { | ||
614 | #ifdef LOCK_DEBUG | 606 | #ifdef LOCK_DEBUG |
615 | int before= *pointer; | 607 | int before= *pointer; |
616 | #endif | 608 | #endif |
617 | 609 | ||
618 | ret=add_lock_callback(pointer,amount,type,file,line); | 610 | ret = add_lock_callback(pointer, amount, type, file, line); |
619 | #ifdef LOCK_DEBUG | 611 | #ifdef LOCK_DEBUG |
620 | { | 612 | { |
621 | CRYPTO_THREADID id; | 613 | CRYPTO_THREADID id; |
622 | CRYPTO_THREADID_current(&id); | 614 | CRYPTO_THREADID_current(&id); |
623 | fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", | 615 | fprintf(stderr, "ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", |
624 | CRYPTO_THREADID_hash(&id), before,amount,ret, | 616 | CRYPTO_THREADID_hash(&id), before, amount, ret, |
625 | CRYPTO_get_lock_name(type), | 617 | CRYPTO_get_lock_name(type), |
626 | file,line); | 618 | file, line); |
627 | } | 619 | } |
628 | #endif | 620 | #endif |
629 | } | 621 | } else { |
630 | else | 622 | CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE, type, file, line); |
631 | { | ||
632 | CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,file,line); | ||
633 | 623 | ||
634 | ret= *pointer+amount; | 624 | ret= *pointer + amount; |
635 | #ifdef LOCK_DEBUG | 625 | #ifdef LOCK_DEBUG |
636 | { | 626 | { |
637 | CRYPTO_THREADID id; | 627 | CRYPTO_THREADID id; |
638 | CRYPTO_THREADID_current(&id); | 628 | CRYPTO_THREADID_current(&id); |
639 | fprintf(stderr,"ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", | 629 | fprintf(stderr, "ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n", |
640 | CRYPTO_THREADID_hash(&id), | 630 | CRYPTO_THREADID_hash(&id), |
641 | *pointer,amount,ret, | 631 | *pointer, amount, ret, |
642 | CRYPTO_get_lock_name(type), | 632 | CRYPTO_get_lock_name(type), |
643 | file,line); | 633 | file, line); |
644 | } | 634 | } |
645 | #endif | 635 | #endif |
646 | *pointer=ret; | 636 | *pointer = ret; |
647 | CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,file,line); | 637 | CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE, type, file, line); |
648 | } | ||
649 | return(ret); | ||
650 | } | 638 | } |
639 | return (ret); | ||
640 | } | ||
651 | 641 | ||
652 | const char *CRYPTO_get_lock_name(int type) | 642 | const char |
653 | { | 643 | *CRYPTO_get_lock_name(int type) |
644 | { | ||
654 | if (type < 0) | 645 | if (type < 0) |
655 | return("dynamic"); | 646 | return("dynamic"); |
656 | else if (type < CRYPTO_NUM_LOCKS) | 647 | else if (type < CRYPTO_NUM_LOCKS) |
657 | return(lock_names[type]); | 648 | return (lock_names[type]); |
658 | else if (type-CRYPTO_NUM_LOCKS > sk_OPENSSL_STRING_num(app_locks)) | 649 | else if (type - CRYPTO_NUM_LOCKS > sk_OPENSSL_STRING_num(app_locks)) |
659 | return("ERROR"); | 650 | return("ERROR"); |
660 | else | 651 | else |
661 | return(sk_OPENSSL_STRING_value(app_locks,type-CRYPTO_NUM_LOCKS)); | 652 | return (sk_OPENSSL_STRING_value(app_locks, type - CRYPTO_NUM_LOCKS)); |
662 | } | 653 | } |
663 | 654 | ||
664 | #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ | 655 | #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ |
665 | defined(__INTEL__) || \ | 656 | defined(__INTEL__) || \ |
666 | defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) | 657 | defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) |
667 | 658 | ||
668 | unsigned int OPENSSL_ia32cap_P[2]; | 659 | unsigned int OPENSSL_ia32cap_P[2]; |
669 | unsigned long *OPENSSL_ia32cap_loc(void) | 660 | unsigned long |
670 | { if (sizeof(long)==4) | 661 | *OPENSSL_ia32cap_loc(void) |
671 | /* | 662 | { |
672 | * If 32-bit application pulls address of OPENSSL_ia32cap_P[0] | 663 | if (sizeof(long) == 4) |
673 | * clear second element to maintain the illusion that vector | 664 | /* |
674 | * is 32-bit. | 665 | * If 32-bit application pulls address of OPENSSL_ia32cap_P[0] |
675 | */ | 666 | * clear second element to maintain the illusion that vector |
676 | OPENSSL_ia32cap_P[1]=0; | 667 | * is 32-bit. |
677 | return (unsigned long *)OPENSSL_ia32cap_P; | 668 | */ |
669 | OPENSSL_ia32cap_P[1] = 0; | ||
670 | return (unsigned long *)OPENSSL_ia32cap_P; | ||
678 | } | 671 | } |
679 | 672 | ||
680 | #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) | 673 | #if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM) && !defined(I386_ONLY) |
@@ -684,43 +677,48 @@ typedef unsigned __int64 IA32CAP; | |||
684 | #else | 677 | #else |
685 | typedef unsigned long long IA32CAP; | 678 | typedef unsigned long long IA32CAP; |
686 | #endif | 679 | #endif |
687 | void OPENSSL_cpuid_setup(void) | 680 | void |
688 | { static int trigger=0; | 681 | OPENSSL_cpuid_setup(void) |
689 | IA32CAP OPENSSL_ia32_cpuid(void); | 682 | { |
690 | IA32CAP vec; | 683 | static int trigger = 0; |
691 | char *env; | 684 | IA32CAP OPENSSL_ia32_cpuid(void); |
692 | 685 | IA32CAP vec; | |
693 | if (trigger) return; | 686 | char *env; |
687 | |||
688 | if (trigger) | ||
689 | return; | ||
694 | 690 | ||
695 | trigger=1; | 691 | trigger = 1; |
696 | if ((env=getenv("OPENSSL_ia32cap"))) { | 692 | if ((env = getenv("OPENSSL_ia32cap"))) { |
697 | int off = (env[0]=='~')?1:0; | 693 | int off = (env[0]=='~') ? 1 : 0; |
698 | #if defined(_WIN32) | 694 | #if defined(_WIN32) |
699 | if (!sscanf(env+off,"%I64i",&vec)) vec = strtoul(env+off,NULL,0); | 695 | if (!sscanf(env+off, "%I64i", &vec)) vec = strtoul(env+off, NULL, 0); |
700 | #else | 696 | #else |
701 | if (!sscanf(env+off,"%lli",(long long *)&vec)) vec = strtoul(env+off,NULL,0); | 697 | if (!sscanf(env+off, "%lli",(long long *)&vec)) vec = strtoul(env+off, NULL, 0); |
702 | #endif | 698 | #endif |
703 | if (off) vec = OPENSSL_ia32_cpuid()&~vec; | 699 | if (off) |
704 | } | 700 | vec = OPENSSL_ia32_cpuid()&~vec; |
705 | else | 701 | } else |
706 | vec = OPENSSL_ia32_cpuid(); | 702 | vec = OPENSSL_ia32_cpuid(); |
707 | 703 | ||
708 | /* | 704 | /* |
709 | * |(1<<10) sets a reserved bit to signal that variable | 705 | * |(1<<10) sets a reserved bit to signal that variable |
710 | * was initialized already... This is to avoid interference | 706 | * was initialized already... This is to avoid interference |
711 | * with cpuid snippets in ELF .init segment. | 707 | * with cpuid snippets in ELF .init segment. |
712 | */ | 708 | */ |
713 | OPENSSL_ia32cap_P[0] = (unsigned int)vec|(1<<10); | 709 | OPENSSL_ia32cap_P[0] = (unsigned int)vec|(1 << 10); |
714 | OPENSSL_ia32cap_P[1] = (unsigned int)(vec>>32); | 710 | OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32); |
715 | } | 711 | } |
716 | #endif | 712 | #endif |
717 | 713 | ||
718 | #else | 714 | #else |
719 | unsigned long *OPENSSL_ia32cap_loc(void) { return NULL; } | 715 | unsigned long *OPENSSL_ia32cap_loc(void) { return NULL; |
716 | } | ||
720 | #endif | 717 | #endif |
721 | int OPENSSL_NONPIC_relocated = 0; | 718 | int OPENSSL_NONPIC_relocated = 0; |
722 | #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ) | 719 | #if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ) |
723 | void OPENSSL_cpuid_setup(void) {} | 720 | void |
721 | OPENSSL_cpuid_setup(void) {} | ||
724 | #endif | 722 | #endif |
725 | 723 | ||
726 | #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL) | 724 | #if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL) |
@@ -734,25 +732,23 @@ void OPENSSL_cpuid_setup(void) {} | |||
734 | /* All we really need to do is remove the 'error' state when a thread | 732 | /* All we really need to do is remove the 'error' state when a thread |
735 | * detaches */ | 733 | * detaches */ |
736 | 734 | ||
737 | BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, | 735 | BOOL WINAPI |
738 | LPVOID lpvReserved) | 736 | DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) |
739 | { | 737 | { |
740 | switch(fdwReason) | 738 | switch (fdwReason) { |
741 | { | ||
742 | case DLL_PROCESS_ATTACH: | 739 | case DLL_PROCESS_ATTACH: |
743 | OPENSSL_cpuid_setup(); | 740 | OPENSSL_cpuid_setup(); |
744 | #if defined(_WIN32_WINNT) | 741 | #if defined(_WIN32_WINNT) |
745 | { | 742 | { |
746 | IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL; | 743 | IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *)hinstDLL; |
747 | IMAGE_NT_HEADERS *nt_headers; | 744 | IMAGE_NT_HEADERS *nt_headers; |
748 | 745 | ||
749 | if (dos_header->e_magic==IMAGE_DOS_SIGNATURE) | 746 | if (dos_header->e_magic == IMAGE_DOS_SIGNATURE) { |
750 | { | 747 | nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header |
751 | nt_headers = (IMAGE_NT_HEADERS *)((char *)dos_header | 748 | + dos_header->e_lfanew); |
752 | + dos_header->e_lfanew); | 749 | if (nt_headers->Signature == IMAGE_NT_SIGNATURE && |
753 | if (nt_headers->Signature==IMAGE_NT_SIGNATURE && | 750 | hinstDLL != (HINSTANCE)(nt_headers->OptionalHeader.ImageBase)) |
754 | hinstDLL!=(HINSTANCE)(nt_headers->OptionalHeader.ImageBase)) | 751 | OPENSSL_NONPIC_relocated = 1; |
755 | OPENSSL_NONPIC_relocated=1; | ||
756 | } | 752 | } |
757 | } | 753 | } |
758 | #endif | 754 | #endif |
@@ -763,9 +759,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, | |||
763 | break; | 759 | break; |
764 | case DLL_PROCESS_DETACH: | 760 | case DLL_PROCESS_DETACH: |
765 | break; | 761 | break; |
766 | } | ||
767 | return(TRUE); | ||
768 | } | 762 | } |
763 | return (TRUE); | ||
764 | } | ||
769 | #endif | 765 | #endif |
770 | 766 | ||
771 | #if defined(_WIN32) && !defined(__CYGWIN__) | 767 | #if defined(_WIN32) && !defined(__CYGWIN__) |
@@ -783,138 +779,166 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, | |||
783 | #endif | 779 | #endif |
784 | 780 | ||
785 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 | 781 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 |
786 | int OPENSSL_isservice(void) | 782 | int |
787 | { HWINSTA h; | 783 | OPENSSL_isservice(void) |
788 | DWORD len; | 784 | { HWINSTA h; |
789 | WCHAR *name; | 785 | DWORD len; |
790 | static union { void *p; int (*f)(void); } _OPENSSL_isservice = { NULL }; | 786 | WCHAR *name; |
791 | 787 | static union { void *p; | |
792 | if (_OPENSSL_isservice.p == NULL) { | 788 | int (*f)(void); |
793 | HANDLE h = GetModuleHandle(NULL); | 789 | } _OPENSSL_isservice = { NULL }; |
794 | if (h != NULL) | 790 | |
795 | _OPENSSL_isservice.p = GetProcAddress(h,"_OPENSSL_isservice"); | 791 | if (_OPENSSL_isservice.p == NULL) { |
796 | if (_OPENSSL_isservice.p == NULL) | 792 | HANDLE h = GetModuleHandle(NULL); |
797 | _OPENSSL_isservice.p = (void *)-1; | 793 | if (h != NULL) |
798 | } | 794 | _OPENSSL_isservice.p = GetProcAddress(h, "_OPENSSL_isservice"); |
799 | 795 | if (_OPENSSL_isservice.p == NULL) | |
800 | if (_OPENSSL_isservice.p != (void *)-1) | 796 | _OPENSSL_isservice.p = (void *) - 1; |
801 | return (*_OPENSSL_isservice.f)(); | 797 | } |
802 | 798 | ||
803 | (void)GetDesktopWindow(); /* return value is ignored */ | 799 | if (_OPENSSL_isservice.p != (void *) - 1) |
804 | 800 | return (*_OPENSSL_isservice.f)(); | |
805 | h = GetProcessWindowStation(); | 801 | |
806 | if (h==NULL) return -1; | 802 | (void)GetDesktopWindow(); /* return value is ignored */ |
807 | 803 | ||
808 | if (GetUserObjectInformationW (h,UOI_NAME,NULL,0,&len) || | 804 | h = GetProcessWindowStation(); |
809 | GetLastError() != ERROR_INSUFFICIENT_BUFFER) | 805 | if (h == NULL) |
806 | return -1; | ||
807 | |||
808 | if (GetUserObjectInformationW (h, UOI_NAME, NULL, 0, &len) || | ||
809 | GetLastError() != ERROR_INSUFFICIENT_BUFFER) | ||
810 | return -1; | 810 | return -1; |
811 | 811 | ||
812 | if (len>512) return -1; /* paranoia */ | 812 | if (len > 512) |
813 | len++,len&=~1; /* paranoia */ | 813 | return -1; |
814 | name=(WCHAR *)alloca(len+sizeof(WCHAR)); | 814 | /* paranoia */ |
815 | if (!GetUserObjectInformationW (h,UOI_NAME,name,len,&len)) | 815 | len++, len&=~1; |
816 | return -1; | 816 | /* paranoia */ |
817 | 817 | name = (WCHAR *)alloca(len + sizeof(WCHAR)); | |
818 | len++,len&=~1; /* paranoia */ | 818 | if (!GetUserObjectInformationW (h, UOI_NAME, name, len, &len)) |
819 | name[len/sizeof(WCHAR)]=L'\0'; /* paranoia */ | 819 | return -1; |
820 | |||
821 | len++, len&=~1; | ||
822 | /* paranoia */ | ||
823 | name[len/sizeof(WCHAR)]=L'\0'; /* paranoia */ | ||
820 | #if 1 | 824 | #if 1 |
821 | /* This doesn't cover "interactive" services [working with real | 825 | /* This doesn't cover "interactive" services [working with real |
822 | * WinSta0's] nor programs started non-interactively by Task | 826 | * WinSta0's] nor programs started non-interactively by Task |
823 | * Scheduler [those are working with SAWinSta]. */ | 827 | * Scheduler [those are working with SAWinSta]. */ |
824 | if (wcsstr(name,L"Service-0x")) return 1; | 828 | if (wcsstr(name, L"Service-0x")) return 1; |
825 | #else | 829 | #else |
826 | /* This covers all non-interactive programs such as services. */ | 830 | /* This covers all non-interactive programs such as services. */ |
827 | if (!wcsstr(name,L"WinSta0")) return 1; | 831 | if (!wcsstr(name, L"WinSta0")) return 1; |
828 | #endif | 832 | #endif |
829 | else return 0; | 833 | else return 0; |
830 | } | 834 | } |
831 | #else | 835 | #else |
832 | int OPENSSL_isservice(void) { return 0; } | 836 | int OPENSSL_isservice(void) { return 0; |
837 | } | ||
833 | #endif | 838 | #endif |
834 | 839 | ||
835 | void OPENSSL_showfatal (const char *fmta,...) | 840 | void OPENSSL_showfatal (const char *fmta,...) |
836 | { va_list ap; | 841 | { va_list ap; |
837 | TCHAR buf[256]; | 842 | TCHAR buf[256]; |
838 | const TCHAR *fmt; | 843 | const TCHAR *fmt; |
839 | #ifdef STD_ERROR_HANDLE /* what a dirty trick! */ | 844 | #ifdef STD_ERROR_HANDLE /* what a dirty trick! */ |
840 | HANDLE h; | 845 | HANDLE h; |
841 | 846 | ||
842 | if ((h=GetStdHandle(STD_ERROR_HANDLE)) != NULL && | 847 | if ((h = GetStdHandle(STD_ERROR_HANDLE)) != NULL && |
843 | GetFileType(h)!=FILE_TYPE_UNKNOWN) | 848 | GetFileType(h) != FILE_TYPE_UNKNOWN) |
844 | { /* must be console application */ | 849 | { /* must be console application */ |
845 | va_start (ap,fmta); | 850 | va_start (ap, fmta); |
846 | vfprintf (stderr,fmta,ap); | 851 | vfprintf (stderr, fmta, ap); |
847 | va_end (ap); | 852 | va_end (ap); |
848 | return; | 853 | return; |
849 | } | 854 | } |
850 | #endif | 855 | #endif |
851 | 856 | ||
852 | if (sizeof(TCHAR)==sizeof(char)) | 857 | if (sizeof(TCHAR) == sizeof(char)) |
853 | fmt=(const TCHAR *)fmta; | 858 | fmt = (const TCHAR *)fmta; |
854 | else do | 859 | else do |
855 | { int keepgoing; | 860 | { int keepgoing; |
856 | size_t len_0=strlen(fmta)+1,i; | 861 | size_t len_0 = strlen(fmta) + 1, i; |
857 | WCHAR *fmtw; | 862 | WCHAR *fmtw; |
858 | 863 | ||
859 | fmtw = (WCHAR *)alloca(len_0*sizeof(WCHAR)); | 864 | fmtw = (WCHAR *)alloca(len_0*sizeof(WCHAR)); |
860 | if (fmtw == NULL) { fmt=(const TCHAR *)L"no stack?"; break; } | 865 | if (fmtw == NULL) { |
866 | fmt = (const TCHAR *)L"no stack?"; | ||
867 | break; | ||
868 | } | ||
861 | 869 | ||
862 | #ifndef OPENSSL_NO_MULTIBYTE | 870 | #ifndef OPENSSL_NO_MULTIBYTE |
863 | if (!MultiByteToWideChar(CP_ACP,0,fmta,len_0,fmtw,len_0)) | 871 | if (!MultiByteToWideChar(CP_ACP, 0, fmta, len_0, fmtw, len_0)) |
864 | #endif | 872 | #endif |
865 | for (i=0;i<len_0;i++) fmtw[i]=(WCHAR)fmta[i]; | 873 | for (i = 0;i < len_0;i++) fmtw[i] = (WCHAR)fmta[i]; |
866 | 874 | ||
867 | for (i=0;i<len_0;i++) | 875 | for (i = 0; i < len_0; i++) |
868 | { if (fmtw[i]==L'%') do | 876 | { if (fmtw[i]==L'%') do |
869 | { keepgoing=0; | 877 | { keepgoing = 0; |
870 | switch (fmtw[i+1]) | 878 | switch (fmtw[i + 1]) |
871 | { case L'0': case L'1': case L'2': case L'3': case L'4': | 879 | { case L'0': case L'1': case L'2': case L'3': case L'4': |
872 | case L'5': case L'6': case L'7': case L'8': case L'9': | 880 | case L'5': case L'6': case L'7': case L'8': case L'9': |
873 | case L'.': case L'*': | 881 | case L'.': case L'*': |
874 | case L'-': i++; keepgoing=1; break; | 882 | case L'-': |
875 | case L's': fmtw[i+1]=L'S'; break; | 883 | i++; |
876 | case L'S': fmtw[i+1]=L's'; break; | 884 | keepgoing = 1; |
877 | case L'c': fmtw[i+1]=L'C'; break; | 885 | break; |
878 | case L'C': fmtw[i+1]=L'c'; break; | 886 | case L's': |
887 | fmtw[i + 1] = L'S'; | ||
888 | break; | ||
889 | case L'S': | ||
890 | fmtw[i + 1] = L's'; | ||
891 | break; | ||
892 | case L'c': | ||
893 | fmtw[i + 1] = L'C'; | ||
894 | break; | ||
895 | case L'C': | ||
896 | fmtw[i + 1] = L'c'; | ||
897 | break; | ||
898 | } | ||
899 | } while (keepgoing); | ||
879 | } | 900 | } |
880 | } while (keepgoing); | 901 | fmt = (const TCHAR *)fmtw; |
881 | } | 902 | } while (0); |
882 | fmt = (const TCHAR *)fmtw; | ||
883 | } while (0); | ||
884 | 903 | ||
885 | va_start (ap,fmta); | 904 | va_start (ap, fmta); |
886 | _vsntprintf (buf,sizeof(buf)/sizeof(TCHAR)-1,fmt,ap); | 905 | _vsntprintf (buf, sizeof(buf)/sizeof(TCHAR) - 1, fmt, ap); |
887 | buf [sizeof(buf)/sizeof(TCHAR)-1] = _T('\0'); | 906 | buf [sizeof(buf)/sizeof(TCHAR) - 1] = _T('\0'); |
888 | va_end (ap); | 907 | va_end (ap); |
889 | 908 | ||
890 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 | 909 | #if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 |
891 | /* this -------------v--- guards NT-specific calls */ | 910 | /* this -------------v--- guards NT-specific calls */ |
892 | if (check_winnt() && OPENSSL_isservice() > 0) | 911 | if (check_winnt() && OPENSSL_isservice() > 0) |
893 | { HANDLE h = RegisterEventSource(0,_T("OPENSSL")); | 912 | { HANDLE h = RegisterEventSource(0, _T("OPENSSL")); |
894 | const TCHAR *pmsg=buf; | 913 | const TCHAR *pmsg = buf; |
895 | ReportEvent(h,EVENTLOG_ERROR_TYPE,0,0,0,1,0,&pmsg,0); | 914 | ReportEvent(h, EVENTLOG_ERROR_TYPE, 0, 0, 0, 1, 0, &pmsg, 0); |
896 | DeregisterEventSource(h); | 915 | DeregisterEventSource(h); |
897 | } | 916 | } else |
898 | else | ||
899 | #endif | 917 | #endif |
900 | MessageBox (NULL,buf,_T("OpenSSL: FATAL"),MB_OK|MB_ICONSTOP); | 918 | MessageBox (NULL, buf, _T("OpenSSL: FATAL"), MB_OK|MB_ICONSTOP); |
901 | } | 919 | } |
902 | #else | 920 | #else |
903 | void OPENSSL_showfatal (const char *fmta,...) | 921 | void OPENSSL_showfatal(const char *fmta, ...) |
904 | { va_list ap; | 922 | { |
923 | va_list ap; | ||
905 | 924 | ||
906 | va_start (ap,fmta); | 925 | va_start (ap, fmta); |
907 | vfprintf (stderr,fmta,ap); | 926 | vfprintf (stderr, fmta, ap); |
908 | va_end (ap); | 927 | va_end (ap); |
928 | } | ||
929 | |||
930 | int OPENSSL_isservice(void) | ||
931 | { | ||
932 | return 0; | ||
909 | } | 933 | } |
910 | int OPENSSL_isservice (void) { return 0; } | ||
911 | #endif | 934 | #endif |
912 | 935 | ||
913 | void OpenSSLDie(const char *file,int line,const char *assertion) | 936 | void |
914 | { | 937 | OpenSSLDie(const char *file, int line, const char *assertion) |
938 | { | ||
915 | OPENSSL_showfatal( | 939 | OPENSSL_showfatal( |
916 | "%s(%d): OpenSSL internal error, assertion failed: %s\n", | 940 | "%s(%d): OpenSSL internal error, assertion failed: %s\n", |
917 | file,line,assertion); | 941 | file, line, assertion); |
918 | #if !defined(_WIN32) || defined(__CYGWIN__) | 942 | #if !defined(_WIN32) || defined(__CYGWIN__) |
919 | abort(); | 943 | abort(); |
920 | #else | 944 | #else |
@@ -922,12 +946,16 @@ void OpenSSLDie(const char *file,int line,const char *assertion) | |||
922 | raise(SIGABRT); | 946 | raise(SIGABRT); |
923 | _exit(3); | 947 | _exit(3); |
924 | #endif | 948 | #endif |
925 | } | 949 | } |
926 | 950 | ||
927 | void *OPENSSL_stderr(void) { return stderr; } | 951 | void *OPENSSL_stderr(void) |
952 | { | ||
953 | return stderr; | ||
954 | } | ||
928 | 955 | ||
929 | int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len) | 956 | int |
930 | { | 957 | CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len) |
958 | { | ||
931 | size_t i; | 959 | size_t i; |
932 | const unsigned char *a = in_a; | 960 | const unsigned char *a = in_a; |
933 | const unsigned char *b = in_b; | 961 | const unsigned char *b = in_b; |
@@ -937,4 +965,4 @@ int CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len) | |||
937 | x |= a[i] ^ b[i]; | 965 | x |= a[i] ^ b[i]; |
938 | 966 | ||
939 | return x; | 967 | return x; |
940 | } | 968 | } |
diff --git a/src/lib/libssl/src/crypto/crypto.h b/src/lib/libssl/src/crypto/crypto.h index 76bc5958c0..baeba25b99 100644 --- a/src/lib/libssl/src/crypto/crypto.h +++ b/src/lib/libssl/src/crypto/crypto.h | |||
@@ -154,23 +154,22 @@ extern "C" { | |||
154 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; | 154 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; |
155 | /* Called when a new object is created */ | 155 | /* Called when a new object is created */ |
156 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 156 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
157 | int idx, long argl, void *argp); | 157 | int idx, long argl, void *argp); |
158 | /* Called when an object is free()ed */ | 158 | /* Called when an object is free()ed */ |
159 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 159 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
160 | int idx, long argl, void *argp); | 160 | int idx, long argl, void *argp); |
161 | /* Called when we need to dup an object */ | 161 | /* Called when we need to dup an object */ |
162 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, | 162 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, |
163 | int idx, long argl, void *argp); | 163 | void *from_d, int idx, long argl, void *argp); |
164 | #endif | 164 | #endif |
165 | 165 | ||
166 | /* A generic structure to pass assorted data in a expandable way */ | 166 | /* A generic structure to pass assorted data in a expandable way */ |
167 | typedef struct openssl_item_st | 167 | typedef struct openssl_item_st { |
168 | { | ||
169 | int code; | 168 | int code; |
170 | void *value; /* Not used for flag attributes */ | 169 | void *value; /* Not used for flag attributes */ |
171 | size_t value_size; /* Max size of value for output, length for input */ | 170 | size_t value_size; /* Max size of value for output, length for input */ |
172 | size_t *value_length; /* Returned length of value for output */ | 171 | size_t *value_length; /* Returned length of value for output */ |
173 | } OPENSSL_ITEM; | 172 | } OPENSSL_ITEM; |
174 | 173 | ||
175 | 174 | ||
176 | /* When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock | 175 | /* When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock |
@@ -249,11 +248,10 @@ typedef struct openssl_item_st | |||
249 | and deallocate locks in a dynamic fashion. The following typedef | 248 | and deallocate locks in a dynamic fashion. The following typedef |
250 | makes this possible in a type-safe manner. */ | 249 | makes this possible in a type-safe manner. */ |
251 | /* struct CRYPTO_dynlock_value has to be defined by the application. */ | 250 | /* struct CRYPTO_dynlock_value has to be defined by the application. */ |
252 | typedef struct | 251 | typedef struct { |
253 | { | ||
254 | int references; | 252 | int references; |
255 | struct CRYPTO_dynlock_value *data; | 253 | struct CRYPTO_dynlock_value *data; |
256 | } CRYPTO_dynlock; | 254 | } CRYPTO_dynlock; |
257 | 255 | ||
258 | 256 | ||
259 | /* The following can be used to detect memory leaks in the SSLeay library. | 257 | /* The following can be used to detect memory leaks in the SSLeay library. |
@@ -278,24 +276,22 @@ typedef struct | |||
278 | /* predec of the BIO type */ | 276 | /* predec of the BIO type */ |
279 | typedef struct bio_st BIO_dummy; | 277 | typedef struct bio_st BIO_dummy; |
280 | 278 | ||
281 | struct crypto_ex_data_st | 279 | struct crypto_ex_data_st { |
282 | { | ||
283 | STACK_OF(void) *sk; | 280 | STACK_OF(void) *sk; |
284 | int dummy; /* gcc is screwing up this data structure :-( */ | 281 | int dummy; /* gcc is screwing up this data structure :-( */ |
285 | }; | 282 | }; |
286 | DECLARE_STACK_OF(void) | 283 | DECLARE_STACK_OF(void) |
287 | 284 | ||
288 | /* This stuff is basically class callback functions | 285 | /* This stuff is basically class callback functions |
289 | * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ | 286 | * The current classes are SSL_CTX, SSL, SSL_SESSION, and a few more */ |
290 | 287 | ||
291 | typedef struct crypto_ex_data_func_st | 288 | typedef struct crypto_ex_data_func_st { |
292 | { | ||
293 | long argl; /* Arbitary long */ | 289 | long argl; /* Arbitary long */ |
294 | void *argp; /* Arbitary void * */ | 290 | void *argp; /* Arbitary void * */ |
295 | CRYPTO_EX_new *new_func; | 291 | CRYPTO_EX_new *new_func; |
296 | CRYPTO_EX_free *free_func; | 292 | CRYPTO_EX_free *free_func; |
297 | CRYPTO_EX_dup *dup_func; | 293 | CRYPTO_EX_dup *dup_func; |
298 | } CRYPTO_EX_DATA_FUNCS; | 294 | } CRYPTO_EX_DATA_FUNCS; |
299 | 295 | ||
300 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) | 296 | DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) |
301 | 297 | ||
@@ -392,18 +388,18 @@ int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); | |||
392 | int CRYPTO_ex_data_new_class(void); | 388 | int CRYPTO_ex_data_new_class(void); |
393 | /* Within a given class, get/register a new index */ | 389 | /* Within a given class, get/register a new index */ |
394 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, | 390 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, |
395 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 391 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
396 | CRYPTO_EX_free *free_func); | 392 | CRYPTO_EX_free *free_func); |
397 | /* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given | 393 | /* Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a given |
398 | * class (invokes whatever per-class callbacks are applicable) */ | 394 | * class (invokes whatever per-class callbacks are applicable) */ |
399 | int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); | 395 | int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); |
400 | int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 396 | int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, |
401 | CRYPTO_EX_DATA *from); | 397 | CRYPTO_EX_DATA *from); |
402 | void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); | 398 | void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); |
403 | /* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index | 399 | /* Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular index |
404 | * (relative to the class type involved) */ | 400 | * (relative to the class type involved) */ |
405 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); | 401 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); |
406 | void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad,int idx); | 402 | void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); |
407 | /* This function cleans up all "ex_data" state. It mustn't be called under | 403 | /* This function cleans up all "ex_data" state. It mustn't be called under |
408 | * potential race-conditions. */ | 404 | * potential race-conditions. */ |
409 | void CRYPTO_cleanup_all_ex_data(void); | 405 | void CRYPTO_cleanup_all_ex_data(void); |
@@ -411,22 +407,21 @@ void CRYPTO_cleanup_all_ex_data(void); | |||
411 | int CRYPTO_get_new_lockid(char *name); | 407 | int CRYPTO_get_new_lockid(char *name); |
412 | 408 | ||
413 | int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ | 409 | int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ |
414 | void CRYPTO_lock(int mode, int type,const char *file,int line); | 410 | void CRYPTO_lock(int mode, int type, const char *file, int line); |
415 | void CRYPTO_set_locking_callback(void (*func)(int mode,int type, | 411 | void CRYPTO_set_locking_callback(void (*func)(int mode, int type, |
416 | const char *file,int line)); | 412 | const char *file, int line)); |
417 | void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file, | 413 | void (*CRYPTO_get_locking_callback(void))(int mode, int type, |
418 | int line); | 414 | const char *file, int line); |
419 | void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type, | 415 | void CRYPTO_set_add_lock_callback(int (*func)(int *num, int mount, int type, |
420 | const char *file, int line)); | 416 | const char *file, int line)); |
421 | int (*CRYPTO_get_add_lock_callback(void))(int *num,int mount,int type, | 417 | int (*CRYPTO_get_add_lock_callback(void))(int *num, int mount, int type, |
422 | const char *file,int line); | 418 | const char *file, int line); |
423 | 419 | ||
424 | /* Don't use this structure directly. */ | 420 | /* Don't use this structure directly. */ |
425 | typedef struct crypto_threadid_st | 421 | typedef struct crypto_threadid_st { |
426 | { | ||
427 | void *ptr; | 422 | void *ptr; |
428 | unsigned long val; | 423 | unsigned long val; |
429 | } CRYPTO_THREADID; | 424 | } CRYPTO_THREADID; |
430 | /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ | 425 | /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ |
431 | void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); | 426 | void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); |
432 | void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); | 427 | void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); |
@@ -443,8 +438,8 @@ unsigned long CRYPTO_thread_id(void); | |||
443 | #endif | 438 | #endif |
444 | 439 | ||
445 | const char *CRYPTO_get_lock_name(int type); | 440 | const char *CRYPTO_get_lock_name(int type); |
446 | int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file, | 441 | int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, |
447 | int line); | 442 | int line); |
448 | 443 | ||
449 | int CRYPTO_get_new_dynlockid(void); | 444 | int CRYPTO_get_new_dynlockid(void); |
450 | void CRYPTO_destroy_dynlockid(int i); | 445 | void CRYPTO_destroy_dynlockid(int i); |
@@ -452,46 +447,43 @@ struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); | |||
452 | void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line)); | 447 | void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function)(const char *file, int line)); |
453 | void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)); | 448 | void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)); |
454 | void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line)); | 449 | void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)(struct CRYPTO_dynlock_value *l, const char *file, int line)); |
455 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file,int line); | 450 | struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))(const char *file, int line); |
456 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file,int line); | 451 | void (*CRYPTO_get_dynlock_lock_callback(void))(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line); |
457 | void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file,int line); | 452 | void (*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l, const char *file, int line); |
458 | 453 | ||
459 | /* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- | 454 | /* CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- |
460 | * call the latter last if you need different functions */ | 455 | * call the latter last if you need different functions */ |
461 | int CRYPTO_set_mem_functions(void *(*m)(size_t),void *(*r)(void *,size_t), void (*f)(void *)); | 456 | int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), void (*f)(void *)); |
462 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *)); | 457 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*free_func)(void *)); |
463 | int CRYPTO_set_mem_ex_functions(void *(*m)(size_t,const char *,int), | 458 | int CRYPTO_set_mem_ex_functions(void *(*m)(size_t, const char *, int), |
464 | void *(*r)(void *,size_t,const char *,int), | 459 | void *(*r)(void *, size_t, const char *, int), void (*f)(void *)); |
465 | void (*f)(void *)); | 460 | int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t, const char *, int), |
466 | int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t,const char *,int), | 461 | void (*free_func)(void *)); |
467 | void (*free_func)(void *)); | 462 | int CRYPTO_set_mem_debug_functions( |
468 | int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), | 463 | void (*m)(void *, int, const char *, int, int), |
469 | void (*r)(void *,void *,int,const char *,int,int), | 464 | void (*r)(void *, void *, int, const char *, int, int), |
470 | void (*f)(void *,int), | 465 | void (*f)(void *, int), void (*so)(long), long (*go)(void)); |
471 | void (*so)(long), | 466 | void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), |
472 | long (*go)(void)); | 467 | void (**f)(void *)); |
473 | void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *)); | ||
474 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)); | 468 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)); |
475 | void CRYPTO_get_mem_ex_functions(void *(**m)(size_t,const char *,int), | 469 | void CRYPTO_get_mem_ex_functions(void *(**m)(size_t, const char *, int), |
476 | void *(**r)(void *, size_t,const char *,int), | 470 | void *(**r)(void *, size_t, const char *, int), void (**f)(void *)); |
477 | void (**f)(void *)); | 471 | void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t, const char *, int), |
478 | void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t,const char *,int), | 472 | void (**f)(void *)); |
479 | void (**f)(void *)); | 473 | void CRYPTO_get_mem_debug_functions( |
480 | void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), | 474 | void (**m)(void *, int, const char *, int, int), |
481 | void (**r)(void *,void *,int,const char *,int,int), | 475 | void (**r)(void *, void *, int, const char *, int, int), |
482 | void (**f)(void *,int), | 476 | void (**f)(void *, int), void (**so)(long), long (**go)(void)); |
483 | void (**so)(long), | ||
484 | long (**go)(void)); | ||
485 | 477 | ||
486 | void *CRYPTO_malloc_locked(int num, const char *file, int line); | 478 | void *CRYPTO_malloc_locked(int num, const char *file, int line); |
487 | void CRYPTO_free_locked(void *ptr); | 479 | void CRYPTO_free_locked(void *ptr); |
488 | void *CRYPTO_malloc(int num, const char *file, int line); | 480 | void *CRYPTO_malloc(int num, const char *file, int line); |
489 | char *CRYPTO_strdup(const char *str, const char *file, int line); | 481 | char *CRYPTO_strdup(const char *str, const char *file, int line); |
490 | void CRYPTO_free(void *ptr); | 482 | void CRYPTO_free(void *ptr); |
491 | void *CRYPTO_realloc(void *addr,int num, const char *file, int line); | 483 | void *CRYPTO_realloc(void *addr, int num, const char *file, int line); |
492 | void *CRYPTO_realloc_clean(void *addr,int old_num,int num,const char *file, | 484 | void *CRYPTO_realloc_clean(void *addr, int old_num, int num, |
493 | int line); | 485 | const char *file, int line); |
494 | void *CRYPTO_remalloc(void *addr,int num, const char *file, int line); | 486 | void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); |
495 | 487 | ||
496 | void OPENSSL_cleanse(void *ptr, size_t len); | 488 | void OPENSSL_cleanse(void *ptr, size_t len); |
497 | 489 | ||
@@ -512,9 +504,9 @@ int CRYPTO_remove_all_info(void); | |||
512 | * 0: called before the actual memory allocation has taken place | 504 | * 0: called before the actual memory allocation has taken place |
513 | * 1: called after the actual memory allocation has taken place | 505 | * 1: called after the actual memory allocation has taken place |
514 | */ | 506 | */ |
515 | void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p); | 507 | void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, int before_p); |
516 | void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p); | 508 | void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, int line, int before_p); |
517 | void CRYPTO_dbg_free(void *addr,int before_p); | 509 | void CRYPTO_dbg_free(void *addr, int before_p); |
518 | /* Tell the debugging code about options. By default, the following values | 510 | /* Tell the debugging code about options. By default, the following values |
519 | * apply: | 511 | * apply: |
520 | * | 512 | * |
@@ -536,7 +528,7 @@ typedef void *CRYPTO_MEM_LEAK_CB(unsigned long, const char *, int, int, void *); | |||
536 | void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); | 528 | void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); |
537 | 529 | ||
538 | /* die if we have to */ | 530 | /* die if we have to */ |
539 | void OpenSSLDie(const char *file,int line,const char *assertion); | 531 | void OpenSSLDie(const char *file, int line, const char *assertion); |
540 | #define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) | 532 | #define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) |
541 | 533 | ||
542 | unsigned long *OPENSSL_ia32cap_loc(void); | 534 | unsigned long *OPENSSL_ia32cap_loc(void); |
diff --git a/src/lib/libssl/src/crypto/cversion.c b/src/lib/libssl/src/crypto/cversion.c index ea9f25fd16..1fe92a4bfa 100644 --- a/src/lib/libssl/src/crypto/cversion.c +++ b/src/lib/libssl/src/crypto/cversion.c | |||
@@ -62,56 +62,53 @@ | |||
62 | #include "buildinf.h" | 62 | #include "buildinf.h" |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | const char *SSLeay_version(int t) | 65 | const char |
66 | { | 66 | *SSLeay_version(int t) |
67 | { | ||
67 | if (t == SSLEAY_VERSION) | 68 | if (t == SSLEAY_VERSION) |
68 | return OPENSSL_VERSION_TEXT; | 69 | return OPENSSL_VERSION_TEXT; |
69 | if (t == SSLEAY_BUILT_ON) | 70 | if (t == SSLEAY_BUILT_ON) { |
70 | { | ||
71 | #ifdef DATE | 71 | #ifdef DATE |
72 | static char buf[sizeof(DATE)+11]; | 72 | static char buf[sizeof(DATE) + 11]; |
73 | 73 | ||
74 | BIO_snprintf(buf,sizeof buf,"built on: %s",DATE); | 74 | BIO_snprintf(buf, sizeof buf, "built on: %s", DATE); |
75 | return(buf); | 75 | return (buf); |
76 | #else | 76 | #else |
77 | return("built on: date not available"); | 77 | return("built on: date not available"); |
78 | #endif | 78 | #endif |
79 | } | 79 | } |
80 | if (t == SSLEAY_CFLAGS) | 80 | if (t == SSLEAY_CFLAGS) { |
81 | { | ||
82 | #ifdef CFLAGS | 81 | #ifdef CFLAGS |
83 | static char buf[sizeof(CFLAGS)+11]; | 82 | static char buf[sizeof(CFLAGS) + 11]; |
84 | 83 | ||
85 | BIO_snprintf(buf,sizeof buf,"compiler: %s",CFLAGS); | 84 | BIO_snprintf(buf, sizeof buf, "compiler: %s", CFLAGS); |
86 | return(buf); | 85 | return (buf); |
87 | #else | 86 | #else |
88 | return("compiler: information not available"); | 87 | return("compiler: information not available"); |
89 | #endif | 88 | #endif |
90 | } | 89 | } |
91 | if (t == SSLEAY_PLATFORM) | 90 | if (t == SSLEAY_PLATFORM) { |
92 | { | ||
93 | #ifdef PLATFORM | 91 | #ifdef PLATFORM |
94 | static char buf[sizeof(PLATFORM)+11]; | 92 | static char buf[sizeof(PLATFORM) + 11]; |
95 | 93 | ||
96 | BIO_snprintf(buf,sizeof buf,"platform: %s", PLATFORM); | 94 | BIO_snprintf(buf, sizeof buf, "platform: %s", PLATFORM); |
97 | return(buf); | 95 | return (buf); |
98 | #else | 96 | #else |
99 | return("platform: information not available"); | 97 | return("platform: information not available"); |
100 | #endif | 98 | #endif |
101 | } | 99 | } |
102 | if (t == SSLEAY_DIR) | 100 | if (t == SSLEAY_DIR) { |
103 | { | ||
104 | #ifdef OPENSSLDIR | 101 | #ifdef OPENSSLDIR |
105 | return "OPENSSLDIR: \"" OPENSSLDIR "\""; | 102 | return "OPENSSLDIR: \"" OPENSSLDIR "\""; |
106 | #else | 103 | #else |
107 | return "OPENSSLDIR: N/A"; | 104 | return "OPENSSLDIR: N/A"; |
108 | #endif | 105 | #endif |
109 | } | ||
110 | return("not available"); | ||
111 | } | ||
112 | |||
113 | unsigned long SSLeay(void) | ||
114 | { | ||
115 | return(SSLEAY_VERSION_NUMBER); | ||
116 | } | 106 | } |
107 | return("not available"); | ||
108 | } | ||
117 | 109 | ||
110 | unsigned long | ||
111 | SSLeay(void) | ||
112 | { | ||
113 | return (SSLEAY_VERSION_NUMBER); | ||
114 | } | ||
diff --git a/src/lib/libssl/src/crypto/ebcdic.c b/src/lib/libssl/src/crypto/ebcdic.c index 43e53bcaf7..2ac26abc72 100644 --- a/src/lib/libssl/src/crypto/ebcdic.c +++ b/src/lib/libssl/src/crypto/ebcdic.c | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | #include <openssl/e_os2.h> | 5 | #include <openssl/e_os2.h> |
6 | #if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX) | 6 | #if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX) |
7 | static void *dummy=&dummy; | 7 | static void *dummy = &dummy; |
8 | #endif | 8 | #endif |
9 | 9 | ||
10 | #else /*CHARSET_EBCDIC*/ | 10 | #else /*CHARSET_EBCDIC*/ |
@@ -30,38 +30,38 @@ static void *dummy=&dummy; | |||
30 | 30 | ||
31 | /* Here's the bijective ebcdic-to-ascii table: */ | 31 | /* Here's the bijective ebcdic-to-ascii table: */ |
32 | const unsigned char os_toascii[256] = { | 32 | const unsigned char os_toascii[256] = { |
33 | /*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, | 33 | /*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, |
34 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/ | 34 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/ |
35 | /*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, | 35 | /*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, |
36 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/ | 36 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/ |
37 | /*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, | 37 | /*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, |
38 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/ | 38 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/ |
39 | /*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, | 39 | /*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, |
40 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/ | 40 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/ |
41 | /*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, | 41 | /*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, |
42 | 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/ | 42 | 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/ |
43 | /*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, | 43 | /*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, |
44 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/ | 44 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/ |
45 | /*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, | 45 | /*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, |
46 | 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/ | 46 | 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/ |
47 | /*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, | 47 | /*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, |
48 | 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/ | 48 | 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/ |
49 | /*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, | 49 | /*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, |
50 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/ | 50 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/ |
51 | /*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, | 51 | /*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, |
52 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/ | 52 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/ |
53 | /*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, | 53 | /*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, |
54 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/ | 54 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/ |
55 | /*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, | 55 | /*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, |
56 | 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/ | 56 | 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/ |
57 | /*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, | 57 | /*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, |
58 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/ | 58 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/ |
59 | /*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, | 59 | /*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, |
60 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/ | 60 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/ |
61 | /*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, | 61 | /*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, |
62 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/ | 62 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/ |
63 | /*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, | 63 | /*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, |
64 | 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/ | 64 | 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/ |
65 | }; | 65 | }; |
66 | 66 | ||
67 | 67 | ||
@@ -111,38 +111,38 @@ Bijective EBCDIC (character set IBM-1047) to US-ASCII table: | |||
111 | This table is bijective - there are no ambigous or duplicate characters. | 111 | This table is bijective - there are no ambigous or duplicate characters. |
112 | */ | 112 | */ |
113 | const unsigned char os_toascii[256] = { | 113 | const unsigned char os_toascii[256] = { |
114 | 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */ | 114 | 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */ |
115 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ | 115 | 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ |
116 | 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */ | 116 | 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */ |
117 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ | 117 | 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ |
118 | 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */ | 118 | 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */ |
119 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */ | 119 | 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */ |
120 | 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */ | 120 | 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */ |
121 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */ | 121 | 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */ |
122 | 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */ | 122 | 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */ |
123 | 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */ | 123 | 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */ |
124 | 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */ | 124 | 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */ |
125 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */ | 125 | 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */ |
126 | 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */ | 126 | 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */ |
127 | 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */ | 127 | 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */ |
128 | 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */ | 128 | 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */ |
129 | 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */ | 129 | 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */ |
130 | 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */ | 130 | 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */ |
131 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */ | 131 | 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */ |
132 | 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */ | 132 | 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */ |
133 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */ | 133 | 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */ |
134 | 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */ | 134 | 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */ |
135 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */ | 135 | 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */ |
136 | 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */ | 136 | 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */ |
137 | 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */ | 137 | 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */ |
138 | 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */ | 138 | 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */ |
139 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */ | 139 | 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */ |
140 | 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */ | 140 | 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */ |
141 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */ | 141 | 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */ |
142 | 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */ | 142 | 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */ |
143 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */ | 143 | 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */ |
144 | 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */ | 144 | 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */ |
145 | 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */ | 145 | 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */ |
146 | }; | 146 | }; |
147 | 147 | ||
148 | 148 | ||
@@ -151,38 +151,38 @@ The US-ASCII to EBCDIC (character set IBM-1047) table: | |||
151 | This table is bijective (no ambiguous or duplicate characters) | 151 | This table is bijective (no ambiguous or duplicate characters) |
152 | */ | 152 | */ |
153 | const unsigned char os_toebcdic[256] = { | 153 | const unsigned char os_toebcdic[256] = { |
154 | 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */ | 154 | 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */ |
155 | 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ | 155 | 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */ |
156 | 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */ | 156 | 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */ |
157 | 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ | 157 | 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */ |
158 | 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */ | 158 | 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */ |
159 | 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */ | 159 | 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */ |
160 | 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */ | 160 | 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */ |
161 | 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */ | 161 | 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */ |
162 | 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */ | 162 | 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */ |
163 | 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */ | 163 | 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */ |
164 | 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */ | 164 | 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */ |
165 | 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */ | 165 | 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */ |
166 | 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */ | 166 | 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */ |
167 | 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */ | 167 | 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */ |
168 | 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */ | 168 | 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */ |
169 | 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */ | 169 | 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */ |
170 | 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */ | 170 | 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */ |
171 | 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */ | 171 | 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */ |
172 | 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */ | 172 | 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */ |
173 | 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */ | 173 | 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */ |
174 | 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */ | 174 | 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */ |
175 | 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */ | 175 | 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */ |
176 | 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */ | 176 | 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */ |
177 | 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */ | 177 | 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */ |
178 | 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */ | 178 | 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */ |
179 | 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */ | 179 | 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */ |
180 | 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */ | 180 | 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */ |
181 | 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */ | 181 | 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */ |
182 | 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */ | 182 | 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */ |
183 | 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */ | 183 | 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */ |
184 | 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */ | 184 | 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */ |
185 | 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */ | 185 | 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */ |
186 | }; | 186 | }; |
187 | #endif /*_OSD_POSIX*/ | 187 | #endif /*_OSD_POSIX*/ |
188 | 188 | ||
@@ -195,27 +195,27 @@ const unsigned char os_toebcdic[256] = { | |||
195 | void * | 195 | void * |
196 | ebcdic2ascii(void *dest, const void *srce, size_t count) | 196 | ebcdic2ascii(void *dest, const void *srce, size_t count) |
197 | { | 197 | { |
198 | unsigned char *udest = dest; | 198 | unsigned char *udest = dest; |
199 | const unsigned char *usrce = srce; | 199 | const unsigned char *usrce = srce; |
200 | 200 | ||
201 | while (count-- != 0) { | 201 | while (count-- != 0) { |
202 | *udest++ = os_toascii[*usrce++]; | 202 | *udest++ = os_toascii[*usrce++]; |
203 | } | 203 | } |
204 | 204 | ||
205 | return dest; | 205 | return dest; |
206 | } | 206 | } |
207 | 207 | ||
208 | void * | 208 | void * |
209 | ascii2ebcdic(void *dest, const void *srce, size_t count) | 209 | ascii2ebcdic(void *dest, const void *srce, size_t count) |
210 | { | 210 | { |
211 | unsigned char *udest = dest; | 211 | unsigned char *udest = dest; |
212 | const unsigned char *usrce = srce; | 212 | const unsigned char *usrce = srce; |
213 | 213 | ||
214 | while (count-- != 0) { | 214 | while (count-- != 0) { |
215 | *udest++ = os_toebcdic[*usrce++]; | 215 | *udest++ = os_toebcdic[*usrce++]; |
216 | } | 216 | } |
217 | 217 | ||
218 | return dest; | 218 | return dest; |
219 | } | 219 | } |
220 | 220 | ||
221 | #endif | 221 | #endif |
diff --git a/src/lib/libssl/src/crypto/ex_data.c b/src/lib/libssl/src/crypto/ex_data.c index e2bc8298d0..44bad59527 100644 --- a/src/lib/libssl/src/crypto/ex_data.c +++ b/src/lib/libssl/src/crypto/ex_data.c | |||
@@ -142,8 +142,7 @@ | |||
142 | #include <openssl/lhash.h> | 142 | #include <openssl/lhash.h> |
143 | 143 | ||
144 | /* What an "implementation of ex_data functionality" looks like */ | 144 | /* What an "implementation of ex_data functionality" looks like */ |
145 | struct st_CRYPTO_EX_DATA_IMPL | 145 | struct st_CRYPTO_EX_DATA_IMPL { |
146 | { | ||
147 | /*********************/ | 146 | /*********************/ |
148 | /* GLOBAL OPERATIONS */ | 147 | /* GLOBAL OPERATIONS */ |
149 | /* Return a new class index */ | 148 | /* Return a new class index */ |
@@ -154,79 +153,83 @@ struct st_CRYPTO_EX_DATA_IMPL | |||
154 | /* PER-CLASS OPERATIONS */ | 153 | /* PER-CLASS OPERATIONS */ |
155 | /* Get a new method index within a class */ | 154 | /* Get a new method index within a class */ |
156 | int (*cb_get_new_index)(int class_index, long argl, void *argp, | 155 | int (*cb_get_new_index)(int class_index, long argl, void *argp, |
157 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 156 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
158 | CRYPTO_EX_free *free_func); | 157 | CRYPTO_EX_free *free_func); |
159 | /* Initialise a new CRYPTO_EX_DATA of a given class */ | 158 | /* Initialise a new CRYPTO_EX_DATA of a given class */ |
160 | int (*cb_new_ex_data)(int class_index, void *obj, | 159 | int (*cb_new_ex_data)(int class_index, void *obj, |
161 | CRYPTO_EX_DATA *ad); | 160 | CRYPTO_EX_DATA *ad); |
162 | /* Duplicate a CRYPTO_EX_DATA of a given class onto a copy */ | 161 | /* Duplicate a CRYPTO_EX_DATA of a given class onto a copy */ |
163 | int (*cb_dup_ex_data)(int class_index, CRYPTO_EX_DATA *to, | 162 | int (*cb_dup_ex_data)(int class_index, CRYPTO_EX_DATA *to, |
164 | CRYPTO_EX_DATA *from); | 163 | CRYPTO_EX_DATA *from); |
165 | /* Cleanup a CRYPTO_EX_DATA of a given class */ | 164 | /* Cleanup a CRYPTO_EX_DATA of a given class */ |
166 | void (*cb_free_ex_data)(int class_index, void *obj, | 165 | void (*cb_free_ex_data)(int class_index, void *obj, |
167 | CRYPTO_EX_DATA *ad); | 166 | CRYPTO_EX_DATA *ad); |
168 | }; | 167 | }; |
169 | 168 | ||
170 | /* The implementation we use at run-time */ | 169 | /* The implementation we use at run-time */ |
171 | static const CRYPTO_EX_DATA_IMPL *impl = NULL; | 170 | static const CRYPTO_EX_DATA_IMPL *impl = NULL; |
172 | 171 | ||
173 | /* To call "impl" functions, use this macro rather than referring to 'impl' directly, eg. | 172 | /* To call "impl" functions, use this macro rather than referring to 'impl' directly, eg. |
174 | * EX_IMPL(get_new_index)(...); */ | 173 | * EX_IMPL(get_new_index)(...); |
174 | */ | ||
175 | #define EX_IMPL(a) impl->cb_##a | 175 | #define EX_IMPL(a) impl->cb_##a |
176 | 176 | ||
177 | /* Predeclare the "default" ex_data implementation */ | 177 | /* Predeclare the "default" ex_data implementation */ |
178 | static int int_new_class(void); | 178 | static int int_new_class(void); |
179 | static void int_cleanup(void); | 179 | static void int_cleanup(void); |
180 | static int int_get_new_index(int class_index, long argl, void *argp, | 180 | static int int_get_new_index(int class_index, long argl, void *argp, |
181 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 181 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
182 | CRYPTO_EX_free *free_func); | 182 | CRYPTO_EX_free *free_func); |
183 | static int int_new_ex_data(int class_index, void *obj, | 183 | static int int_new_ex_data(int class_index, void *obj, |
184 | CRYPTO_EX_DATA *ad); | 184 | CRYPTO_EX_DATA *ad); |
185 | static int int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 185 | static int int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, |
186 | CRYPTO_EX_DATA *from); | 186 | CRYPTO_EX_DATA *from); |
187 | static void int_free_ex_data(int class_index, void *obj, | 187 | static void int_free_ex_data(int class_index, void *obj, |
188 | CRYPTO_EX_DATA *ad); | 188 | CRYPTO_EX_DATA *ad); |
189 | static CRYPTO_EX_DATA_IMPL impl_default = | 189 | |
190 | { | 190 | static CRYPTO_EX_DATA_IMPL impl_default = { |
191 | int_new_class, | 191 | int_new_class, |
192 | int_cleanup, | 192 | int_cleanup, |
193 | int_get_new_index, | 193 | int_get_new_index, |
194 | int_new_ex_data, | 194 | int_new_ex_data, |
195 | int_dup_ex_data, | 195 | int_dup_ex_data, |
196 | int_free_ex_data | 196 | int_free_ex_data |
197 | }; | 197 | }; |
198 | 198 | ||
199 | /* Internal function that checks whether "impl" is set and if not, sets it to | 199 | /* Internal function that checks whether "impl" is set and if not, sets it to |
200 | * the default. */ | 200 | * the default. */ |
201 | static void impl_check(void) | 201 | static void |
202 | { | 202 | impl_check(void) |
203 | { | ||
203 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 204 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
204 | if(!impl) | 205 | if (!impl) |
205 | impl = &impl_default; | 206 | impl = &impl_default; |
206 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 207 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
207 | } | 208 | } |
208 | /* A macro wrapper for impl_check that first uses a non-locked test before | 209 | /* A macro wrapper for impl_check that first uses a non-locked test before |
209 | * invoking the function (which checks again inside a lock). */ | 210 | * invoking the function (which checks again inside a lock). */ |
210 | #define IMPL_CHECK if(!impl) impl_check(); | 211 | #define IMPL_CHECK if(!impl) impl_check(); |
211 | 212 | ||
212 | /* API functions to get/set the "ex_data" implementation */ | 213 | /* API functions to get/set the "ex_data" implementation */ |
213 | const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void) | 214 | const CRYPTO_EX_DATA_IMPL |
214 | { | 215 | *CRYPTO_get_ex_data_implementation(void) |
216 | { | ||
215 | IMPL_CHECK | 217 | IMPL_CHECK |
216 | return impl; | 218 | return impl; |
217 | } | 219 | } |
218 | int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i) | 220 | |
219 | { | 221 | int |
222 | CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i) | ||
223 | { | ||
220 | int toret = 0; | 224 | int toret = 0; |
221 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 225 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
222 | if(!impl) | 226 | if (!impl) { |
223 | { | ||
224 | impl = i; | 227 | impl = i; |
225 | toret = 1; | 228 | toret = 1; |
226 | } | 229 | } |
227 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 230 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
228 | return toret; | 231 | return toret; |
229 | } | 232 | } |
230 | 233 | ||
231 | /****************************************************************************/ | 234 | /****************************************************************************/ |
232 | /* Interal (default) implementation of "ex_data" support. API functions are | 235 | /* Interal (default) implementation of "ex_data" support. API functions are |
@@ -249,288 +252,283 @@ DECLARE_LHASH_OF(EX_CLASS_ITEM); | |||
249 | static LHASH_OF(EX_CLASS_ITEM) *ex_data = NULL; | 252 | static LHASH_OF(EX_CLASS_ITEM) *ex_data = NULL; |
250 | 253 | ||
251 | /* The callbacks required in the "ex_data" hash table */ | 254 | /* The callbacks required in the "ex_data" hash table */ |
252 | static unsigned long ex_class_item_hash(const EX_CLASS_ITEM *a) | 255 | static unsigned long |
253 | { | 256 | ex_class_item_hash(const EX_CLASS_ITEM *a) |
257 | { | ||
254 | return a->class_index; | 258 | return a->class_index; |
255 | } | 259 | } |
260 | |||
256 | static IMPLEMENT_LHASH_HASH_FN(ex_class_item, EX_CLASS_ITEM) | 261 | static IMPLEMENT_LHASH_HASH_FN(ex_class_item, EX_CLASS_ITEM) |
257 | 262 | ||
258 | static int ex_class_item_cmp(const EX_CLASS_ITEM *a, const EX_CLASS_ITEM *b) | 263 | static int |
259 | { | 264 | ex_class_item_cmp(const EX_CLASS_ITEM *a, const EX_CLASS_ITEM *b) |
265 | { | ||
260 | return a->class_index - b->class_index; | 266 | return a->class_index - b->class_index; |
261 | } | 267 | } |
268 | |||
262 | static IMPLEMENT_LHASH_COMP_FN(ex_class_item, EX_CLASS_ITEM) | 269 | static IMPLEMENT_LHASH_COMP_FN(ex_class_item, EX_CLASS_ITEM) |
263 | 270 | ||
264 | /* Internal functions used by the "impl_default" implementation to access the | 271 | /* Internal functions used by the "impl_default" implementation to access the |
265 | * state */ | 272 | * state */ |
266 | 273 | ||
267 | static int ex_data_check(void) | 274 | static int |
268 | { | 275 | ex_data_check(void) |
276 | { | ||
269 | int toret = 1; | 277 | int toret = 1; |
270 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 278 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
271 | if(!ex_data | 279 | if (!ex_data |
272 | && (ex_data = lh_EX_CLASS_ITEM_new()) == NULL) | 280 | && (ex_data = lh_EX_CLASS_ITEM_new()) == NULL) |
273 | toret = 0; | 281 | toret = 0; |
274 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 282 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
275 | return toret; | 283 | return toret; |
276 | } | 284 | } |
277 | /* This macros helps reduce the locking from repeated checks because the | 285 | /* This macros helps reduce the locking from repeated checks because the |
278 | * ex_data_check() function checks ex_data again inside a lock. */ | 286 | * ex_data_check() function checks ex_data again inside a lock. */ |
279 | #define EX_DATA_CHECK(iffail) if(!ex_data && !ex_data_check()) {iffail} | 287 | #define EX_DATA_CHECK(iffail) if(!ex_data && !ex_data_check()) {iffail} |
280 | 288 | ||
281 | /* This "inner" callback is used by the callback function that follows it */ | 289 | /* This "inner" callback is used by the callback function that follows it */ |
282 | static void def_cleanup_util_cb(CRYPTO_EX_DATA_FUNCS *funcs) | 290 | static void |
283 | { | 291 | def_cleanup_util_cb(CRYPTO_EX_DATA_FUNCS *funcs) |
292 | { | ||
284 | OPENSSL_free(funcs); | 293 | OPENSSL_free(funcs); |
285 | } | 294 | } |
286 | 295 | ||
287 | /* This callback is used in lh_doall to destroy all EX_CLASS_ITEM values from | 296 | /* This callback is used in lh_doall to destroy all EX_CLASS_ITEM values from |
288 | * "ex_data" prior to the ex_data hash table being itself destroyed. Doesn't do | 297 | * "ex_data" prior to the ex_data hash table being itself destroyed. Doesn't do |
289 | * any locking. */ | 298 | * any locking. */ |
290 | static void def_cleanup_cb(void *a_void) | 299 | static void |
291 | { | 300 | def_cleanup_cb(void *a_void) |
301 | { | ||
292 | EX_CLASS_ITEM *item = (EX_CLASS_ITEM *)a_void; | 302 | EX_CLASS_ITEM *item = (EX_CLASS_ITEM *)a_void; |
293 | sk_CRYPTO_EX_DATA_FUNCS_pop_free(item->meth, def_cleanup_util_cb); | 303 | sk_CRYPTO_EX_DATA_FUNCS_pop_free(item->meth, def_cleanup_util_cb); |
294 | OPENSSL_free(item); | 304 | OPENSSL_free(item); |
295 | } | 305 | } |
296 | 306 | ||
297 | /* Return the EX_CLASS_ITEM from the "ex_data" hash table that corresponds to a | 307 | /* Return the EX_CLASS_ITEM from the "ex_data" hash table that corresponds to a |
298 | * given class. Handles locking. */ | 308 | * given class. Handles locking. */ |
299 | static EX_CLASS_ITEM *def_get_class(int class_index) | 309 | static EX_CLASS_ITEM |
300 | { | 310 | *def_get_class(int class_index) |
311 | { | ||
301 | EX_CLASS_ITEM d, *p, *gen; | 312 | EX_CLASS_ITEM d, *p, *gen; |
302 | EX_DATA_CHECK(return NULL;) | 313 | EX_DATA_CHECK(return NULL;) |
303 | d.class_index = class_index; | 314 | d.class_index = class_index; |
304 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 315 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
305 | p = lh_EX_CLASS_ITEM_retrieve(ex_data, &d); | 316 | p = lh_EX_CLASS_ITEM_retrieve(ex_data, &d); |
306 | if(!p) | 317 | if (!p) { |
307 | { | ||
308 | gen = OPENSSL_malloc(sizeof(EX_CLASS_ITEM)); | 318 | gen = OPENSSL_malloc(sizeof(EX_CLASS_ITEM)); |
309 | if(gen) | 319 | if (gen) { |
310 | { | ||
311 | gen->class_index = class_index; | 320 | gen->class_index = class_index; |
312 | gen->meth_num = 0; | 321 | gen->meth_num = 0; |
313 | gen->meth = sk_CRYPTO_EX_DATA_FUNCS_new_null(); | 322 | gen->meth = sk_CRYPTO_EX_DATA_FUNCS_new_null(); |
314 | if(!gen->meth) | 323 | if (!gen->meth) |
315 | OPENSSL_free(gen); | 324 | OPENSSL_free(gen); |
316 | else | 325 | else { |
317 | { | ||
318 | /* Because we're inside the ex_data lock, the | 326 | /* Because we're inside the ex_data lock, the |
319 | * return value from the insert will be NULL */ | 327 | * return value from the insert will be NULL */ |
320 | (void)lh_EX_CLASS_ITEM_insert(ex_data, gen); | 328 | (void)lh_EX_CLASS_ITEM_insert(ex_data, gen); |
321 | p = gen; | 329 | p = gen; |
322 | } | ||
323 | } | 330 | } |
324 | } | 331 | } |
332 | } | ||
325 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 333 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
326 | if(!p) | 334 | if (!p) |
327 | CRYPTOerr(CRYPTO_F_DEF_GET_CLASS,ERR_R_MALLOC_FAILURE); | 335 | CRYPTOerr(CRYPTO_F_DEF_GET_CLASS, ERR_R_MALLOC_FAILURE); |
328 | return p; | 336 | return p; |
329 | } | 337 | } |
330 | 338 | ||
331 | /* Add a new method to the given EX_CLASS_ITEM and return the corresponding | 339 | /* Add a new method to the given EX_CLASS_ITEM and return the corresponding |
332 | * index (or -1 for error). Handles locking. */ | 340 | * index (or -1 for error). Handles locking. */ |
333 | static int def_add_index(EX_CLASS_ITEM *item, long argl, void *argp, | 341 | static int |
334 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 342 | def_add_index(EX_CLASS_ITEM *item, long argl, void *argp, |
335 | CRYPTO_EX_free *free_func) | 343 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
336 | { | 344 | { |
337 | int toret = -1; | 345 | int toret = -1; |
338 | CRYPTO_EX_DATA_FUNCS *a = (CRYPTO_EX_DATA_FUNCS *)OPENSSL_malloc( | 346 | CRYPTO_EX_DATA_FUNCS *a = (CRYPTO_EX_DATA_FUNCS *)OPENSSL_malloc( |
339 | sizeof(CRYPTO_EX_DATA_FUNCS)); | 347 | sizeof(CRYPTO_EX_DATA_FUNCS)); |
340 | if(!a) | 348 | if (!a) { |
341 | { | 349 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX, ERR_R_MALLOC_FAILURE); |
342 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX,ERR_R_MALLOC_FAILURE); | ||
343 | return -1; | 350 | return -1; |
344 | } | 351 | } |
345 | a->argl=argl; | 352 | a->argl = argl; |
346 | a->argp=argp; | 353 | a->argp = argp; |
347 | a->new_func=new_func; | 354 | a->new_func = new_func; |
348 | a->dup_func=dup_func; | 355 | a->dup_func = dup_func; |
349 | a->free_func=free_func; | 356 | a->free_func = free_func; |
350 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 357 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
351 | while (sk_CRYPTO_EX_DATA_FUNCS_num(item->meth) <= item->meth_num) | 358 | while (sk_CRYPTO_EX_DATA_FUNCS_num(item->meth) <= item->meth_num) { |
352 | { | 359 | if (!sk_CRYPTO_EX_DATA_FUNCS_push(item->meth, NULL)) { |
353 | if (!sk_CRYPTO_EX_DATA_FUNCS_push(item->meth, NULL)) | 360 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX, ERR_R_MALLOC_FAILURE); |
354 | { | ||
355 | CRYPTOerr(CRYPTO_F_DEF_ADD_INDEX,ERR_R_MALLOC_FAILURE); | ||
356 | OPENSSL_free(a); | 361 | OPENSSL_free(a); |
357 | goto err; | 362 | goto err; |
358 | } | ||
359 | } | 363 | } |
364 | } | ||
360 | toret = item->meth_num++; | 365 | toret = item->meth_num++; |
361 | (void)sk_CRYPTO_EX_DATA_FUNCS_set(item->meth, toret, a); | 366 | (void)sk_CRYPTO_EX_DATA_FUNCS_set(item->meth, toret, a); |
362 | err: | 367 | err: |
363 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 368 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
364 | return toret; | 369 | return toret; |
365 | } | 370 | } |
366 | 371 | ||
367 | /**************************************************************/ | 372 | /**************************************************************/ |
368 | /* The functions in the default CRYPTO_EX_DATA_IMPL structure */ | 373 | /* The functions in the default CRYPTO_EX_DATA_IMPL structure */ |
369 | 374 | ||
370 | static int int_new_class(void) | 375 | static int |
371 | { | 376 | int_new_class(void) |
377 | { | ||
372 | int toret; | 378 | int toret; |
373 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); | 379 | CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); |
374 | toret = ex_class++; | 380 | toret = ex_class++; |
375 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); | 381 | CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA); |
376 | return toret; | 382 | return toret; |
377 | } | 383 | } |
378 | 384 | ||
379 | static void int_cleanup(void) | 385 | static void |
380 | { | 386 | int_cleanup(void) |
387 | { | ||
381 | EX_DATA_CHECK(return;) | 388 | EX_DATA_CHECK(return;) |
382 | lh_EX_CLASS_ITEM_doall(ex_data, def_cleanup_cb); | 389 | lh_EX_CLASS_ITEM_doall(ex_data, def_cleanup_cb); |
383 | lh_EX_CLASS_ITEM_free(ex_data); | 390 | lh_EX_CLASS_ITEM_free(ex_data); |
384 | ex_data = NULL; | 391 | ex_data = NULL; |
385 | impl = NULL; | 392 | impl = NULL; |
386 | } | 393 | } |
387 | 394 | ||
388 | static int int_get_new_index(int class_index, long argl, void *argp, | 395 | static int |
389 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 396 | int_get_new_index(int class_index, long argl, void *argp, |
390 | CRYPTO_EX_free *free_func) | 397 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, |
391 | { | 398 | CRYPTO_EX_free *free_func) |
399 | { | ||
392 | EX_CLASS_ITEM *item = def_get_class(class_index); | 400 | EX_CLASS_ITEM *item = def_get_class(class_index); |
393 | if(!item) | 401 | if (!item) |
394 | return -1; | 402 | return -1; |
395 | return def_add_index(item, argl, argp, new_func, dup_func, free_func); | 403 | return def_add_index(item, argl, argp, new_func, dup_func, free_func); |
396 | } | 404 | } |
397 | 405 | ||
398 | /* Thread-safe by copying a class's array of "CRYPTO_EX_DATA_FUNCS" entries in | 406 | /* Thread-safe by copying a class's array of "CRYPTO_EX_DATA_FUNCS" entries in |
399 | * the lock, then using them outside the lock. NB: Thread-safety only applies to | 407 | * the lock, then using them outside the lock. NB: Thread-safety only applies to |
400 | * the global "ex_data" state (ie. class definitions), not thread-safe on 'ad' | 408 | * the global "ex_data" state (ie. class definitions), not thread-safe on 'ad' |
401 | * itself. */ | 409 | * itself. */ |
402 | static int int_new_ex_data(int class_index, void *obj, | 410 | static int |
403 | CRYPTO_EX_DATA *ad) | 411 | int_new_ex_data(int class_index, void *obj, |
404 | { | 412 | CRYPTO_EX_DATA *ad) |
405 | int mx,i; | 413 | { |
414 | int mx, i; | ||
406 | void *ptr; | 415 | void *ptr; |
407 | CRYPTO_EX_DATA_FUNCS **storage = NULL; | 416 | CRYPTO_EX_DATA_FUNCS **storage = NULL; |
408 | EX_CLASS_ITEM *item = def_get_class(class_index); | 417 | EX_CLASS_ITEM *item = def_get_class(class_index); |
409 | if(!item) | 418 | if (!item) |
410 | /* error is already set */ | 419 | /* error is already set */ |
411 | return 0; | 420 | return 0; |
412 | ad->sk = NULL; | 421 | ad->sk = NULL; |
413 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); | 422 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); |
414 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); | 423 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); |
415 | if(mx > 0) | 424 | if (mx > 0) { |
416 | { | ||
417 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); | 425 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); |
418 | if(!storage) | 426 | if (!storage) |
419 | goto skip; | 427 | goto skip; |
420 | for(i = 0; i < mx; i++) | 428 | for (i = 0; i < mx; i++) |
421 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth,i); | 429 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth, i); |
422 | } | 430 | } |
423 | skip: | 431 | skip: |
424 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); | 432 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); |
425 | if((mx > 0) && !storage) | 433 | if ((mx > 0) && !storage) { |
426 | { | 434 | CRYPTOerr(CRYPTO_F_INT_NEW_EX_DATA, ERR_R_MALLOC_FAILURE); |
427 | CRYPTOerr(CRYPTO_F_INT_NEW_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
428 | return 0; | 435 | return 0; |
429 | } | 436 | } |
430 | for(i = 0; i < mx; i++) | 437 | for (i = 0; i < mx; i++) { |
431 | { | 438 | if (storage[i] && storage[i]->new_func) { |
432 | if(storage[i] && storage[i]->new_func) | ||
433 | { | ||
434 | ptr = CRYPTO_get_ex_data(ad, i); | 439 | ptr = CRYPTO_get_ex_data(ad, i); |
435 | storage[i]->new_func(obj,ptr,ad,i, | 440 | storage[i]->new_func(obj, ptr, ad, i, |
436 | storage[i]->argl,storage[i]->argp); | 441 | storage[i]->argl, storage[i]->argp); |
437 | } | ||
438 | } | 442 | } |
439 | if(storage) | 443 | } |
444 | if (storage) | ||
440 | OPENSSL_free(storage); | 445 | OPENSSL_free(storage); |
441 | return 1; | 446 | return 1; |
442 | } | 447 | } |
443 | 448 | ||
444 | /* Same thread-safety notes as for "int_new_ex_data" */ | 449 | /* Same thread-safety notes as for "int_new_ex_data" */ |
445 | static int int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 450 | static int |
446 | CRYPTO_EX_DATA *from) | 451 | int_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, |
447 | { | 452 | CRYPTO_EX_DATA *from) |
453 | { | ||
448 | int mx, j, i; | 454 | int mx, j, i; |
449 | char *ptr; | 455 | char *ptr; |
450 | CRYPTO_EX_DATA_FUNCS **storage = NULL; | 456 | CRYPTO_EX_DATA_FUNCS **storage = NULL; |
451 | EX_CLASS_ITEM *item; | 457 | EX_CLASS_ITEM *item; |
452 | if(!from->sk) | 458 | if (!from->sk) |
453 | /* 'to' should be "blank" which *is* just like 'from' */ | 459 | /* 'to' should be "blank" which *is* just like 'from' */ |
454 | return 1; | 460 | return 1; |
455 | if((item = def_get_class(class_index)) == NULL) | 461 | if ((item = def_get_class(class_index)) == NULL) |
456 | return 0; | 462 | return 0; |
457 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); | 463 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); |
458 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); | 464 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); |
459 | j = sk_void_num(from->sk); | 465 | j = sk_void_num(from->sk); |
460 | if(j < mx) | 466 | if (j < mx) |
461 | mx = j; | 467 | mx = j; |
462 | if(mx > 0) | 468 | if (mx > 0) { |
463 | { | ||
464 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); | 469 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); |
465 | if(!storage) | 470 | if (!storage) |
466 | goto skip; | 471 | goto skip; |
467 | for(i = 0; i < mx; i++) | 472 | for (i = 0; i < mx; i++) |
468 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth,i); | 473 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth, i); |
469 | } | 474 | } |
470 | skip: | 475 | skip: |
471 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); | 476 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); |
472 | if((mx > 0) && !storage) | 477 | if ((mx > 0) && !storage) { |
473 | { | 478 | CRYPTOerr(CRYPTO_F_INT_DUP_EX_DATA, ERR_R_MALLOC_FAILURE); |
474 | CRYPTOerr(CRYPTO_F_INT_DUP_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
475 | return 0; | 479 | return 0; |
476 | } | 480 | } |
477 | for(i = 0; i < mx; i++) | 481 | for (i = 0; i < mx; i++) { |
478 | { | ||
479 | ptr = CRYPTO_get_ex_data(from, i); | 482 | ptr = CRYPTO_get_ex_data(from, i); |
480 | if(storage[i] && storage[i]->dup_func) | 483 | if (storage[i] && storage[i]->dup_func) |
481 | storage[i]->dup_func(to,from,&ptr,i, | 484 | storage[i]->dup_func(to, from, &ptr, i, |
482 | storage[i]->argl,storage[i]->argp); | 485 | storage[i]->argl, storage[i]->argp); |
483 | CRYPTO_set_ex_data(to,i,ptr); | 486 | CRYPTO_set_ex_data(to, i, ptr); |
484 | } | 487 | } |
485 | if(storage) | 488 | if (storage) |
486 | OPENSSL_free(storage); | 489 | OPENSSL_free(storage); |
487 | return 1; | 490 | return 1; |
488 | } | 491 | } |
489 | 492 | ||
490 | /* Same thread-safety notes as for "int_new_ex_data" */ | 493 | /* Same thread-safety notes as for "int_new_ex_data" */ |
491 | static void int_free_ex_data(int class_index, void *obj, | 494 | static void |
492 | CRYPTO_EX_DATA *ad) | 495 | int_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) |
493 | { | 496 | { |
494 | int mx,i; | 497 | int mx, i; |
495 | EX_CLASS_ITEM *item; | 498 | EX_CLASS_ITEM *item; |
496 | void *ptr; | 499 | void *ptr; |
497 | CRYPTO_EX_DATA_FUNCS **storage = NULL; | 500 | CRYPTO_EX_DATA_FUNCS **storage = NULL; |
498 | if((item = def_get_class(class_index)) == NULL) | 501 | if ((item = def_get_class(class_index)) == NULL) |
499 | return; | 502 | return; |
500 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); | 503 | CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA); |
501 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); | 504 | mx = sk_CRYPTO_EX_DATA_FUNCS_num(item->meth); |
502 | if(mx > 0) | 505 | if (mx > 0) { |
503 | { | ||
504 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); | 506 | storage = OPENSSL_malloc(mx * sizeof(CRYPTO_EX_DATA_FUNCS*)); |
505 | if(!storage) | 507 | if (!storage) |
506 | goto skip; | 508 | goto skip; |
507 | for(i = 0; i < mx; i++) | 509 | for (i = 0; i < mx; i++) |
508 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth,i); | 510 | storage[i] = sk_CRYPTO_EX_DATA_FUNCS_value(item->meth, i); |
509 | } | 511 | } |
510 | skip: | 512 | skip: |
511 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); | 513 | CRYPTO_r_unlock(CRYPTO_LOCK_EX_DATA); |
512 | if((mx > 0) && !storage) | 514 | if ((mx > 0) && !storage) { |
513 | { | 515 | CRYPTOerr(CRYPTO_F_INT_FREE_EX_DATA, ERR_R_MALLOC_FAILURE); |
514 | CRYPTOerr(CRYPTO_F_INT_FREE_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
515 | return; | 516 | return; |
517 | } | ||
518 | for (i = 0; i < mx; i++) { | ||
519 | if (storage[i] && storage[i]->free_func) { | ||
520 | ptr = CRYPTO_get_ex_data(ad, i); | ||
521 | storage[i]->free_func(obj, ptr, ad, i, | ||
522 | storage[i]->argl, storage[i]->argp); | ||
516 | } | 523 | } |
517 | for(i = 0; i < mx; i++) | 524 | } |
518 | { | 525 | if (storage) |
519 | if(storage[i] && storage[i]->free_func) | ||
520 | { | ||
521 | ptr = CRYPTO_get_ex_data(ad,i); | ||
522 | storage[i]->free_func(obj,ptr,ad,i, | ||
523 | storage[i]->argl,storage[i]->argp); | ||
524 | } | ||
525 | } | ||
526 | if(storage) | ||
527 | OPENSSL_free(storage); | 526 | OPENSSL_free(storage); |
528 | if(ad->sk) | 527 | if (ad->sk) { |
529 | { | ||
530 | sk_void_free(ad->sk); | 528 | sk_void_free(ad->sk); |
531 | ad->sk=NULL; | 529 | ad->sk = NULL; |
532 | } | ||
533 | } | 530 | } |
531 | } | ||
534 | 532 | ||
535 | /********************************************************************/ | 533 | /********************************************************************/ |
536 | /* API functions that defer all "state" operations to the "ex_data" | 534 | /* API functions that defer all "state" operations to the "ex_data" |
@@ -538,99 +536,101 @@ skip: | |||
538 | 536 | ||
539 | /* Obtain an index for a new class (not the same as getting a new index within | 537 | /* Obtain an index for a new class (not the same as getting a new index within |
540 | * an existing class - this is actually getting a new *class*) */ | 538 | * an existing class - this is actually getting a new *class*) */ |
541 | int CRYPTO_ex_data_new_class(void) | 539 | int |
542 | { | 540 | CRYPTO_ex_data_new_class(void) |
541 | { | ||
543 | IMPL_CHECK | 542 | IMPL_CHECK |
544 | return EX_IMPL(new_class)(); | 543 | return EX_IMPL(new_class)(); |
545 | } | 544 | } |
546 | 545 | ||
547 | /* Release all "ex_data" state to prevent memory leaks. This can't be made | 546 | /* Release all "ex_data" state to prevent memory leaks. This can't be made |
548 | * thread-safe without overhauling a lot of stuff, and shouldn't really be | 547 | * thread-safe without overhauling a lot of stuff, and shouldn't really be |
549 | * called under potential race-conditions anyway (it's for program shutdown | 548 | * called under potential race-conditions anyway (it's for program shutdown |
550 | * after all). */ | 549 | * after all). */ |
551 | void CRYPTO_cleanup_all_ex_data(void) | 550 | void |
552 | { | 551 | CRYPTO_cleanup_all_ex_data(void) |
552 | { | ||
553 | IMPL_CHECK | 553 | IMPL_CHECK |
554 | EX_IMPL(cleanup)(); | 554 | EX_IMPL(cleanup)(); |
555 | } | 555 | } |
556 | 556 | ||
557 | /* Inside an existing class, get/register a new index. */ | 557 | /* Inside an existing class, get/register a new index. */ |
558 | int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, | 558 | int |
559 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, | 559 | CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, |
560 | CRYPTO_EX_free *free_func) | 560 | CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) |
561 | { | 561 | { |
562 | int ret = -1; | 562 | int ret = -1; |
563 | 563 | ||
564 | IMPL_CHECK | 564 | IMPL_CHECK |
565 | ret = EX_IMPL(get_new_index)(class_index, | 565 | ret = EX_IMPL(get_new_index)(class_index, |
566 | argl, argp, new_func, dup_func, free_func); | 566 | argl, argp, new_func, dup_func, free_func); |
567 | return ret; | 567 | return ret; |
568 | } | 568 | } |
569 | 569 | ||
570 | /* Initialise a new CRYPTO_EX_DATA for use in a particular class - including | 570 | /* Initialise a new CRYPTO_EX_DATA for use in a particular class - including |
571 | * calling new() callbacks for each index in the class used by this variable */ | 571 | * calling new() callbacks for each index in the class used by this variable */ |
572 | int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) | 572 | int |
573 | { | 573 | CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) |
574 | { | ||
574 | IMPL_CHECK | 575 | IMPL_CHECK |
575 | return EX_IMPL(new_ex_data)(class_index, obj, ad); | 576 | return EX_IMPL(new_ex_data)(class_index, obj, ad); |
576 | } | 577 | } |
577 | 578 | ||
578 | /* Duplicate a CRYPTO_EX_DATA variable - including calling dup() callbacks for | 579 | /* Duplicate a CRYPTO_EX_DATA variable - including calling dup() callbacks for |
579 | * each index in the class used by this variable */ | 580 | * each index in the class used by this variable */ |
580 | int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, | 581 | int |
581 | CRYPTO_EX_DATA *from) | 582 | CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from) |
582 | { | 583 | { |
583 | IMPL_CHECK | 584 | IMPL_CHECK |
584 | return EX_IMPL(dup_ex_data)(class_index, to, from); | 585 | return EX_IMPL(dup_ex_data)(class_index, to, from); |
585 | } | 586 | } |
586 | 587 | ||
587 | /* Cleanup a CRYPTO_EX_DATA variable - including calling free() callbacks for | 588 | /* Cleanup a CRYPTO_EX_DATA variable - including calling free() callbacks for |
588 | * each index in the class used by this variable */ | 589 | * each index in the class used by this variable */ |
589 | void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) | 590 | void |
590 | { | 591 | CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) |
592 | { | ||
591 | IMPL_CHECK | 593 | IMPL_CHECK |
592 | EX_IMPL(free_ex_data)(class_index, obj, ad); | 594 | EX_IMPL(free_ex_data)(class_index, obj, ad); |
593 | } | 595 | } |
594 | 596 | ||
595 | /* For a given CRYPTO_EX_DATA variable, set the value corresponding to a | 597 | /* For a given CRYPTO_EX_DATA variable, set the value corresponding to a |
596 | * particular index in the class used by this variable */ | 598 | * particular index in the class used by this variable */ |
597 | int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val) | 599 | int |
598 | { | 600 | CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val) |
601 | { | ||
599 | int i; | 602 | int i; |
600 | 603 | ||
601 | if (ad->sk == NULL) | 604 | if (ad->sk == NULL) { |
602 | { | 605 | if ((ad->sk = sk_void_new_null()) == NULL) { |
603 | if ((ad->sk=sk_void_new_null()) == NULL) | 606 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA, ERR_R_MALLOC_FAILURE); |
604 | { | 607 | return (0); |
605 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA,ERR_R_MALLOC_FAILURE); | ||
606 | return(0); | ||
607 | } | ||
608 | } | 608 | } |
609 | i=sk_void_num(ad->sk); | 609 | } |
610 | 610 | i = sk_void_num(ad->sk); | |
611 | while (i <= idx) | 611 | |
612 | { | 612 | while (i <= idx) { |
613 | if (!sk_void_push(ad->sk,NULL)) | 613 | if (!sk_void_push(ad->sk, NULL)) { |
614 | { | 614 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA, ERR_R_MALLOC_FAILURE); |
615 | CRYPTOerr(CRYPTO_F_CRYPTO_SET_EX_DATA,ERR_R_MALLOC_FAILURE); | 615 | return (0); |
616 | return(0); | ||
617 | } | ||
618 | i++; | ||
619 | } | 616 | } |
620 | sk_void_set(ad->sk,idx,val); | 617 | i++; |
621 | return(1); | ||
622 | } | 618 | } |
619 | sk_void_set(ad->sk, idx, val); | ||
620 | return (1); | ||
621 | } | ||
623 | 622 | ||
624 | /* For a given CRYPTO_EX_DATA_ variable, get the value corresponding to a | 623 | /* For a given CRYPTO_EX_DATA_ variable, get the value corresponding to a |
625 | * particular index in the class used by this variable */ | 624 | * particular index in the class used by this variable */ |
626 | void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx) | 625 | void |
627 | { | 626 | *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx) |
627 | { | ||
628 | if (ad->sk == NULL) | 628 | if (ad->sk == NULL) |
629 | return(0); | 629 | return (0); |
630 | else if (idx >= sk_void_num(ad->sk)) | 630 | else if (idx >= sk_void_num(ad->sk)) |
631 | return(0); | 631 | return (0); |
632 | else | 632 | else |
633 | return(sk_void_value(ad->sk,idx)); | 633 | return (sk_void_value(ad->sk, idx)); |
634 | } | 634 | } |
635 | 635 | ||
636 | IMPLEMENT_STACK_OF(CRYPTO_EX_DATA_FUNCS) | 636 | IMPLEMENT_STACK_OF(CRYPTO_EX_DATA_FUNCS) |
diff --git a/src/lib/libssl/src/crypto/fips_ers.c b/src/lib/libssl/src/crypto/fips_ers.c index 09f11748f6..1788ed2884 100644 --- a/src/lib/libssl/src/crypto/fips_ers.c +++ b/src/lib/libssl/src/crypto/fips_ers.c | |||
@@ -3,5 +3,5 @@ | |||
3 | #ifdef OPENSSL_FIPS | 3 | #ifdef OPENSSL_FIPS |
4 | # include "fips_err.h" | 4 | # include "fips_err.h" |
5 | #else | 5 | #else |
6 | static void *dummy=&dummy; | 6 | static void *dummy = &dummy; |
7 | #endif | 7 | #endif |
diff --git a/src/lib/libssl/src/crypto/md32_common.h b/src/lib/libssl/src/crypto/md32_common.h index bb7381952a..bfb610e802 100644 --- a/src/lib/libssl/src/crypto/md32_common.h +++ b/src/lib/libssl/src/crypto/md32_common.h | |||
@@ -148,7 +148,7 @@ | |||
148 | # if defined(__POWERPC__) | 148 | # if defined(__POWERPC__) |
149 | # define ROTATE(a,n) __rlwinm(a,n,0,31) | 149 | # define ROTATE(a,n) __rlwinm(a,n,0,31) |
150 | # elif defined(__MC68K__) | 150 | # elif defined(__MC68K__) |
151 | /* Motorola specific tweak. <appro@fy.chalmers.se> */ | 151 | /* Motorola specific tweak. <appro@fy.chalmers.se> */ |
152 | # define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) ) | 152 | # define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) ) |
153 | # else | 153 | # else |
154 | # define ROTATE(a,n) __rol(a,n) | 154 | # define ROTATE(a,n) __rol(a,n) |
@@ -252,7 +252,7 @@ | |||
252 | #endif | 252 | #endif |
253 | #if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) | 253 | #if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) |
254 | # ifndef B_ENDIAN | 254 | # ifndef B_ENDIAN |
255 | /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */ | 255 | /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */ |
256 | # define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l) | 256 | # define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l) |
257 | # define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l) | 257 | # define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l) |
258 | # endif | 258 | # endif |
@@ -279,108 +279,103 @@ | |||
279 | * Time for some action:-) | 279 | * Time for some action:-) |
280 | */ | 280 | */ |
281 | 281 | ||
282 | int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len) | 282 | int |
283 | { | 283 | HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) |
284 | const unsigned char *data=data_; | 284 | { |
285 | const unsigned char *data = data_; | ||
285 | unsigned char *p; | 286 | unsigned char *p; |
286 | HASH_LONG l; | 287 | HASH_LONG l; |
287 | size_t n; | 288 | size_t n; |
288 | 289 | ||
289 | if (len==0) return 1; | 290 | if (len == 0) |
291 | return 1; | ||
290 | 292 | ||
291 | l=(c->Nl+(((HASH_LONG)len)<<3))&0xffffffffUL; | 293 | l = (c->Nl + (((HASH_LONG)len) << 3))&0xffffffffUL; |
292 | /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to | 294 | /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to |
293 | * Wei Dai <weidai@eskimo.com> for pointing it out. */ | 295 | * Wei Dai <weidai@eskimo.com> for pointing it out. */ |
294 | if (l < c->Nl) /* overflow */ | 296 | if (l < c->Nl) /* overflow */ |
295 | c->Nh++; | 297 | c->Nh++; |
296 | c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */ | 298 | c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */ |
297 | c->Nl=l; | 299 | c->Nl = l; |
298 | 300 | ||
299 | n = c->num; | 301 | n = c->num; |
300 | if (n != 0) | 302 | if (n != 0) { |
301 | { | 303 | p = (unsigned char *)c->data; |
302 | p=(unsigned char *)c->data; | 304 | |
303 | 305 | if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { | |
304 | if (len >= HASH_CBLOCK || len+n >= HASH_CBLOCK) | 306 | memcpy (p + n, data, HASH_CBLOCK - n); |
305 | { | 307 | HASH_BLOCK_DATA_ORDER (c, p, 1); |
306 | memcpy (p+n,data,HASH_CBLOCK-n); | 308 | n = HASH_CBLOCK - n; |
307 | HASH_BLOCK_DATA_ORDER (c,p,1); | 309 | data += n; |
308 | n = HASH_CBLOCK-n; | 310 | len -= n; |
309 | data += n; | ||
310 | len -= n; | ||
311 | c->num = 0; | 311 | c->num = 0; |
312 | memset (p,0,HASH_CBLOCK); /* keep it zeroed */ | 312 | memset (p,0,HASH_CBLOCK); /* keep it zeroed */ |
313 | } | 313 | } else { |
314 | else | 314 | memcpy (p + n, data, len); |
315 | { | ||
316 | memcpy (p+n,data,len); | ||
317 | c->num += (unsigned int)len; | 315 | c->num += (unsigned int)len; |
318 | return 1; | 316 | return 1; |
319 | } | ||
320 | } | 317 | } |
318 | } | ||
321 | 319 | ||
322 | n = len/HASH_CBLOCK; | 320 | n = len/HASH_CBLOCK; |
323 | if (n > 0) | 321 | if (n > 0) { |
324 | { | 322 | HASH_BLOCK_DATA_ORDER (c, data, n); |
325 | HASH_BLOCK_DATA_ORDER (c,data,n); | ||
326 | n *= HASH_CBLOCK; | 323 | n *= HASH_CBLOCK; |
327 | data += n; | 324 | data += n; |
328 | len -= n; | 325 | len -= n; |
329 | } | 326 | } |
330 | 327 | ||
331 | if (len != 0) | 328 | if (len != 0) { |
332 | { | ||
333 | p = (unsigned char *)c->data; | 329 | p = (unsigned char *)c->data; |
334 | c->num = (unsigned int)len; | 330 | c->num = (unsigned int)len; |
335 | memcpy (p,data,len); | 331 | memcpy (p, data, len); |
336 | } | ||
337 | return 1; | ||
338 | } | 332 | } |
333 | return 1; | ||
334 | } | ||
339 | 335 | ||
340 | 336 | ||
341 | void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) | 337 | void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) |
342 | { | 338 | { |
343 | HASH_BLOCK_DATA_ORDER (c,data,1); | 339 | HASH_BLOCK_DATA_ORDER (c, data, 1); |
344 | } | 340 | } |
345 | 341 | ||
346 | 342 | ||
347 | int HASH_FINAL (unsigned char *md, HASH_CTX *c) | 343 | int HASH_FINAL (unsigned char *md, HASH_CTX *c) |
348 | { | 344 | { |
349 | unsigned char *p = (unsigned char *)c->data; | 345 | unsigned char *p = (unsigned char *)c->data; |
350 | size_t n = c->num; | 346 | size_t n = c->num; |
351 | 347 | ||
352 | p[n] = 0x80; /* there is always room for one */ | 348 | p[n] = 0x80; /* there is always room for one */ |
353 | n++; | 349 | n++; |
354 | 350 | ||
355 | if (n > (HASH_CBLOCK-8)) | 351 | if (n > (HASH_CBLOCK - 8)) { |
356 | { | 352 | memset (p + n, 0, HASH_CBLOCK - n); |
357 | memset (p+n,0,HASH_CBLOCK-n); | 353 | n = 0; |
358 | n=0; | 354 | HASH_BLOCK_DATA_ORDER (c, p, 1); |
359 | HASH_BLOCK_DATA_ORDER (c,p,1); | 355 | } |
360 | } | 356 | memset (p + n, 0, HASH_CBLOCK - 8 - n); |
361 | memset (p+n,0,HASH_CBLOCK-8-n); | ||
362 | 357 | ||
363 | p += HASH_CBLOCK-8; | 358 | p += HASH_CBLOCK - 8; |
364 | #if defined(DATA_ORDER_IS_BIG_ENDIAN) | 359 | #if defined(DATA_ORDER_IS_BIG_ENDIAN) |
365 | (void)HOST_l2c(c->Nh,p); | 360 | (void)HOST_l2c(c->Nh, p); |
366 | (void)HOST_l2c(c->Nl,p); | 361 | (void)HOST_l2c(c->Nl, p); |
367 | #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) | 362 | #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) |
368 | (void)HOST_l2c(c->Nl,p); | 363 | (void)HOST_l2c(c->Nl, p); |
369 | (void)HOST_l2c(c->Nh,p); | 364 | (void)HOST_l2c(c->Nh, p); |
370 | #endif | 365 | #endif |
371 | p -= HASH_CBLOCK; | 366 | p -= HASH_CBLOCK; |
372 | HASH_BLOCK_DATA_ORDER (c,p,1); | 367 | HASH_BLOCK_DATA_ORDER (c, p, 1); |
373 | c->num=0; | 368 | c->num = 0; |
374 | memset (p,0,HASH_CBLOCK); | 369 | memset (p, 0, HASH_CBLOCK); |
375 | 370 | ||
376 | #ifndef HASH_MAKE_STRING | 371 | #ifndef HASH_MAKE_STRING |
377 | #error "HASH_MAKE_STRING must be defined!" | 372 | #error "HASH_MAKE_STRING must be defined!" |
378 | #else | 373 | #else |
379 | HASH_MAKE_STRING(c,md); | 374 | HASH_MAKE_STRING(c, md); |
380 | #endif | 375 | #endif |
381 | 376 | ||
382 | return 1; | 377 | return 1; |
383 | } | 378 | } |
384 | 379 | ||
385 | #ifndef MD32_REG_T | 380 | #ifndef MD32_REG_T |
386 | #if defined(__alpha) || defined(__sparcv9) || defined(__mips) | 381 | #if defined(__alpha) || defined(__sparcv9) || defined(__mips) |
diff --git a/src/lib/libssl/src/crypto/mem.c b/src/lib/libssl/src/crypto/mem.c index 55e829dc92..86e5ff1c8e 100644 --- a/src/lib/libssl/src/crypto/mem.c +++ b/src/lib/libssl/src/crypto/mem.c | |||
@@ -62,206 +62,230 @@ | |||
62 | #include "cryptlib.h" | 62 | #include "cryptlib.h" |
63 | 63 | ||
64 | 64 | ||
65 | static int allow_customize = 1; /* we provide flexible functions for */ | 65 | static int allow_customize = 1; |
66 | static int allow_customize_debug = 1;/* exchanging memory-related functions at | 66 | /* we provide flexible functions for */ |
67 | * run-time, but this must be done | 67 | static int allow_customize_debug = 1;/* exchanging memory - related functions at |
68 | * before any blocks are actually | 68 | * run - time, but this must be done |
69 | * allocated; or we'll run into huge | 69 | * before any blocks are actually |
70 | * problems when malloc/free pairs | 70 | * allocated; or we'll run into huge |
71 | * don't match etc. */ | 71 | * problems when malloc/free pairs |
72 | 72 | * don't match etc. */ | |
73 | |||
74 | 73 | ||
75 | /* the following pointers may be changed as long as 'allow_customize' is set */ | 74 | /* the following pointers may be changed as long as 'allow_customize' is set */ |
76 | 75 | ||
77 | static void *(*malloc_func)(size_t) = malloc; | 76 | static void *(*malloc_func)(size_t) = malloc; |
78 | static void *default_malloc_ex(size_t num, const char *file, int line) | 77 | static void |
79 | { return malloc_func(num); } | 78 | *default_malloc_ex(size_t num, const char *file, int line) |
80 | static void *(*malloc_ex_func)(size_t, const char *file, int line) | 79 | { |
81 | = default_malloc_ex; | 80 | return malloc_func(num); |
82 | 81 | } | |
83 | static void *(*realloc_func)(void *, size_t)= realloc; | 82 | static void *(*malloc_ex_func)(size_t, const char *file, int line) = |
84 | static void *default_realloc_ex(void *str, size_t num, | 83 | default_malloc_ex; |
85 | const char *file, int line) | 84 | |
86 | { return realloc_func(str,num); } | 85 | static void *(*realloc_func)(void *, size_t) = realloc; |
87 | static void *(*realloc_ex_func)(void *, size_t, const char *file, int line) | 86 | static void |
88 | = default_realloc_ex; | 87 | *default_realloc_ex(void *str, size_t num, const char *file, int line) |
89 | 88 | { | |
90 | static void (*free_func)(void *) = free; | 89 | return realloc_func(str, num); |
91 | 90 | } | |
92 | static void *(*malloc_locked_func)(size_t) = malloc; | 91 | static void *(*realloc_ex_func)(void *, size_t, const char *file, int line) = |
93 | static void *default_malloc_locked_ex(size_t num, const char *file, int line) | 92 | default_realloc_ex; |
94 | { return malloc_locked_func(num); } | 93 | |
95 | static void *(*malloc_locked_ex_func)(size_t, const char *file, int line) | 94 | static void (*free_func)(void *) = free; |
96 | = default_malloc_locked_ex; | 95 | |
97 | 96 | static void *(*malloc_locked_func)(size_t) = malloc; | |
98 | static void (*free_locked_func)(void *) = free; | 97 | static void |
99 | 98 | *default_malloc_locked_ex(size_t num, const char *file, int line) | |
99 | { | ||
100 | return malloc_locked_func(num); | ||
101 | } | ||
102 | static void *(*malloc_locked_ex_func)(size_t, const char *file, int line) = | ||
103 | default_malloc_locked_ex; | ||
104 | |||
105 | static void (*free_locked_func)(void *) = free; | ||
100 | 106 | ||
101 | 107 | ||
102 | /* may be changed as long as 'allow_customize_debug' is set */ | 108 | /* may be changed as long as 'allow_customize_debug' is set */ |
103 | /* XXX use correct function pointer types */ | 109 | /* XXX use correct function pointer types */ |
104 | #ifdef CRYPTO_MDEBUG | 110 | #ifdef CRYPTO_MDEBUG |
105 | /* use default functions from mem_dbg.c */ | 111 | /* use default functions from mem_dbg.c */ |
106 | static void (*malloc_debug_func)(void *,int,const char *,int,int) | 112 | static void (*malloc_debug_func)(void *, int, const char *, int, int) = |
107 | = CRYPTO_dbg_malloc; | 113 | CRYPTO_dbg_malloc; |
108 | static void (*realloc_debug_func)(void *,void *,int,const char *,int,int) | 114 | static void (*realloc_debug_func)(void *, void *, int, const char *, int, int) = |
109 | = CRYPTO_dbg_realloc; | 115 | CRYPTO_dbg_realloc; |
110 | static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free; | 116 | static void (*free_debug_func)(void *, int) = CRYPTO_dbg_free; |
111 | static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; | 117 | static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; |
112 | static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; | 118 | static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; |
113 | #else | 119 | #else |
114 | /* applications can use CRYPTO_malloc_debug_init() to select above case | 120 | /* applications can use CRYPTO_malloc_debug_init() to select above case |
115 | * at run-time */ | 121 | * at run-time */ |
116 | static void (*malloc_debug_func)(void *,int,const char *,int,int) = NULL; | 122 | static void (*malloc_debug_func)(void *, int, const char *, int, int) = NULL; |
117 | static void (*realloc_debug_func)(void *,void *,int,const char *,int,int) | 123 | static void (*realloc_debug_func)(void *, void *, int, const char *, int, int) = |
118 | = NULL; | 124 | NULL; |
119 | static void (*free_debug_func)(void *,int) = NULL; | 125 | static void (*free_debug_func)(void *, int) = NULL; |
120 | static void (*set_debug_options_func)(long) = NULL; | 126 | static void (*set_debug_options_func)(long) = NULL; |
121 | static long (*get_debug_options_func)(void) = NULL; | 127 | static long (*get_debug_options_func)(void) = NULL; |
122 | #endif | 128 | #endif |
123 | 129 | ||
124 | int CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), | 130 | int |
125 | void (*f)(void *)) | 131 | CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), |
126 | { | 132 | void (*f)(void *)) |
133 | { | ||
127 | /* Dummy call just to ensure OPENSSL_init() gets linked in */ | 134 | /* Dummy call just to ensure OPENSSL_init() gets linked in */ |
128 | OPENSSL_init(); | 135 | OPENSSL_init(); |
129 | if (!allow_customize) | 136 | if (!allow_customize) |
130 | return 0; | 137 | return 0; |
131 | if ((m == 0) || (r == 0) || (f == 0)) | 138 | if ((m == 0) || (r == 0) || (f == 0)) |
132 | return 0; | 139 | return 0; |
133 | malloc_func=m; malloc_ex_func=default_malloc_ex; | 140 | malloc_func = m; |
134 | realloc_func=r; realloc_ex_func=default_realloc_ex; | 141 | malloc_ex_func = default_malloc_ex; |
135 | free_func=f; | 142 | realloc_func = r; |
136 | malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex; | 143 | realloc_ex_func = default_realloc_ex; |
137 | free_locked_func=f; | 144 | free_func = f; |
145 | malloc_locked_func = m; | ||
146 | malloc_locked_ex_func = default_malloc_locked_ex; | ||
147 | free_locked_func = f; | ||
138 | return 1; | 148 | return 1; |
139 | } | 149 | } |
140 | 150 | ||
141 | int CRYPTO_set_mem_ex_functions( | 151 | int |
142 | void *(*m)(size_t,const char *,int), | 152 | CRYPTO_set_mem_ex_functions(void *(*m)(size_t, const char *, int), |
143 | void *(*r)(void *, size_t,const char *,int), | 153 | void *(*r)(void *, size_t, const char *, int), void (*f)(void *)) |
144 | void (*f)(void *)) | 154 | { |
145 | { | ||
146 | if (!allow_customize) | 155 | if (!allow_customize) |
147 | return 0; | 156 | return 0; |
148 | if ((m == 0) || (r == 0) || (f == 0)) | 157 | if ((m == 0) || (r == 0) || (f == 0)) |
149 | return 0; | 158 | return 0; |
150 | malloc_func=0; malloc_ex_func=m; | 159 | malloc_func = 0; |
151 | realloc_func=0; realloc_ex_func=r; | 160 | malloc_ex_func = m; |
152 | free_func=f; | 161 | realloc_func = 0; |
153 | malloc_locked_func=0; malloc_locked_ex_func=m; | 162 | realloc_ex_func = r; |
154 | free_locked_func=f; | 163 | free_func = f; |
164 | malloc_locked_func = 0; | ||
165 | malloc_locked_ex_func = m; | ||
166 | free_locked_func = f; | ||
155 | return 1; | 167 | return 1; |
156 | } | 168 | } |
157 | 169 | ||
158 | int CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *)) | 170 | int |
159 | { | 171 | CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *)) |
172 | { | ||
160 | if (!allow_customize) | 173 | if (!allow_customize) |
161 | return 0; | 174 | return 0; |
162 | if ((m == NULL) || (f == NULL)) | 175 | if ((m == NULL) || (f == NULL)) |
163 | return 0; | 176 | return 0; |
164 | malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex; | 177 | malloc_locked_func = m; |
165 | free_locked_func=f; | 178 | malloc_locked_ex_func = default_malloc_locked_ex; |
179 | free_locked_func = f; | ||
166 | return 1; | 180 | return 1; |
167 | } | 181 | } |
168 | 182 | ||
169 | int CRYPTO_set_locked_mem_ex_functions( | 183 | int CRYPTO_set_locked_mem_ex_functions(void *(*m)(size_t, const char *, int), |
170 | void *(*m)(size_t,const char *,int), | 184 | void (*f)(void *)) |
171 | void (*f)(void *)) | 185 | { |
172 | { | ||
173 | if (!allow_customize) | 186 | if (!allow_customize) |
174 | return 0; | 187 | return 0; |
175 | if ((m == NULL) || (f == NULL)) | 188 | if ((m == NULL) || (f == NULL)) |
176 | return 0; | 189 | return 0; |
177 | malloc_locked_func=0; malloc_locked_ex_func=m; | 190 | malloc_locked_func = 0; |
178 | free_func=f; | 191 | malloc_locked_ex_func = m; |
192 | free_func = f; | ||
179 | return 1; | 193 | return 1; |
180 | } | 194 | } |
181 | 195 | ||
182 | int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), | 196 | int |
183 | void (*r)(void *,void *,int,const char *,int,int), | 197 | CRYPTO_set_mem_debug_functions(void (*m)(void *, int, const char *, int, int), |
184 | void (*f)(void *,int), | 198 | void (*r)(void *, void *, int, const char *, int, int), |
185 | void (*so)(long), | 199 | void (*f)(void *, int), void (*so)(long), long (*go)(void)) |
186 | long (*go)(void)) | 200 | { |
187 | { | ||
188 | if (!allow_customize_debug) | 201 | if (!allow_customize_debug) |
189 | return 0; | 202 | return 0; |
190 | OPENSSL_init(); | 203 | OPENSSL_init(); |
191 | malloc_debug_func=m; | 204 | malloc_debug_func = m; |
192 | realloc_debug_func=r; | 205 | realloc_debug_func = r; |
193 | free_debug_func=f; | 206 | free_debug_func = f; |
194 | set_debug_options_func=so; | 207 | set_debug_options_func = so; |
195 | get_debug_options_func=go; | 208 | get_debug_options_func = go; |
196 | return 1; | 209 | return 1; |
197 | } | 210 | } |
198 | 211 | ||
199 | 212 | ||
200 | void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), | 213 | void |
201 | void (**f)(void *)) | 214 | CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), |
202 | { | 215 | void (**f)(void *)) |
203 | if (m != NULL) *m = (malloc_ex_func == default_malloc_ex) ? | 216 | { |
204 | malloc_func : 0; | 217 | if (m != NULL) |
205 | if (r != NULL) *r = (realloc_ex_func == default_realloc_ex) ? | 218 | *m = (malloc_ex_func == default_malloc_ex) ? malloc_func : 0; |
206 | realloc_func : 0; | 219 | if (r != NULL) |
207 | if (f != NULL) *f=free_func; | 220 | *r = (realloc_ex_func == default_realloc_ex) ? realloc_func : 0; |
208 | } | 221 | if (f != NULL) |
209 | 222 | *f = free_func; | |
210 | void CRYPTO_get_mem_ex_functions( | 223 | } |
211 | void *(**m)(size_t,const char *,int), | 224 | |
212 | void *(**r)(void *, size_t,const char *,int), | 225 | void CRYPTO_get_mem_ex_functions(void *(**m)(size_t, const char *, int), |
213 | void (**f)(void *)) | 226 | void *(**r)(void *, size_t, const char *, int), void (**f)(void *)) |
214 | { | 227 | { |
215 | if (m != NULL) *m = (malloc_ex_func != default_malloc_ex) ? | 228 | if (m != NULL) |
216 | malloc_ex_func : 0; | 229 | *m = (malloc_ex_func != default_malloc_ex) ? malloc_ex_func : 0; |
217 | if (r != NULL) *r = (realloc_ex_func != default_realloc_ex) ? | 230 | if (r != NULL) |
218 | realloc_ex_func : 0; | 231 | *r = (realloc_ex_func != default_realloc_ex) ? |
219 | if (f != NULL) *f=free_func; | 232 | realloc_ex_func : 0; |
220 | } | 233 | if (f != NULL) |
221 | 234 | *f = free_func; | |
222 | void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)) | 235 | } |
223 | { | 236 | |
224 | if (m != NULL) *m = (malloc_locked_ex_func == default_malloc_locked_ex) ? | 237 | void |
225 | malloc_locked_func : 0; | 238 | CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)) |
226 | if (f != NULL) *f=free_locked_func; | 239 | { |
227 | } | 240 | if (m != NULL) |
228 | 241 | *m = (malloc_locked_ex_func == default_malloc_locked_ex) ? | |
229 | void CRYPTO_get_locked_mem_ex_functions( | 242 | malloc_locked_func : 0; |
230 | void *(**m)(size_t,const char *,int), | 243 | if (f != NULL) |
231 | void (**f)(void *)) | 244 | *f = free_locked_func; |
232 | { | 245 | } |
233 | if (m != NULL) *m = (malloc_locked_ex_func != default_malloc_locked_ex) ? | 246 | |
234 | malloc_locked_ex_func : 0; | 247 | void CRYPTO_get_locked_mem_ex_functions(void *(**m)(size_t, const char *, int), |
235 | if (f != NULL) *f=free_locked_func; | 248 | void (**f)(void *)) |
236 | } | 249 | { |
237 | 250 | if (m != NULL) | |
238 | void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), | 251 | *m = (malloc_locked_ex_func != default_malloc_locked_ex) ? |
239 | void (**r)(void *,void *,int,const char *,int,int), | 252 | malloc_locked_ex_func : 0; |
240 | void (**f)(void *,int), | 253 | if (f != NULL) |
241 | void (**so)(long), | 254 | *f = free_locked_func; |
242 | long (**go)(void)) | 255 | } |
243 | { | 256 | |
244 | if (m != NULL) *m=malloc_debug_func; | 257 | void |
245 | if (r != NULL) *r=realloc_debug_func; | 258 | CRYPTO_get_mem_debug_functions(void (**m)(void *, int, const char *, int, int), |
246 | if (f != NULL) *f=free_debug_func; | 259 | void (**r)(void *, void *, int, const char *, int, int), |
247 | if (so != NULL) *so=set_debug_options_func; | 260 | void (**f)(void *, int), void (**so)(long), long (**go)(void)) |
248 | if (go != NULL) *go=get_debug_options_func; | 261 | { |
249 | } | 262 | if (m != NULL) |
250 | 263 | *m = malloc_debug_func; | |
251 | 264 | if (r != NULL) | |
252 | void *CRYPTO_malloc_locked(int num, const char *file, int line) | 265 | *r = realloc_debug_func; |
253 | { | 266 | if (f != NULL) |
267 | *f = free_debug_func; | ||
268 | if (so != NULL) | ||
269 | *so = set_debug_options_func; | ||
270 | if (go != NULL) | ||
271 | *go = get_debug_options_func; | ||
272 | } | ||
273 | |||
274 | |||
275 | void | ||
276 | *CRYPTO_malloc_locked(int num, const char *file, int line) | ||
277 | { | ||
254 | void *ret = NULL; | 278 | void *ret = NULL; |
255 | 279 | ||
256 | if (num <= 0) return NULL; | 280 | if (num <= 0) |
281 | return NULL; | ||
257 | 282 | ||
258 | allow_customize = 0; | 283 | allow_customize = 0; |
259 | if (malloc_debug_func != NULL) | 284 | if (malloc_debug_func != NULL) { |
260 | { | ||
261 | allow_customize_debug = 0; | 285 | allow_customize_debug = 0; |
262 | malloc_debug_func(NULL, num, file, line, 0); | 286 | malloc_debug_func(NULL, num, file, line, 0); |
263 | } | 287 | } |
264 | ret = malloc_locked_ex_func(num,file,line); | 288 | ret = malloc_locked_ex_func(num, file, line); |
265 | #ifdef LEVITTE_DEBUG_MEM | 289 | #ifdef LEVITTE_DEBUG_MEM |
266 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); | 290 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); |
267 | #endif | 291 | #endif |
@@ -272,17 +296,18 @@ void *CRYPTO_malloc_locked(int num, const char *file, int line) | |||
272 | /* Create a dependency on the value of 'cleanse_ctr' so our memory | 296 | /* Create a dependency on the value of 'cleanse_ctr' so our memory |
273 | * sanitisation function can't be optimised out. NB: We only do | 297 | * sanitisation function can't be optimised out. NB: We only do |
274 | * this for >2Kb so the overhead doesn't bother us. */ | 298 | * this for >2Kb so the overhead doesn't bother us. */ |
275 | if(ret && (num > 2048)) | 299 | if (ret && (num > 2048)) { |
276 | { extern unsigned char cleanse_ctr; | 300 | extern unsigned char cleanse_ctr; |
277 | ((unsigned char *)ret)[0] = cleanse_ctr; | 301 | ((unsigned char *)ret)[0] = cleanse_ctr; |
278 | } | 302 | } |
279 | #endif | 303 | #endif |
280 | 304 | ||
281 | return ret; | 305 | return ret; |
282 | } | 306 | } |
283 | 307 | ||
284 | void CRYPTO_free_locked(void *str) | 308 | void |
285 | { | 309 | CRYPTO_free_locked(void *str) |
310 | { | ||
286 | if (free_debug_func != NULL) | 311 | if (free_debug_func != NULL) |
287 | free_debug_func(str, 0); | 312 | free_debug_func(str, 0); |
288 | #ifdef LEVITTE_DEBUG_MEM | 313 | #ifdef LEVITTE_DEBUG_MEM |
@@ -291,21 +316,22 @@ void CRYPTO_free_locked(void *str) | |||
291 | free_locked_func(str); | 316 | free_locked_func(str); |
292 | if (free_debug_func != NULL) | 317 | if (free_debug_func != NULL) |
293 | free_debug_func(NULL, 1); | 318 | free_debug_func(NULL, 1); |
294 | } | 319 | } |
295 | 320 | ||
296 | void *CRYPTO_malloc(int num, const char *file, int line) | 321 | void |
297 | { | 322 | *CRYPTO_malloc(int num, const char *file, int line) |
323 | { | ||
298 | void *ret = NULL; | 324 | void *ret = NULL; |
299 | 325 | ||
300 | if (num <= 0) return NULL; | 326 | if (num <= 0) |
327 | return NULL; | ||
301 | 328 | ||
302 | allow_customize = 0; | 329 | allow_customize = 0; |
303 | if (malloc_debug_func != NULL) | 330 | if (malloc_debug_func != NULL) { |
304 | { | ||
305 | allow_customize_debug = 0; | 331 | allow_customize_debug = 0; |
306 | malloc_debug_func(NULL, num, file, line, 0); | 332 | malloc_debug_func(NULL, num, file, line, 0); |
307 | } | 333 | } |
308 | ret = malloc_ex_func(num,file,line); | 334 | ret = malloc_ex_func(num, file, line); |
309 | #ifdef LEVITTE_DEBUG_MEM | 335 | #ifdef LEVITTE_DEBUG_MEM |
310 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); | 336 | fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); |
311 | #endif | 337 | #endif |
@@ -316,35 +342,39 @@ void *CRYPTO_malloc(int num, const char *file, int line) | |||
316 | /* Create a dependency on the value of 'cleanse_ctr' so our memory | 342 | /* Create a dependency on the value of 'cleanse_ctr' so our memory |
317 | * sanitisation function can't be optimised out. NB: We only do | 343 | * sanitisation function can't be optimised out. NB: We only do |
318 | * this for >2Kb so the overhead doesn't bother us. */ | 344 | * this for >2Kb so the overhead doesn't bother us. */ |
319 | if(ret && (num > 2048)) | 345 | if (ret && (num > 2048)) { |
320 | { extern unsigned char cleanse_ctr; | 346 | extern unsigned char cleanse_ctr; |
321 | ((unsigned char *)ret)[0] = cleanse_ctr; | 347 | ((unsigned char *)ret)[0] = cleanse_ctr; |
322 | } | 348 | } |
323 | #endif | 349 | #endif |
324 | 350 | ||
325 | return ret; | 351 | return ret; |
326 | } | 352 | } |
327 | char *CRYPTO_strdup(const char *str, const char *file, int line) | 353 | |
328 | { | 354 | char |
329 | size_t len = strlen(str)+1; | 355 | *CRYPTO_strdup(const char *str, const char *file, int line) |
356 | { | ||
357 | size_t len = strlen(str) + 1; | ||
330 | char *ret = CRYPTO_malloc(len, file, line); | 358 | char *ret = CRYPTO_malloc(len, file, line); |
331 | 359 | ||
332 | memcpy(ret, str, len); | 360 | memcpy(ret, str, len); |
333 | return ret; | 361 | return ret; |
334 | } | 362 | } |
335 | 363 | ||
336 | void *CRYPTO_realloc(void *str, int num, const char *file, int line) | 364 | void |
337 | { | 365 | *CRYPTO_realloc(void *str, int num, const char *file, int line) |
366 | { | ||
338 | void *ret = NULL; | 367 | void *ret = NULL; |
339 | 368 | ||
340 | if (str == NULL) | 369 | if (str == NULL) |
341 | return CRYPTO_malloc(num, file, line); | 370 | return CRYPTO_malloc(num, file, line); |
342 | 371 | ||
343 | if (num <= 0) return NULL; | 372 | if (num <= 0) |
373 | return NULL; | ||
344 | 374 | ||
345 | if (realloc_debug_func != NULL) | 375 | if (realloc_debug_func != NULL) |
346 | realloc_debug_func(str, NULL, num, file, line, 0); | 376 | realloc_debug_func(str, NULL, num, file, line, 0); |
347 | ret = realloc_ex_func(str,num,file,line); | 377 | ret = realloc_ex_func(str, num, file, line); |
348 | #ifdef LEVITTE_DEBUG_MEM | 378 | #ifdef LEVITTE_DEBUG_MEM |
349 | fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); | 379 | fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); |
350 | #endif | 380 | #endif |
@@ -352,44 +382,47 @@ void *CRYPTO_realloc(void *str, int num, const char *file, int line) | |||
352 | realloc_debug_func(str, ret, num, file, line, 1); | 382 | realloc_debug_func(str, ret, num, file, line, 1); |
353 | 383 | ||
354 | return ret; | 384 | return ret; |
355 | } | 385 | } |
356 | 386 | ||
357 | void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file, | 387 | void |
358 | int line) | 388 | *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file, |
359 | { | 389 | int line) |
390 | { | ||
360 | void *ret = NULL; | 391 | void *ret = NULL; |
361 | 392 | ||
362 | if (str == NULL) | 393 | if (str == NULL) |
363 | return CRYPTO_malloc(num, file, line); | 394 | return CRYPTO_malloc(num, file, line); |
364 | 395 | ||
365 | if (num <= 0) return NULL; | 396 | if (num <= 0) |
397 | return NULL; | ||
366 | 398 | ||
367 | /* We don't support shrinking the buffer. Note the memcpy that copies | 399 | /* We don't support shrinking the buffer. Note the memcpy that copies |
368 | * |old_len| bytes to the new buffer, below. */ | 400 | * |old_len| bytes to the new buffer, below. */ |
369 | if (num < old_len) return NULL; | 401 | if (num < old_len) |
402 | return NULL; | ||
370 | 403 | ||
371 | if (realloc_debug_func != NULL) | 404 | if (realloc_debug_func != NULL) |
372 | realloc_debug_func(str, NULL, num, file, line, 0); | 405 | realloc_debug_func(str, NULL, num, file, line, 0); |
373 | ret=malloc_ex_func(num,file,line); | 406 | ret = malloc_ex_func(num, file, line); |
374 | if(ret) | 407 | if (ret) { |
375 | { | 408 | memcpy(ret, str, old_len); |
376 | memcpy(ret,str,old_len); | 409 | OPENSSL_cleanse(str, old_len); |
377 | OPENSSL_cleanse(str,old_len); | ||
378 | free_func(str); | 410 | free_func(str); |
379 | } | 411 | } |
380 | #ifdef LEVITTE_DEBUG_MEM | 412 | #ifdef LEVITTE_DEBUG_MEM |
381 | fprintf(stderr, | 413 | fprintf(stderr, |
382 | "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", | 414 | "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", |
383 | str, ret, num); | 415 | str, ret, num); |
384 | #endif | 416 | #endif |
385 | if (realloc_debug_func != NULL) | 417 | if (realloc_debug_func != NULL) |
386 | realloc_debug_func(str, ret, num, file, line, 1); | 418 | realloc_debug_func(str, ret, num, file, line, 1); |
387 | 419 | ||
388 | return ret; | 420 | return ret; |
389 | } | 421 | } |
390 | 422 | ||
391 | void CRYPTO_free(void *str) | 423 | void |
392 | { | 424 | CRYPTO_free(void *str) |
425 | { | ||
393 | if (free_debug_func != NULL) | 426 | if (free_debug_func != NULL) |
394 | free_debug_func(str, 0); | 427 | free_debug_func(str, 0); |
395 | #ifdef LEVITTE_DEBUG_MEM | 428 | #ifdef LEVITTE_DEBUG_MEM |
@@ -398,24 +431,28 @@ void CRYPTO_free(void *str) | |||
398 | free_func(str); | 431 | free_func(str); |
399 | if (free_debug_func != NULL) | 432 | if (free_debug_func != NULL) |
400 | free_debug_func(NULL, 1); | 433 | free_debug_func(NULL, 1); |
401 | } | 434 | } |
402 | 435 | ||
403 | void *CRYPTO_remalloc(void *a, int num, const char *file, int line) | 436 | void |
404 | { | 437 | *CRYPTO_remalloc(void *a, int num, const char *file, int line) |
405 | if (a != NULL) OPENSSL_free(a); | 438 | { |
406 | a=(char *)OPENSSL_malloc(num); | 439 | if (a != NULL) |
407 | return(a); | 440 | OPENSSL_free(a); |
408 | } | 441 | a = (char *)OPENSSL_malloc(num); |
409 | 442 | return (a); | |
410 | void CRYPTO_set_mem_debug_options(long bits) | 443 | } |
411 | { | 444 | |
445 | void | ||
446 | CRYPTO_set_mem_debug_options(long bits) | ||
447 | { | ||
412 | if (set_debug_options_func != NULL) | 448 | if (set_debug_options_func != NULL) |
413 | set_debug_options_func(bits); | 449 | set_debug_options_func(bits); |
414 | } | 450 | } |
415 | 451 | ||
416 | long CRYPTO_get_mem_debug_options(void) | 452 | long |
417 | { | 453 | CRYPTO_get_mem_debug_options(void) |
454 | { | ||
418 | if (get_debug_options_func != NULL) | 455 | if (get_debug_options_func != NULL) |
419 | return get_debug_options_func(); | 456 | return get_debug_options_func(); |
420 | return 0; | 457 | return 0; |
421 | } | 458 | } |
diff --git a/src/lib/libssl/src/crypto/mem_clr.c b/src/lib/libssl/src/crypto/mem_clr.c index add1f78020..fc108c83b4 100644 --- a/src/lib/libssl/src/crypto/mem_clr.c +++ b/src/lib/libssl/src/crypto/mem_clr.c | |||
@@ -61,17 +61,17 @@ | |||
61 | 61 | ||
62 | unsigned char cleanse_ctr = 0; | 62 | unsigned char cleanse_ctr = 0; |
63 | 63 | ||
64 | void OPENSSL_cleanse(void *ptr, size_t len) | 64 | void |
65 | { | 65 | OPENSSL_cleanse(void *ptr, size_t len) |
66 | { | ||
66 | unsigned char *p = ptr; | 67 | unsigned char *p = ptr; |
67 | size_t loop = len, ctr = cleanse_ctr; | 68 | size_t loop = len, ctr = cleanse_ctr; |
68 | while(loop--) | 69 | while (loop--) { |
69 | { | ||
70 | *(p++) = (unsigned char)ctr; | 70 | *(p++) = (unsigned char)ctr; |
71 | ctr += (17 + ((size_t)p & 0xF)); | 71 | ctr += (17 + ((size_t)p & 0xF)); |
72 | } | 72 | } |
73 | p=memchr(ptr, (unsigned char)ctr, len); | 73 | p = memchr(ptr, (unsigned char)ctr, len); |
74 | if(p) | 74 | if (p) |
75 | ctr += (63 + (size_t)p); | 75 | ctr += (63 + (size_t)p); |
76 | cleanse_ctr = (unsigned char)ctr; | 76 | cleanse_ctr = (unsigned char)ctr; |
77 | } | 77 | } |
diff --git a/src/lib/libssl/src/crypto/mem_dbg.c b/src/lib/libssl/src/crypto/mem_dbg.c index ac793397f1..9324ec4c7d 100644 --- a/src/lib/libssl/src/crypto/mem_dbg.c +++ b/src/lib/libssl/src/crypto/mem_dbg.c | |||
@@ -118,7 +118,7 @@ | |||
118 | #include <openssl/bio.h> | 118 | #include <openssl/bio.h> |
119 | #include <openssl/lhash.h> | 119 | #include <openssl/lhash.h> |
120 | 120 | ||
121 | static int mh_mode=CRYPTO_MEM_CHECK_OFF; | 121 | static int mh_mode = CRYPTO_MEM_CHECK_OFF; |
122 | /* The state changes to CRYPTO_MEM_CHECK_ON | CRYPTO_MEM_CHECK_ENABLE | 122 | /* The state changes to CRYPTO_MEM_CHECK_ON | CRYPTO_MEM_CHECK_ENABLE |
123 | * when the application asks for it (usually after library initialisation | 123 | * when the application asks for it (usually after library initialisation |
124 | * for which no book-keeping is desired). | 124 | * for which no book-keeping is desired). |
@@ -136,10 +136,9 @@ static int mh_mode=CRYPTO_MEM_CHECK_OFF; | |||
136 | static unsigned long order = 0; /* number of memory requests */ | 136 | static unsigned long order = 0; /* number of memory requests */ |
137 | 137 | ||
138 | DECLARE_LHASH_OF(MEM); | 138 | DECLARE_LHASH_OF(MEM); |
139 | static LHASH_OF(MEM) *mh=NULL; /* hash-table of memory requests | 139 | static LHASH_OF(MEM) *mh = NULL; /* hash - table of memory requests |
140 | * (address as key); access requires | 140 | * (address as key); access requires |
141 | * MALLOC2 lock */ | 141 | * MALLOC2 lock */ |
142 | |||
143 | 142 | ||
144 | typedef struct app_mem_info_st | 143 | typedef struct app_mem_info_st |
145 | /* For application-defined information (static C-string `info') | 144 | /* For application-defined information (static C-string `info') |
@@ -149,28 +148,28 @@ typedef struct app_mem_info_st | |||
149 | * CRYPTO_pop_info() to pop an entry, | 148 | * CRYPTO_pop_info() to pop an entry, |
150 | * CRYPTO_remove_all_info() to pop all entries. | 149 | * CRYPTO_remove_all_info() to pop all entries. |
151 | */ | 150 | */ |
152 | { | 151 | { |
153 | CRYPTO_THREADID threadid; | 152 | CRYPTO_THREADID threadid; |
154 | const char *file; | 153 | const char *file; |
155 | int line; | 154 | int line; |
156 | const char *info; | 155 | const char *info; |
157 | struct app_mem_info_st *next; /* tail of thread's stack */ | 156 | struct app_mem_info_st *next; /* tail of thread's stack */ |
158 | int references; | 157 | int references; |
159 | } APP_INFO; | 158 | } APP_INFO; |
160 | 159 | ||
161 | static void app_info_free(APP_INFO *); | 160 | static void app_info_free(APP_INFO *); |
162 | 161 | ||
163 | DECLARE_LHASH_OF(APP_INFO); | 162 | DECLARE_LHASH_OF(APP_INFO); |
164 | static LHASH_OF(APP_INFO) *amih=NULL; /* hash-table with those | 163 | static LHASH_OF(APP_INFO) *amih = NULL; /* hash - table with those |
165 | * app_mem_info_st's that are at | 164 | * app_mem_info_st's that are at |
166 | * the top of their thread's | 165 | * the top of their thread's |
167 | * stack (with `thread' as key); | 166 | * stack (with `thread' as key); |
168 | * access requires MALLOC2 | 167 | * access requires MALLOC2 |
169 | * lock */ | 168 | * lock */ |
170 | 169 | ||
171 | typedef struct mem_st | 170 | typedef struct mem_st |
172 | /* memory-block description */ | 171 | /* memory-block description */ |
173 | { | 172 | { |
174 | void *addr; | 173 | void *addr; |
175 | int num; | 174 | int num; |
176 | const char *file; | 175 | const char *file; |
@@ -179,47 +178,46 @@ typedef struct mem_st | |||
179 | unsigned long order; | 178 | unsigned long order; |
180 | time_t time; | 179 | time_t time; |
181 | APP_INFO *app_info; | 180 | APP_INFO *app_info; |
182 | } MEM; | 181 | } MEM; |
183 | 182 | ||
184 | static long options = /* extra information to be recorded */ | 183 | static long options = /* extra information to be recorded */ |
185 | #if defined(CRYPTO_MDEBUG_TIME) || defined(CRYPTO_MDEBUG_ALL) | 184 | #if defined(CRYPTO_MDEBUG_TIME) || defined(CRYPTO_MDEBUG_ALL) |
186 | V_CRYPTO_MDEBUG_TIME | | 185 | V_CRYPTO_MDEBUG_TIME | |
187 | #endif | 186 | #endif |
188 | #if defined(CRYPTO_MDEBUG_THREAD) || defined(CRYPTO_MDEBUG_ALL) | 187 | #if defined(CRYPTO_MDEBUG_THREAD) || defined(CRYPTO_MDEBUG_ALL) |
189 | V_CRYPTO_MDEBUG_THREAD | | 188 | V_CRYPTO_MDEBUG_THREAD | |
190 | #endif | 189 | #endif |
191 | 0; | 190 | 0; |
192 | 191 | ||
193 | 192 | ||
194 | static unsigned int num_disable = 0; /* num_disable > 0 | 193 | static unsigned int num_disable = 0; /* num_disable > 0 |
195 | * iff | 194 | * iff |
196 | * mh_mode == CRYPTO_MEM_CHECK_ON (w/o ..._ENABLE) | 195 | * mh_mode == CRYPTO_MEM_CHECK_ON (w/o ..._ENABLE) |
197 | */ | 196 | */ |
198 | 197 | ||
199 | /* Valid iff num_disable > 0. CRYPTO_LOCK_MALLOC2 is locked exactly in this | 198 | /* Valid iff num_disable > 0. CRYPTO_LOCK_MALLOC2 is locked exactly in this |
200 | * case (by the thread named in disabling_thread). | 199 | * case (by the thread named in disabling_thread). |
201 | */ | 200 | */ |
202 | static CRYPTO_THREADID disabling_threadid; | 201 | static CRYPTO_THREADID disabling_threadid; |
203 | 202 | ||
204 | static void app_info_free(APP_INFO *inf) | 203 | static void |
205 | { | 204 | app_info_free(APP_INFO *inf) |
206 | if (--(inf->references) <= 0) | 205 | { |
207 | { | 206 | if (--(inf->references) <= 0) { |
208 | if (inf->next != NULL) | 207 | if (inf->next != NULL) { |
209 | { | ||
210 | app_info_free(inf->next); | 208 | app_info_free(inf->next); |
211 | } | ||
212 | OPENSSL_free(inf); | ||
213 | } | 209 | } |
210 | OPENSSL_free(inf); | ||
214 | } | 211 | } |
212 | } | ||
215 | 213 | ||
216 | int CRYPTO_mem_ctrl(int mode) | 214 | int |
217 | { | 215 | CRYPTO_mem_ctrl(int mode) |
218 | int ret=mh_mode; | 216 | { |
217 | int ret = mh_mode; | ||
219 | 218 | ||
220 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); | 219 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); |
221 | switch (mode) | 220 | switch (mode) { |
222 | { | ||
223 | /* for applications (not to be called while multiple threads | 221 | /* for applications (not to be called while multiple threads |
224 | * use the library): */ | 222 | * use the library): */ |
225 | case CRYPTO_MEM_CHECK_ON: /* aka MemCheck_start() */ | 223 | case CRYPTO_MEM_CHECK_ON: /* aka MemCheck_start() */ |
@@ -232,14 +230,13 @@ int CRYPTO_mem_ctrl(int mode) | |||
232 | or there'll be a lot of confusion */ | 230 | or there'll be a lot of confusion */ |
233 | break; | 231 | break; |
234 | 232 | ||
235 | /* switch off temporarily (for library-internal use): */ | 233 | /* switch off temporarily (for library-internal use): */ |
236 | case CRYPTO_MEM_CHECK_DISABLE: /* aka MemCheck_off() */ | 234 | case CRYPTO_MEM_CHECK_DISABLE: /* aka MemCheck_off() */ |
237 | if (mh_mode & CRYPTO_MEM_CHECK_ON) | 235 | if (mh_mode & CRYPTO_MEM_CHECK_ON) { |
238 | { | ||
239 | CRYPTO_THREADID cur; | 236 | CRYPTO_THREADID cur; |
240 | CRYPTO_THREADID_current(&cur); | 237 | CRYPTO_THREADID_current(&cur); |
241 | if (!num_disable || CRYPTO_THREADID_cmp(&disabling_threadid, &cur)) /* otherwise we already have the MALLOC2 lock */ | 238 | if (!num_disable || CRYPTO_THREADID_cmp(&disabling_threadid, &cur)) /* otherwise we already have the MALLOC2 lock */ |
242 | { | 239 | { |
243 | /* Long-time lock CRYPTO_LOCK_MALLOC2 must not be claimed while | 240 | /* Long-time lock CRYPTO_LOCK_MALLOC2 must not be claimed while |
244 | * we're holding CRYPTO_LOCK_MALLOC, or we'll deadlock if | 241 | * we're holding CRYPTO_LOCK_MALLOC, or we'll deadlock if |
245 | * somebody else holds CRYPTO_LOCK_MALLOC2 (and cannot release | 242 | * somebody else holds CRYPTO_LOCK_MALLOC2 (and cannot release |
@@ -257,412 +254,402 @@ int CRYPTO_mem_ctrl(int mode) | |||
257 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); | 254 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC); |
258 | mh_mode &= ~CRYPTO_MEM_CHECK_ENABLE; | 255 | mh_mode &= ~CRYPTO_MEM_CHECK_ENABLE; |
259 | CRYPTO_THREADID_cpy(&disabling_threadid, &cur); | 256 | CRYPTO_THREADID_cpy(&disabling_threadid, &cur); |
260 | } | ||
261 | num_disable++; | ||
262 | } | 257 | } |
258 | num_disable++; | ||
259 | } | ||
263 | break; | 260 | break; |
264 | case CRYPTO_MEM_CHECK_ENABLE: /* aka MemCheck_on() */ | 261 | case CRYPTO_MEM_CHECK_ENABLE: /* aka MemCheck_on() */ |
265 | if (mh_mode & CRYPTO_MEM_CHECK_ON) | 262 | if (mh_mode & CRYPTO_MEM_CHECK_ON) { |
266 | { | ||
267 | if (num_disable) /* always true, or something is going wrong */ | 263 | if (num_disable) /* always true, or something is going wrong */ |
268 | { | 264 | { |
269 | num_disable--; | 265 | num_disable--; |
270 | if (num_disable == 0) | 266 | if (num_disable == 0) { |
271 | { | ||
272 | mh_mode|=CRYPTO_MEM_CHECK_ENABLE; | 267 | mh_mode|=CRYPTO_MEM_CHECK_ENABLE; |
273 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); | 268 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); |
274 | } | ||
275 | } | 269 | } |
276 | } | 270 | } |
271 | } | ||
277 | break; | 272 | break; |
278 | 273 | ||
279 | default: | 274 | default: |
280 | break; | 275 | break; |
281 | } | ||
282 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); | ||
283 | return(ret); | ||
284 | } | 276 | } |
277 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); | ||
278 | return (ret); | ||
279 | } | ||
285 | 280 | ||
286 | int CRYPTO_is_mem_check_on(void) | 281 | int |
287 | { | 282 | CRYPTO_is_mem_check_on(void) |
283 | { | ||
288 | int ret = 0; | 284 | int ret = 0; |
289 | 285 | ||
290 | if (mh_mode & CRYPTO_MEM_CHECK_ON) | 286 | if (mh_mode & CRYPTO_MEM_CHECK_ON) { |
291 | { | ||
292 | CRYPTO_THREADID cur; | 287 | CRYPTO_THREADID cur; |
293 | CRYPTO_THREADID_current(&cur); | 288 | CRYPTO_THREADID_current(&cur); |
294 | CRYPTO_r_lock(CRYPTO_LOCK_MALLOC); | 289 | CRYPTO_r_lock(CRYPTO_LOCK_MALLOC); |
295 | 290 | ||
296 | ret = (mh_mode & CRYPTO_MEM_CHECK_ENABLE) | 291 | ret = (mh_mode & CRYPTO_MEM_CHECK_ENABLE) || |
297 | || CRYPTO_THREADID_cmp(&disabling_threadid, &cur); | 292 | CRYPTO_THREADID_cmp(&disabling_threadid, &cur); |
298 | 293 | ||
299 | CRYPTO_r_unlock(CRYPTO_LOCK_MALLOC); | 294 | CRYPTO_r_unlock(CRYPTO_LOCK_MALLOC); |
300 | } | 295 | } |
301 | return(ret); | 296 | return (ret); |
302 | } | 297 | } |
303 | 298 | ||
304 | 299 | ||
305 | void CRYPTO_dbg_set_options(long bits) | 300 | void |
306 | { | 301 | CRYPTO_dbg_set_options(long bits) |
302 | { | ||
307 | options = bits; | 303 | options = bits; |
308 | } | 304 | } |
309 | 305 | ||
310 | long CRYPTO_dbg_get_options(void) | 306 | long |
311 | { | 307 | CRYPTO_dbg_get_options(void) |
308 | { | ||
312 | return options; | 309 | return options; |
313 | } | 310 | } |
314 | 311 | ||
315 | static int mem_cmp(const MEM *a, const MEM *b) | 312 | static int |
316 | { | 313 | mem_cmp(const MEM *a, const MEM *b) |
314 | { | ||
317 | #ifdef _WIN64 | 315 | #ifdef _WIN64 |
318 | const char *ap=(const char *)a->addr, | 316 | const char *ap = (const char *)a->addr, |
319 | *bp=(const char *)b->addr; | 317 | *bp = (const char *)b->addr; |
320 | if (ap==bp) return 0; | 318 | if (ap == bp) |
321 | else if (ap>bp) return 1; | 319 | return 0; |
322 | else return -1; | 320 | else if (ap > bp) return 1; |
321 | else return -1; | ||
323 | #else | 322 | #else |
324 | return (const char *)a->addr - (const char *)b->addr; | 323 | return (const char *)a->addr - (const char *)b->addr; |
325 | #endif | 324 | #endif |
326 | } | 325 | } |
326 | |||
327 | static IMPLEMENT_LHASH_COMP_FN(mem, MEM) | 327 | static IMPLEMENT_LHASH_COMP_FN(mem, MEM) |
328 | 328 | ||
329 | static unsigned long mem_hash(const MEM *a) | 329 | static unsigned long |
330 | { | 330 | mem_hash(const MEM *a) |
331 | { | ||
331 | unsigned long ret; | 332 | unsigned long ret; |
332 | 333 | ||
333 | ret=(unsigned long)a->addr; | 334 | ret = (unsigned long)a->addr; |
334 | 335 | ||
335 | ret=ret*17851+(ret>>14)*7+(ret>>4)*251; | 336 | ret = ret * 17851 + (ret >> 14) * 7 + (ret >> 4) * 251; |
336 | return(ret); | 337 | return (ret); |
337 | } | 338 | } |
338 | static IMPLEMENT_LHASH_HASH_FN(mem, MEM) | 339 | |
340 | static | ||
341 | IMPLEMENT_LHASH_HASH_FN(mem, MEM) | ||
339 | 342 | ||
340 | /* static int app_info_cmp(APP_INFO *a, APP_INFO *b) */ | 343 | /* static int app_info_cmp(APP_INFO *a, APP_INFO *b) */ |
341 | static int app_info_cmp(const void *a_void, const void *b_void) | 344 | static int |
342 | { | 345 | app_info_cmp(const void *a_void, const void *b_void) |
346 | { | ||
343 | return CRYPTO_THREADID_cmp(&((const APP_INFO *)a_void)->threadid, | 347 | return CRYPTO_THREADID_cmp(&((const APP_INFO *)a_void)->threadid, |
344 | &((const APP_INFO *)b_void)->threadid); | 348 | &((const APP_INFO *)b_void)->threadid); |
345 | } | 349 | } |
350 | |||
346 | static IMPLEMENT_LHASH_COMP_FN(app_info, APP_INFO) | 351 | static IMPLEMENT_LHASH_COMP_FN(app_info, APP_INFO) |
347 | 352 | ||
348 | static unsigned long app_info_hash(const APP_INFO *a) | 353 | static unsigned long |
349 | { | 354 | app_info_hash(const APP_INFO *a) |
355 | { | ||
350 | unsigned long ret; | 356 | unsigned long ret; |
351 | 357 | ||
352 | ret = CRYPTO_THREADID_hash(&a->threadid); | 358 | ret = CRYPTO_THREADID_hash(&a->threadid); |
353 | /* This is left in as a "who am I to question legacy?" measure */ | 359 | /* This is left in as a "who am I to question legacy?" measure */ |
354 | ret=ret*17851+(ret>>14)*7+(ret>>4)*251; | 360 | ret = ret * 17851 + (ret >> 14) * 7 + (ret >> 4) * 251; |
355 | return(ret); | 361 | return (ret); |
356 | } | 362 | } |
363 | |||
357 | static IMPLEMENT_LHASH_HASH_FN(app_info, APP_INFO) | 364 | static IMPLEMENT_LHASH_HASH_FN(app_info, APP_INFO) |
358 | 365 | ||
359 | static APP_INFO *pop_info(void) | 366 | static APP_INFO |
360 | { | 367 | *pop_info(void) |
368 | { | ||
361 | APP_INFO tmp; | 369 | APP_INFO tmp; |
362 | APP_INFO *ret = NULL; | 370 | APP_INFO *ret = NULL; |
363 | 371 | ||
364 | if (amih != NULL) | 372 | if (amih != NULL) { |
365 | { | ||
366 | CRYPTO_THREADID_current(&tmp.threadid); | 373 | CRYPTO_THREADID_current(&tmp.threadid); |
367 | if ((ret=lh_APP_INFO_delete(amih,&tmp)) != NULL) | 374 | if ((ret = lh_APP_INFO_delete(amih, &tmp)) != NULL) { |
368 | { | 375 | APP_INFO *next = ret->next; |
369 | APP_INFO *next=ret->next; | ||
370 | 376 | ||
371 | if (next != NULL) | 377 | if (next != NULL) { |
372 | { | ||
373 | next->references++; | 378 | next->references++; |
374 | (void)lh_APP_INFO_insert(amih,next); | 379 | (void)lh_APP_INFO_insert(amih, next); |
375 | } | 380 | } |
376 | #ifdef LEVITTE_DEBUG_MEM | 381 | #ifdef LEVITTE_DEBUG_MEM |
377 | if (CRYPTO_THREADID_cmp(&ret->threadid, &tmp.threadid)) | 382 | if (CRYPTO_THREADID_cmp(&ret->threadid, &tmp.threadid)) { |
378 | { | ||
379 | fprintf(stderr, "pop_info(): deleted info has other thread ID (%lu) than the current thread (%lu)!!!!\n", | 383 | fprintf(stderr, "pop_info(): deleted info has other thread ID (%lu) than the current thread (%lu)!!!!\n", |
380 | CRYPTO_THREADID_hash(&ret->threadid), | 384 | CRYPTO_THREADID_hash(&ret->threadid), |
381 | CRYPTO_THREADID_hash(&tmp.threadid)); | 385 | CRYPTO_THREADID_hash(&tmp.threadid)); |
382 | abort(); | 386 | abort(); |
383 | } | 387 | } |
384 | #endif | 388 | #endif |
385 | if (--(ret->references) <= 0) | 389 | if (--(ret->references) <= 0) { |
386 | { | ||
387 | ret->next = NULL; | 390 | ret->next = NULL; |
388 | if (next != NULL) | 391 | if (next != NULL) |
389 | next->references--; | 392 | next->references--; |
390 | OPENSSL_free(ret); | 393 | OPENSSL_free(ret); |
391 | } | ||
392 | } | 394 | } |
393 | } | 395 | } |
394 | return(ret); | ||
395 | } | 396 | } |
397 | return (ret); | ||
398 | } | ||
396 | 399 | ||
397 | int CRYPTO_push_info_(const char *info, const char *file, int line) | 400 | int |
398 | { | 401 | CRYPTO_push_info_(const char *info, const char *file, int line) |
402 | { | ||
399 | APP_INFO *ami, *amim; | 403 | APP_INFO *ami, *amim; |
400 | int ret=0; | 404 | int ret = 0; |
401 | 405 | ||
402 | if (is_MemCheck_on()) | 406 | if (is_MemCheck_on()) { |
403 | { | ||
404 | MemCheck_off(); /* obtain MALLOC2 lock */ | 407 | MemCheck_off(); /* obtain MALLOC2 lock */ |
405 | 408 | ||
406 | if ((ami = (APP_INFO *)OPENSSL_malloc(sizeof(APP_INFO))) == NULL) | 409 | if ((ami = (APP_INFO *)OPENSSL_malloc(sizeof(APP_INFO))) == NULL) { |
407 | { | 410 | ret = 0; |
408 | ret=0; | ||
409 | goto err; | 411 | goto err; |
410 | } | 412 | } |
411 | if (amih == NULL) | 413 | if (amih == NULL) { |
412 | { | 414 | if ((amih = lh_APP_INFO_new()) == NULL) { |
413 | if ((amih=lh_APP_INFO_new()) == NULL) | ||
414 | { | ||
415 | OPENSSL_free(ami); | 415 | OPENSSL_free(ami); |
416 | ret=0; | 416 | ret = 0; |
417 | goto err; | 417 | goto err; |
418 | } | ||
419 | } | 418 | } |
419 | } | ||
420 | 420 | ||
421 | CRYPTO_THREADID_current(&ami->threadid); | 421 | CRYPTO_THREADID_current(&ami->threadid); |
422 | ami->file=file; | 422 | ami->file = file; |
423 | ami->line=line; | 423 | ami->line = line; |
424 | ami->info=info; | 424 | ami->info = info; |
425 | ami->references=1; | 425 | ami->references = 1; |
426 | ami->next=NULL; | 426 | ami->next = NULL; |
427 | 427 | ||
428 | if ((amim=lh_APP_INFO_insert(amih,ami)) != NULL) | 428 | if ((amim = lh_APP_INFO_insert(amih, ami)) != NULL) { |
429 | { | ||
430 | #ifdef LEVITTE_DEBUG_MEM | 429 | #ifdef LEVITTE_DEBUG_MEM |
431 | if (CRYPTO_THREADID_cmp(&ami->threadid, &amim->threadid)) | 430 | if (CRYPTO_THREADID_cmp(&ami->threadid, &amim->threadid)) { |
432 | { | ||
433 | fprintf(stderr, "CRYPTO_push_info(): previous info has other thread ID (%lu) than the current thread (%lu)!!!!\n", | 431 | fprintf(stderr, "CRYPTO_push_info(): previous info has other thread ID (%lu) than the current thread (%lu)!!!!\n", |
434 | CRYPTO_THREADID_hash(&amim->threadid), | 432 | CRYPTO_THREADID_hash(&amim->threadid), |
435 | CRYPTO_THREADID_hash(&ami->threadid)); | 433 | CRYPTO_THREADID_hash(&ami->threadid)); |
436 | abort(); | 434 | abort(); |
437 | } | ||
438 | #endif | ||
439 | ami->next=amim; | ||
440 | } | 435 | } |
441 | err: | 436 | #endif |
442 | MemCheck_on(); /* release MALLOC2 lock */ | 437 | ami->next = amim; |
443 | } | 438 | } |
444 | 439 | err: | |
445 | return(ret); | 440 | MemCheck_on(); /* release MALLOC2 lock */ |
446 | } | 441 | } |
447 | 442 | ||
448 | int CRYPTO_pop_info(void) | 443 | return (ret); |
449 | { | 444 | } |
450 | int ret=0; | 445 | |
446 | int | ||
447 | CRYPTO_pop_info(void) | ||
448 | { | ||
449 | int ret = 0; | ||
451 | 450 | ||
452 | if (is_MemCheck_on()) /* _must_ be true, or something went severely wrong */ | 451 | if (is_MemCheck_on()) /* _must_ be true, or something went severely wrong */ |
453 | { | 452 | { |
454 | MemCheck_off(); /* obtain MALLOC2 lock */ | 453 | MemCheck_off(); /* obtain MALLOC2 lock */ |
455 | 454 | ||
456 | ret=(pop_info() != NULL); | 455 | ret = (pop_info() != NULL); |
457 | 456 | ||
458 | MemCheck_on(); /* release MALLOC2 lock */ | 457 | MemCheck_on(); /* release MALLOC2 lock */ |
459 | } | ||
460 | return(ret); | ||
461 | } | 458 | } |
459 | return (ret); | ||
460 | } | ||
462 | 461 | ||
463 | int CRYPTO_remove_all_info(void) | 462 | int |
464 | { | 463 | CRYPTO_remove_all_info(void) |
465 | int ret=0; | 464 | { |
465 | int ret = 0; | ||
466 | 466 | ||
467 | if (is_MemCheck_on()) /* _must_ be true */ | 467 | if (is_MemCheck_on()) /* _must_ be true */ |
468 | { | 468 | { |
469 | MemCheck_off(); /* obtain MALLOC2 lock */ | 469 | MemCheck_off(); /* obtain MALLOC2 lock */ |
470 | 470 | ||
471 | while(pop_info() != NULL) | 471 | while (pop_info() != NULL) |
472 | ret++; | 472 | ret++; |
473 | 473 | ||
474 | MemCheck_on(); /* release MALLOC2 lock */ | 474 | MemCheck_on(); /* release MALLOC2 lock */ |
475 | } | ||
476 | return(ret); | ||
477 | } | 475 | } |
476 | return (ret); | ||
477 | } | ||
478 | 478 | ||
479 | 479 | ||
480 | static unsigned long break_order_num=0; | 480 | static unsigned long break_order_num = 0; |
481 | void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, | 481 | void |
482 | int before_p) | 482 | CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, |
483 | { | 483 | int before_p) |
484 | MEM *m,*mm; | 484 | { |
485 | APP_INFO tmp,*amim; | 485 | MEM *m, *mm; |
486 | APP_INFO tmp, *amim; | ||
486 | 487 | ||
487 | switch(before_p & 127) | 488 | switch (before_p & 127) { |
488 | { | ||
489 | case 0: | 489 | case 0: |
490 | break; | 490 | break; |
491 | case 1: | 491 | case 1: |
492 | if (addr == NULL) | 492 | if (addr == NULL) |
493 | break; | 493 | break; |
494 | 494 | ||
495 | if (is_MemCheck_on()) | 495 | if (is_MemCheck_on()) { |
496 | { | ||
497 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ | 496 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ |
498 | if ((m=(MEM *)OPENSSL_malloc(sizeof(MEM))) == NULL) | 497 | if ((m = (MEM *)OPENSSL_malloc(sizeof(MEM))) == NULL) { |
499 | { | ||
500 | OPENSSL_free(addr); | 498 | OPENSSL_free(addr); |
501 | MemCheck_on(); /* release MALLOC2 lock | 499 | MemCheck_on(); /* release MALLOC2 lock |
502 | * if num_disabled drops to 0 */ | 500 | * if num_disabled drops to 0 */ |
503 | return; | 501 | return; |
504 | } | 502 | } |
505 | if (mh == NULL) | 503 | if (mh == NULL) { |
506 | { | 504 | if ((mh = lh_MEM_new()) == NULL) { |
507 | if ((mh=lh_MEM_new()) == NULL) | ||
508 | { | ||
509 | OPENSSL_free(addr); | 505 | OPENSSL_free(addr); |
510 | OPENSSL_free(m); | 506 | OPENSSL_free(m); |
511 | addr=NULL; | 507 | addr = NULL; |
512 | goto err; | 508 | goto err; |
513 | } | ||
514 | } | 509 | } |
510 | } | ||
515 | 511 | ||
516 | m->addr=addr; | 512 | m->addr = addr; |
517 | m->file=file; | 513 | m->file = file; |
518 | m->line=line; | 514 | m->line = line; |
519 | m->num=num; | 515 | m->num = num; |
520 | if (options & V_CRYPTO_MDEBUG_THREAD) | 516 | if (options & V_CRYPTO_MDEBUG_THREAD) |
521 | CRYPTO_THREADID_current(&m->threadid); | 517 | CRYPTO_THREADID_current(&m->threadid); |
522 | else | 518 | else |
523 | memset(&m->threadid, 0, sizeof(m->threadid)); | 519 | memset(&m->threadid, 0, sizeof(m->threadid)); |
524 | 520 | ||
525 | if (order == break_order_num) | 521 | if (order == break_order_num) { |
526 | { | ||
527 | /* BREAK HERE */ | 522 | /* BREAK HERE */ |
528 | m->order=order; | 523 | m->order = order; |
529 | } | 524 | } |
530 | m->order=order++; | 525 | m->order = order++; |
531 | #ifdef LEVITTE_DEBUG_MEM | 526 | #ifdef LEVITTE_DEBUG_MEM |
532 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] %c 0x%p (%d)\n", | 527 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] %c 0x%p (%d)\n", |
533 | m->order, | 528 | m->order, |
534 | (before_p & 128) ? '*' : '+', | 529 | (before_p & 128) ? '*' : '+', |
535 | m->addr, m->num); | 530 | m->addr, m->num); |
536 | #endif | 531 | #endif |
537 | if (options & V_CRYPTO_MDEBUG_TIME) | 532 | if (options & V_CRYPTO_MDEBUG_TIME) |
538 | m->time=time(NULL); | 533 | m->time = time(NULL); |
539 | else | 534 | else |
540 | m->time=0; | 535 | m->time = 0; |
541 | 536 | ||
542 | CRYPTO_THREADID_current(&tmp.threadid); | 537 | CRYPTO_THREADID_current(&tmp.threadid); |
543 | m->app_info=NULL; | 538 | m->app_info = NULL; |
544 | if (amih != NULL | 539 | if (amih != NULL && |
545 | && (amim=lh_APP_INFO_retrieve(amih,&tmp)) != NULL) | 540 | (amim = lh_APP_INFO_retrieve(amih, &tmp)) != NULL) { |
546 | { | ||
547 | m->app_info = amim; | 541 | m->app_info = amim; |
548 | amim->references++; | 542 | amim->references++; |
549 | } | 543 | } |
550 | 544 | ||
551 | if ((mm=lh_MEM_insert(mh, m)) != NULL) | 545 | if ((mm = lh_MEM_insert(mh, m)) != NULL) { |
552 | { | ||
553 | /* Not good, but don't sweat it */ | 546 | /* Not good, but don't sweat it */ |
554 | if (mm->app_info != NULL) | 547 | if (mm->app_info != NULL) { |
555 | { | ||
556 | mm->app_info->references--; | 548 | mm->app_info->references--; |
557 | } | ||
558 | OPENSSL_free(mm); | ||
559 | } | 549 | } |
560 | err: | 550 | OPENSSL_free(mm); |
551 | } | ||
552 | err: | ||
561 | MemCheck_on(); /* release MALLOC2 lock | 553 | MemCheck_on(); /* release MALLOC2 lock |
562 | * if num_disabled drops to 0 */ | 554 | * if num_disabled drops to 0 */ |
563 | } | ||
564 | break; | ||
565 | } | 555 | } |
566 | return; | 556 | break; |
567 | } | 557 | } |
558 | return; | ||
559 | } | ||
568 | 560 | ||
569 | void CRYPTO_dbg_free(void *addr, int before_p) | 561 | void |
570 | { | 562 | CRYPTO_dbg_free(void *addr, int before_p) |
571 | MEM m,*mp; | 563 | { |
564 | MEM m, *mp; | ||
572 | 565 | ||
573 | switch(before_p) | 566 | switch (before_p) { |
574 | { | ||
575 | case 0: | 567 | case 0: |
576 | if (addr == NULL) | 568 | if (addr == NULL) |
577 | break; | 569 | break; |
578 | 570 | ||
579 | if (is_MemCheck_on() && (mh != NULL)) | 571 | if (is_MemCheck_on() && (mh != NULL)) { |
580 | { | ||
581 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ | 572 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ |
582 | 573 | ||
583 | m.addr=addr; | 574 | m.addr = addr; |
584 | mp=lh_MEM_delete(mh,&m); | 575 | mp = lh_MEM_delete(mh, &m); |
585 | if (mp != NULL) | 576 | if (mp != NULL) { |
586 | { | ||
587 | #ifdef LEVITTE_DEBUG_MEM | 577 | #ifdef LEVITTE_DEBUG_MEM |
588 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] - 0x%p (%d)\n", | 578 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] - 0x%p (%d)\n", |
589 | mp->order, mp->addr, mp->num); | 579 | mp->order, mp->addr, mp->num); |
590 | #endif | 580 | #endif |
591 | if (mp->app_info != NULL) | 581 | if (mp->app_info != NULL) |
592 | app_info_free(mp->app_info); | 582 | app_info_free(mp->app_info); |
593 | OPENSSL_free(mp); | 583 | OPENSSL_free(mp); |
594 | } | 584 | } |
595 | 585 | ||
596 | MemCheck_on(); /* release MALLOC2 lock | 586 | MemCheck_on(); /* release MALLOC2 lock |
597 | * if num_disabled drops to 0 */ | 587 | * if num_disabled drops to 0 */ |
598 | } | 588 | } |
599 | break; | 589 | break; |
600 | case 1: | 590 | case 1: |
601 | break; | 591 | break; |
602 | } | ||
603 | } | 592 | } |
593 | } | ||
604 | 594 | ||
605 | void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, | 595 | void |
606 | const char *file, int line, int before_p) | 596 | CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, |
607 | { | 597 | const char *file, int line, int before_p) |
608 | MEM m,*mp; | 598 | { |
599 | MEM m, *mp; | ||
609 | 600 | ||
610 | #ifdef LEVITTE_DEBUG_MEM | 601 | #ifdef LEVITTE_DEBUG_MEM |
611 | fprintf(stderr, "LEVITTE_DEBUG_MEM: --> CRYPTO_dbg_malloc(addr1 = %p, addr2 = %p, num = %d, file = \"%s\", line = %d, before_p = %d)\n", | 602 | fprintf(stderr, "LEVITTE_DEBUG_MEM: --> CRYPTO_dbg_malloc(addr1 = %p, addr2 = %p, num = %d, file = \"%s\", line = %d, before_p = %d)\n", |
612 | addr1, addr2, num, file, line, before_p); | 603 | addr1, addr2, num, file, line, before_p); |
613 | #endif | 604 | #endif |
614 | 605 | ||
615 | switch(before_p) | 606 | switch (before_p) { |
616 | { | ||
617 | case 0: | 607 | case 0: |
618 | break; | 608 | break; |
619 | case 1: | 609 | case 1: |
620 | if (addr2 == NULL) | 610 | if (addr2 == NULL) |
621 | break; | 611 | break; |
622 | 612 | ||
623 | if (addr1 == NULL) | 613 | if (addr1 == NULL) { |
624 | { | ||
625 | CRYPTO_dbg_malloc(addr2, num, file, line, 128 | before_p); | 614 | CRYPTO_dbg_malloc(addr2, num, file, line, 128 | before_p); |
626 | break; | 615 | break; |
627 | } | 616 | } |
628 | 617 | ||
629 | if (is_MemCheck_on()) | 618 | if (is_MemCheck_on()) { |
630 | { | ||
631 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ | 619 | MemCheck_off(); /* make sure we hold MALLOC2 lock */ |
632 | 620 | ||
633 | m.addr=addr1; | 621 | m.addr = addr1; |
634 | mp=lh_MEM_delete(mh,&m); | 622 | mp = lh_MEM_delete(mh, &m); |
635 | if (mp != NULL) | 623 | if (mp != NULL) { |
636 | { | ||
637 | #ifdef LEVITTE_DEBUG_MEM | 624 | #ifdef LEVITTE_DEBUG_MEM |
638 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] * 0x%p (%d) -> 0x%p (%d)\n", | 625 | fprintf(stderr, "LEVITTE_DEBUG_MEM: [%5ld] * 0x%p (%d) -> 0x%p (%d)\n", |
639 | mp->order, | 626 | mp->order, |
640 | mp->addr, mp->num, | 627 | mp->addr, mp->num, |
641 | addr2, num); | 628 | addr2, num); |
642 | #endif | 629 | #endif |
643 | mp->addr=addr2; | 630 | mp->addr = addr2; |
644 | mp->num=num; | 631 | mp->num = num; |
645 | (void)lh_MEM_insert(mh,mp); | 632 | (void)lh_MEM_insert(mh, mp); |
646 | } | 633 | } |
647 | 634 | ||
648 | MemCheck_on(); /* release MALLOC2 lock | 635 | MemCheck_on(); /* release MALLOC2 lock |
649 | * if num_disabled drops to 0 */ | 636 | * if num_disabled drops to 0 */ |
650 | } | ||
651 | break; | ||
652 | } | 637 | } |
653 | return; | 638 | break; |
654 | } | 639 | } |
640 | return; | ||
641 | } | ||
655 | 642 | ||
656 | 643 | ||
657 | typedef struct mem_leak_st | 644 | typedef struct mem_leak_st { |
658 | { | ||
659 | BIO *bio; | 645 | BIO *bio; |
660 | int chunks; | 646 | int chunks; |
661 | long bytes; | 647 | long bytes; |
662 | } MEM_LEAK; | 648 | } MEM_LEAK; |
663 | 649 | ||
664 | static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l) | 650 | static void |
665 | { | 651 | print_leak_doall_arg(const MEM *m, MEM_LEAK *l) |
652 | { | ||
666 | char buf[1024]; | 653 | char buf[1024]; |
667 | char *bufp = buf; | 654 | char *bufp = buf; |
668 | APP_INFO *amip; | 655 | APP_INFO *amip; |
@@ -672,89 +659,83 @@ static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l) | |||
672 | 659 | ||
673 | #define BUF_REMAIN (sizeof buf - (size_t)(bufp - buf)) | 660 | #define BUF_REMAIN (sizeof buf - (size_t)(bufp - buf)) |
674 | 661 | ||
675 | if(m->addr == (char *)l->bio) | 662 | if (m->addr == (char *)l->bio) |
676 | return; | 663 | return; |
677 | 664 | ||
678 | if (options & V_CRYPTO_MDEBUG_TIME) | 665 | if (options & V_CRYPTO_MDEBUG_TIME) { |
679 | { | ||
680 | lcl = localtime(&m->time); | 666 | lcl = localtime(&m->time); |
681 | 667 | ||
682 | BIO_snprintf(bufp, BUF_REMAIN, "[%02d:%02d:%02d] ", | 668 | BIO_snprintf(bufp, BUF_REMAIN, "[%02d:%02d:%02d] ", |
683 | lcl->tm_hour,lcl->tm_min,lcl->tm_sec); | 669 | lcl->tm_hour, lcl->tm_min, lcl->tm_sec); |
684 | bufp += strlen(bufp); | 670 | bufp += strlen(bufp); |
685 | } | 671 | } |
686 | 672 | ||
687 | BIO_snprintf(bufp, BUF_REMAIN, "%5lu file=%s, line=%d, ", | 673 | BIO_snprintf(bufp, BUF_REMAIN, "%5lu file=%s, line=%d, ", |
688 | m->order,m->file,m->line); | 674 | m->order, m->file, m->line); |
689 | bufp += strlen(bufp); | 675 | bufp += strlen(bufp); |
690 | 676 | ||
691 | if (options & V_CRYPTO_MDEBUG_THREAD) | 677 | if (options & V_CRYPTO_MDEBUG_THREAD) { |
692 | { | ||
693 | BIO_snprintf(bufp, BUF_REMAIN, "thread=%lu, ", | 678 | BIO_snprintf(bufp, BUF_REMAIN, "thread=%lu, ", |
694 | CRYPTO_THREADID_hash(&m->threadid)); | 679 | CRYPTO_THREADID_hash(&m->threadid)); |
695 | bufp += strlen(bufp); | 680 | bufp += strlen(bufp); |
696 | } | 681 | } |
697 | 682 | ||
698 | BIO_snprintf(bufp, BUF_REMAIN, "number=%d, address=%08lX\n", | 683 | BIO_snprintf(bufp, BUF_REMAIN, "number=%d, address=%08lX\n", |
699 | m->num,(unsigned long)m->addr); | 684 | m->num,(unsigned long)m->addr); |
700 | bufp += strlen(bufp); | 685 | bufp += strlen(bufp); |
701 | 686 | ||
702 | BIO_puts(l->bio,buf); | 687 | BIO_puts(l->bio, buf); |
703 | 688 | ||
704 | l->chunks++; | 689 | l->chunks++; |
705 | l->bytes+=m->num; | 690 | l->bytes += m->num; |
706 | 691 | ||
707 | amip=m->app_info; | 692 | amip = m->app_info; |
708 | ami_cnt=0; | 693 | ami_cnt = 0; |
709 | if (!amip) | 694 | if (!amip) |
710 | return; | 695 | return; |
711 | CRYPTO_THREADID_cpy(&ti, &amip->threadid); | 696 | CRYPTO_THREADID_cpy(&ti, &amip->threadid); |
712 | 697 | ||
713 | do | 698 | do { |
714 | { | ||
715 | int buf_len; | 699 | int buf_len; |
716 | int info_len; | 700 | int info_len; |
717 | 701 | ||
718 | ami_cnt++; | 702 | ami_cnt++; |
719 | memset(buf,'>',ami_cnt); | 703 | memset(buf, '>', ami_cnt); |
720 | BIO_snprintf(buf + ami_cnt, sizeof buf - ami_cnt, | 704 | BIO_snprintf(buf + ami_cnt, sizeof buf - ami_cnt, |
721 | " thread=%lu, file=%s, line=%d, info=\"", | 705 | " thread=%lu, file=%s, line=%d, info=\"", |
722 | CRYPTO_THREADID_hash(&amip->threadid), amip->file, | 706 | CRYPTO_THREADID_hash(&amip->threadid), amip->file, |
723 | amip->line); | 707 | amip->line); |
724 | buf_len=strlen(buf); | 708 | buf_len = strlen(buf); |
725 | info_len=strlen(amip->info); | 709 | info_len = strlen(amip->info); |
726 | if (128 - buf_len - 3 < info_len) | 710 | if (128 - buf_len - 3 < info_len) { |
727 | { | ||
728 | memcpy(buf + buf_len, amip->info, 128 - buf_len - 3); | 711 | memcpy(buf + buf_len, amip->info, 128 - buf_len - 3); |
729 | buf_len = 128 - 3; | 712 | buf_len = 128 - 3; |
730 | } | 713 | } else { |
731 | else | ||
732 | { | ||
733 | BUF_strlcpy(buf + buf_len, amip->info, | 714 | BUF_strlcpy(buf + buf_len, amip->info, |
734 | sizeof buf - buf_len); | 715 | sizeof buf - buf_len); |
735 | buf_len = strlen(buf); | 716 | buf_len = strlen(buf); |
736 | } | 717 | } |
737 | BIO_snprintf(buf + buf_len, sizeof buf - buf_len, "\"\n"); | 718 | BIO_snprintf(buf + buf_len, sizeof buf - buf_len, "\"\n"); |
738 | 719 | ||
739 | BIO_puts(l->bio,buf); | 720 | BIO_puts(l->bio, buf); |
740 | 721 | ||
741 | amip = amip->next; | 722 | amip = amip->next; |
742 | } | 723 | } while (amip && !CRYPTO_THREADID_cmp(&amip->threadid, &ti)); |
743 | while(amip && !CRYPTO_THREADID_cmp(&amip->threadid, &ti)); | ||
744 | 724 | ||
745 | #ifdef LEVITTE_DEBUG_MEM | 725 | #ifdef LEVITTE_DEBUG_MEM |
746 | if (amip) | 726 | if (amip) { |
747 | { | ||
748 | fprintf(stderr, "Thread switch detected in backtrace!!!!\n"); | 727 | fprintf(stderr, "Thread switch detected in backtrace!!!!\n"); |
749 | abort(); | 728 | abort(); |
750 | } | ||
751 | #endif | ||
752 | } | 729 | } |
730 | #endif | ||
731 | } | ||
753 | 732 | ||
754 | static IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, const MEM, MEM_LEAK) | 733 | static |
734 | IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, const MEM, MEM_LEAK) | ||
755 | 735 | ||
756 | void CRYPTO_mem_leaks(BIO *b) | 736 | void |
757 | { | 737 | CRYPTO_mem_leaks(BIO *b) |
738 | { | ||
758 | MEM_LEAK ml; | 739 | MEM_LEAK ml; |
759 | 740 | ||
760 | if (mh == NULL && amih == NULL) | 741 | if (mh == NULL && amih == NULL) |
@@ -762,22 +743,19 @@ void CRYPTO_mem_leaks(BIO *b) | |||
762 | 743 | ||
763 | MemCheck_off(); /* obtain MALLOC2 lock */ | 744 | MemCheck_off(); /* obtain MALLOC2 lock */ |
764 | 745 | ||
765 | ml.bio=b; | 746 | ml.bio = b; |
766 | ml.bytes=0; | 747 | ml.bytes = 0; |
767 | ml.chunks=0; | 748 | ml.chunks = 0; |
768 | if (mh != NULL) | 749 | if (mh != NULL) |
769 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak), MEM_LEAK, | 750 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak), |
770 | &ml); | 751 | MEM_LEAK, &ml); |
771 | if (ml.chunks != 0) | 752 | if (ml.chunks != 0) { |
772 | { | 753 | BIO_printf(b, "%ld bytes leaked in %d chunks\n", |
773 | BIO_printf(b,"%ld bytes leaked in %d chunks\n", | 754 | ml.bytes, ml.chunks); |
774 | ml.bytes,ml.chunks); | ||
775 | #ifdef CRYPTO_MDEBUG_ABORT | 755 | #ifdef CRYPTO_MDEBUG_ABORT |
776 | abort(); | 756 | abort(); |
777 | #endif | 757 | #endif |
778 | } | 758 | } else { |
779 | else | ||
780 | { | ||
781 | /* Make sure that, if we found no leaks, memory-leak debugging itself | 759 | /* Make sure that, if we found no leaks, memory-leak debugging itself |
782 | * does not introduce memory leaks (which might irritate | 760 | * does not introduce memory leaks (which might irritate |
783 | * external debugging tools). | 761 | * external debugging tools). |
@@ -802,43 +780,43 @@ void CRYPTO_mem_leaks(BIO *b) | |||
802 | old_mh_mode = mh_mode; | 780 | old_mh_mode = mh_mode; |
803 | mh_mode = CRYPTO_MEM_CHECK_OFF; | 781 | mh_mode = CRYPTO_MEM_CHECK_OFF; |
804 | 782 | ||
805 | if (mh != NULL) | 783 | if (mh != NULL) { |
806 | { | ||
807 | lh_MEM_free(mh); | 784 | lh_MEM_free(mh); |
808 | mh = NULL; | 785 | mh = NULL; |
809 | } | 786 | } |
810 | if (amih != NULL) | 787 | if (amih != NULL) { |
811 | { | 788 | if (lh_APP_INFO_num_items(amih) == 0) { |
812 | if (lh_APP_INFO_num_items(amih) == 0) | ||
813 | { | ||
814 | lh_APP_INFO_free(amih); | 789 | lh_APP_INFO_free(amih); |
815 | amih = NULL; | 790 | amih = NULL; |
816 | } | ||
817 | } | 791 | } |
792 | } | ||
818 | 793 | ||
819 | mh_mode = old_mh_mode; | 794 | mh_mode = old_mh_mode; |
820 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); | 795 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); |
821 | } | ||
822 | MemCheck_on(); /* release MALLOC2 lock */ | ||
823 | } | 796 | } |
797 | MemCheck_on(); /* release MALLOC2 lock */ | ||
798 | } | ||
824 | 799 | ||
825 | #ifndef OPENSSL_NO_FP_API | 800 | #ifndef OPENSSL_NO_FP_API |
826 | void CRYPTO_mem_leaks_fp(FILE *fp) | 801 | void |
827 | { | 802 | CRYPTO_mem_leaks_fp(FILE *fp) |
803 | { | ||
828 | BIO *b; | 804 | BIO *b; |
829 | 805 | ||
830 | if (mh == NULL) return; | 806 | if (mh == NULL) |
807 | return; | ||
831 | /* Need to turn off memory checking when allocated BIOs ... especially | 808 | /* Need to turn off memory checking when allocated BIOs ... especially |
832 | * as we're creating them at a time when we're trying to check we've not | 809 | * as we're creating them at a time when we're trying to check we've not |
833 | * left anything un-free()'d!! */ | 810 | * left anything un-free()'d!! */ |
834 | MemCheck_off(); | 811 | MemCheck_off(); |
835 | b = BIO_new(BIO_s_file()); | 812 | b = BIO_new(BIO_s_file()); |
836 | MemCheck_on(); | 813 | MemCheck_on(); |
837 | if(!b) return; | 814 | if (!b) |
838 | BIO_set_fp(b,fp,BIO_NOCLOSE); | 815 | return; |
816 | BIO_set_fp(b, fp, BIO_NOCLOSE); | ||
839 | CRYPTO_mem_leaks(b); | 817 | CRYPTO_mem_leaks(b); |
840 | BIO_free(b); | 818 | BIO_free(b); |
841 | } | 819 | } |
842 | #endif | 820 | #endif |
843 | 821 | ||
844 | 822 | ||
@@ -857,18 +835,21 @@ void CRYPTO_mem_leaks_fp(FILE *fp) | |||
857 | 835 | ||
858 | typedef CRYPTO_MEM_LEAK_CB *PCRYPTO_MEM_LEAK_CB; | 836 | typedef CRYPTO_MEM_LEAK_CB *PCRYPTO_MEM_LEAK_CB; |
859 | 837 | ||
860 | static void cb_leak_doall_arg(const MEM *m, PCRYPTO_MEM_LEAK_CB *cb) | 838 | static void |
861 | { | 839 | cb_leak_doall_arg(const MEM *m, PCRYPTO_MEM_LEAK_CB *cb) |
862 | (*cb)(m->order,m->file,m->line,m->num,m->addr); | 840 | { |
863 | } | 841 | (*cb)(m->order, m->file, m->line, m->num, m->addr); |
842 | } | ||
864 | 843 | ||
865 | static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, const MEM, PCRYPTO_MEM_LEAK_CB) | 844 | static IMPLEMENT_LHASH_DOALL_ARG_FN(cb_leak, const MEM, PCRYPTO_MEM_LEAK_CB) |
866 | 845 | ||
867 | void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb) | 846 | void |
868 | { | 847 | CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb) |
869 | if (mh == NULL) return; | 848 | { |
849 | if (mh == NULL) | ||
850 | return; | ||
870 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); | 851 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); |
871 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(cb_leak), PCRYPTO_MEM_LEAK_CB, | 852 | lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(cb_leak), PCRYPTO_MEM_LEAK_CB, |
872 | &cb); | 853 | &cb); |
873 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); | 854 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); |
874 | } | 855 | } |
diff --git a/src/lib/libssl/src/crypto/o_dir_test.c b/src/lib/libssl/src/crypto/o_dir_test.c index 238717c110..2973458a94 100644 --- a/src/lib/libssl/src/crypto/o_dir_test.c +++ b/src/lib/libssl/src/crypto/o_dir_test.c | |||
@@ -43,26 +43,24 @@ | |||
43 | #error "No supported platform defined!" | 43 | #error "No supported platform defined!" |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | int main() | 46 | int |
47 | main() | ||
47 | { | 48 | { |
48 | OPENSSL_DIR_CTX *ctx = NULL; | 49 | OPENSSL_DIR_CTX *ctx = NULL; |
49 | const char *result; | 50 | const char *result; |
50 | 51 | ||
51 | while((result = OPENSSL_DIR_read(&ctx, CURRDIR)) != NULL) | 52 | while ((result = OPENSSL_DIR_read(&ctx, CURRDIR)) != NULL) { |
52 | { | 53 | printf("%s\n", result); |
53 | printf("%s\n", result); | 54 | } |
54 | } | ||
55 | 55 | ||
56 | if (errno) | 56 | if (errno) { |
57 | { | 57 | perror("test_dir"); |
58 | perror("test_dir"); | 58 | exit(1); |
59 | exit(1); | 59 | } |
60 | } | ||
61 | 60 | ||
62 | if (!OPENSSL_DIR_end(&ctx)) | 61 | if (!OPENSSL_DIR_end(&ctx)) { |
63 | { | 62 | perror("test_dir"); |
64 | perror("test_dir"); | 63 | exit(2); |
65 | exit(2); | 64 | } |
66 | } | 65 | exit(0); |
67 | exit(0); | ||
68 | } | 66 | } |
diff --git a/src/lib/libssl/src/crypto/o_fips.c b/src/lib/libssl/src/crypto/o_fips.c index f6d1b21855..9c185cfb18 100644 --- a/src/lib/libssl/src/crypto/o_fips.c +++ b/src/lib/libssl/src/crypto/o_fips.c | |||
@@ -62,18 +62,20 @@ | |||
62 | #include <openssl/rand.h> | 62 | #include <openssl/rand.h> |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | int FIPS_mode(void) | 65 | int |
66 | { | 66 | FIPS_mode(void) |
67 | { | ||
67 | OPENSSL_init(); | 68 | OPENSSL_init(); |
68 | #ifdef OPENSSL_FIPS | 69 | #ifdef OPENSSL_FIPS |
69 | return FIPS_module_mode(); | 70 | return FIPS_module_mode(); |
70 | #else | 71 | #else |
71 | return 0; | 72 | return 0; |
72 | #endif | 73 | #endif |
73 | } | 74 | } |
74 | 75 | ||
75 | int FIPS_mode_set(int r) | 76 | int |
76 | { | 77 | FIPS_mode_set(int r) |
78 | { | ||
77 | OPENSSL_init(); | 79 | OPENSSL_init(); |
78 | #ifdef OPENSSL_FIPS | 80 | #ifdef OPENSSL_FIPS |
79 | #ifndef FIPS_AUTH_USER_PASS | 81 | #ifndef FIPS_AUTH_USER_PASS |
@@ -92,5 +94,4 @@ int FIPS_mode_set(int r) | |||
92 | CRYPTOerr(CRYPTO_F_FIPS_MODE_SET, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED); | 94 | CRYPTOerr(CRYPTO_F_FIPS_MODE_SET, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED); |
93 | return 0; | 95 | return 0; |
94 | #endif | 96 | #endif |
95 | } | 97 | } |
96 | |||
diff --git a/src/lib/libssl/src/crypto/o_init.c b/src/lib/libssl/src/crypto/o_init.c index db4cdc443b..07c8e0d694 100644 --- a/src/lib/libssl/src/crypto/o_init.c +++ b/src/lib/libssl/src/crypto/o_init.c | |||
@@ -63,8 +63,9 @@ | |||
63 | * Currently only sets FIPS callbacks | 63 | * Currently only sets FIPS callbacks |
64 | */ | 64 | */ |
65 | 65 | ||
66 | void OPENSSL_init(void) | 66 | void |
67 | { | 67 | OPENSSL_init(void) |
68 | { | ||
68 | static int done = 0; | 69 | static int done = 0; |
69 | if (done) | 70 | if (done) |
70 | return; | 71 | return; |
@@ -78,5 +79,4 @@ void OPENSSL_init(void) | |||
78 | #if 0 | 79 | #if 0 |
79 | fprintf(stderr, "Called OPENSSL_init\n"); | 80 | fprintf(stderr, "Called OPENSSL_init\n"); |
80 | #endif | 81 | #endif |
81 | } | 82 | } |
82 | |||
diff --git a/src/lib/libssl/src/crypto/o_str.c b/src/lib/libssl/src/crypto/o_str.c index 56104a6c34..c3ab1f8093 100644 --- a/src/lib/libssl/src/crypto/o_str.c +++ b/src/lib/libssl/src/crypto/o_str.c | |||
@@ -66,17 +66,18 @@ | |||
66 | # include <strings.h> | 66 | # include <strings.h> |
67 | #endif | 67 | #endif |
68 | 68 | ||
69 | int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n) | 69 | int |
70 | { | 70 | OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n) |
71 | { | ||
71 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) | 72 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) |
72 | while (*str1 && *str2 && n) | 73 | while (*str1 && *str2 && n) { |
73 | { | ||
74 | int res = toupper(*str1) - toupper(*str2); | 74 | int res = toupper(*str1) - toupper(*str2); |
75 | if (res) return res < 0 ? -1 : 1; | 75 | if (res) |
76 | return res < 0 ? -1 : 1; | ||
76 | str1++; | 77 | str1++; |
77 | str2++; | 78 | str2++; |
78 | n--; | 79 | n--; |
79 | } | 80 | } |
80 | if (n == 0) | 81 | if (n == 0) |
81 | return 0; | 82 | return 0; |
82 | if (*str1) | 83 | if (*str1) |
@@ -90,22 +91,25 @@ int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n) | |||
90 | * defined as well. */ | 91 | * defined as well. */ |
91 | return strncasecmp(str1, str2, n); | 92 | return strncasecmp(str1, str2, n); |
92 | #endif | 93 | #endif |
93 | } | 94 | } |
94 | int OPENSSL_strcasecmp(const char *str1, const char *str2) | 95 | |
95 | { | 96 | int |
97 | OPENSSL_strcasecmp(const char *str1, const char *str2) | ||
98 | { | ||
96 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) | 99 | #if defined(OPENSSL_IMPLEMENTS_strncasecmp) |
97 | return OPENSSL_strncasecmp(str1, str2, (size_t)-1); | 100 | return OPENSSL_strncasecmp(str1, str2, (size_t) - 1); |
98 | #else | 101 | #else |
99 | return strcasecmp(str1, str2); | 102 | return strcasecmp(str1, str2); |
100 | #endif | 103 | #endif |
101 | } | 104 | } |
102 | 105 | ||
103 | int OPENSSL_memcmp(const void *v1,const void *v2,size_t n) | 106 | int |
104 | { | 107 | OPENSSL_memcmp(const void *v1, const void *v2, size_t n) |
105 | const unsigned char *c1=v1,*c2=v2; | 108 | { |
106 | int ret=0; | 109 | const unsigned char *c1 = v1, *c2 = v2; |
110 | int ret = 0; | ||
107 | 111 | ||
108 | while(n && (ret=*c1-*c2)==0) n--,c1++,c2++; | 112 | while (n && (ret = *c1 - *c2) == 0) n--, c1++, c2++; |
109 | 113 | ||
110 | return ret; | 114 | return ret; |
111 | } | 115 | } |
diff --git a/src/lib/libssl/src/crypto/o_str.h b/src/lib/libssl/src/crypto/o_str.h index dfc98494c6..e2a3fde299 100644 --- a/src/lib/libssl/src/crypto/o_str.h +++ b/src/lib/libssl/src/crypto/o_str.h | |||
@@ -63,6 +63,6 @@ | |||
63 | 63 | ||
64 | int OPENSSL_strcasecmp(const char *str1, const char *str2); | 64 | int OPENSSL_strcasecmp(const char *str1, const char *str2); |
65 | int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n); | 65 | int OPENSSL_strncasecmp(const char *str1, const char *str2, size_t n); |
66 | int OPENSSL_memcmp(const void *p1,const void *p2,size_t n); | 66 | int OPENSSL_memcmp(const void *p1, const void *p2, size_t n); |
67 | 67 | ||
68 | #endif | 68 | #endif |
diff --git a/src/lib/libssl/src/crypto/o_time.c b/src/lib/libssl/src/crypto/o_time.c index 5fb5d4e6d7..44f7ba3b8c 100644 --- a/src/lib/libssl/src/crypto/o_time.c +++ b/src/lib/libssl/src/crypto/o_time.c | |||
@@ -63,14 +63,14 @@ | |||
63 | #include <string.h> | 63 | #include <string.h> |
64 | #include "o_time.h" | 64 | #include "o_time.h" |
65 | 65 | ||
66 | struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | 66 | struct tm |
67 | { | 67 | *OPENSSL_gmtime(const time_t *timer, struct tm *result) { |
68 | struct tm *ts = NULL; | 68 | struct tm *ts = NULL; |
69 | 69 | ||
70 | #if defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_OS2) && (!defined(OPENSSL_SYS_VMS) || defined(gmtime_r)) && !defined(OPENSSL_SYS_MACOSX) && !defined(OPENSSL_SYS_SUNOS) | 70 | #if defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_SYS_OS2) && (!defined(OPENSSL_SYS_VMS) || defined(gmtime_r)) && !defined(OPENSSL_SYS_MACOSX) && !defined(OPENSSL_SYS_SUNOS) |
71 | /* should return &data, but doesn't on some systems, | 71 | /* should return &data, but doesn't on some systems, |
72 | so we don't even look at the return value */ | 72 | so we don't even look at the return value */ |
73 | gmtime_r(timer,result); | 73 | gmtime_r(timer, result); |
74 | ts = result; | 74 | ts = result; |
75 | #else | 75 | #else |
76 | ts = gmtime(timer); | 76 | ts = gmtime(timer); |
@@ -81,7 +81,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | |||
81 | ts = result; | 81 | ts = result; |
82 | #endif | 82 | #endif |
83 | return ts; | 83 | return ts; |
84 | } | 84 | } |
85 | 85 | ||
86 | /* Take a tm structure and add an offset to it. This avoids any OS issues | 86 | /* Take a tm structure and add an offset to it. This avoids any OS issues |
87 | * with restricted date types and overflows which cause the year 2038 | 87 | * with restricted date types and overflows which cause the year 2038 |
@@ -93,29 +93,27 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result) | |||
93 | static long date_to_julian(int y, int m, int d); | 93 | static long date_to_julian(int y, int m, int d); |
94 | static void julian_to_date(long jd, int *y, int *m, int *d); | 94 | static void julian_to_date(long jd, int *y, int *m, int *d); |
95 | 95 | ||
96 | int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec) | 96 | int |
97 | { | 97 | OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec) |
98 | { | ||
98 | int offset_hms, offset_day; | 99 | int offset_hms, offset_day; |
99 | long time_jd; | 100 | long time_jd; |
100 | int time_year, time_month, time_day; | 101 | int time_year, time_month, time_day; |
101 | /* split offset into days and day seconds */ | 102 | /* split offset into days and day seconds */ |
102 | offset_day = offset_sec / SECS_PER_DAY; | 103 | offset_day = offset_sec / SECS_PER_DAY; |
103 | /* Avoid sign issues with % operator */ | 104 | /* Avoid sign issues with % operator */ |
104 | offset_hms = offset_sec - (offset_day * SECS_PER_DAY); | 105 | offset_hms = offset_sec - (offset_day * SECS_PER_DAY); |
105 | offset_day += off_day; | 106 | offset_day += off_day; |
106 | /* Add current time seconds to offset */ | 107 | /* Add current time seconds to offset */ |
107 | offset_hms += tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; | 108 | offset_hms += tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; |
108 | /* Adjust day seconds if overflow */ | 109 | /* Adjust day seconds if overflow */ |
109 | if (offset_hms >= SECS_PER_DAY) | 110 | if (offset_hms >= SECS_PER_DAY) { |
110 | { | ||
111 | offset_day++; | 111 | offset_day++; |
112 | offset_hms -= SECS_PER_DAY; | 112 | offset_hms -= SECS_PER_DAY; |
113 | } | 113 | } else if (offset_hms < 0) { |
114 | else if (offset_hms < 0) | ||
115 | { | ||
116 | offset_day--; | 114 | offset_day--; |
117 | offset_hms += SECS_PER_DAY; | 115 | offset_hms += SECS_PER_DAY; |
118 | } | 116 | } |
119 | 117 | ||
120 | /* Convert date of time structure into a Julian day number. | 118 | /* Convert date of time structure into a Julian day number. |
121 | */ | 119 | */ |
@@ -150,22 +148,24 @@ int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec) | |||
150 | tm->tm_sec = offset_hms % 60; | 148 | tm->tm_sec = offset_hms % 60; |
151 | 149 | ||
152 | return 1; | 150 | return 1; |
153 | 151 | ||
154 | } | 152 | } |
155 | 153 | ||
156 | /* Convert date to and from julian day | 154 | /* Convert date to and from julian day |
157 | * Uses Fliegel & Van Flandern algorithm | 155 | * Uses Fliegel & Van Flandern algorithm |
158 | */ | 156 | */ |
159 | static long date_to_julian(int y, int m, int d) | 157 | static long |
158 | date_to_julian(int y, int m, int d) | ||
160 | { | 159 | { |
161 | return (1461 * (y + 4800 + (m - 14) / 12)) / 4 + | 160 | return (1461 * (y + 4800 + (m - 14) / 12)) / 4 + |
162 | (367 * (m - 2 - 12 * ((m - 14) / 12))) / 12 - | 161 | (367 * (m - 2 - 12 * ((m - 14) / 12))) / 12 - |
163 | (3 * ((y + 4900 + (m - 14) / 12) / 100)) / 4 + | 162 | (3 * ((y + 4900 + (m - 14) / 12) / 100)) / 4 + |
164 | d - 32075; | 163 | d - 32075; |
165 | } | 164 | } |
166 | 165 | ||
167 | static void julian_to_date(long jd, int *y, int *m, int *d) | 166 | static void |
168 | { | 167 | julian_to_date(long jd, int *y, int *m, int *d) |
168 | { | ||
169 | long L = jd + 68569; | 169 | long L = jd + 68569; |
170 | long n = (4 * L) / 146097; | 170 | long n = (4 * L) / 146097; |
171 | long i, j; | 171 | long i, j; |
@@ -178,7 +178,7 @@ static void julian_to_date(long jd, int *y, int *m, int *d) | |||
178 | L = j / 11; | 178 | L = j / 11; |
179 | *m = j + 2 - (12 * L); | 179 | *m = j + 2 - (12 * L); |
180 | *y = 100 * (n - 49) + i + L; | 180 | *y = 100 * (n - 49) + i + L; |
181 | } | 181 | } |
182 | 182 | ||
183 | #ifdef OPENSSL_TIME_TEST | 183 | #ifdef OPENSSL_TIME_TEST |
184 | 184 | ||
@@ -189,20 +189,21 @@ static void julian_to_date(long jd, int *y, int *m, int *d) | |||
189 | * trigger the very errors the routines fix. | 189 | * trigger the very errors the routines fix. |
190 | */ | 190 | */ |
191 | 191 | ||
192 | int main(int argc, char **argv) | 192 | int |
193 | { | 193 | main(int argc, char **argv) |
194 | { | ||
194 | long offset; | 195 | long offset; |
195 | for (offset = 0; offset < 1000000; offset++) | 196 | for (offset = 0; offset < 1000000; offset++) { |
196 | { | ||
197 | check_time(offset); | 197 | check_time(offset); |
198 | check_time(-offset); | 198 | check_time(-offset); |
199 | check_time(offset * 1000); | 199 | check_time(offset * 1000); |
200 | check_time(-offset * 1000); | 200 | check_time(-offset * 1000); |
201 | } | ||
202 | } | 201 | } |
202 | } | ||
203 | 203 | ||
204 | int check_time(long offset) | 204 | int |
205 | { | 205 | check_time(long offset) |
206 | { | ||
206 | struct tm tm1, tm2; | 207 | struct tm tm1, tm2; |
207 | time_t t1, t2; | 208 | time_t t1, t2; |
208 | time(&t1); | 209 | time(&t1); |
@@ -211,20 +212,20 @@ int check_time(long offset) | |||
211 | OPENSSL_gmtime(&t1, &tm1); | 212 | OPENSSL_gmtime(&t1, &tm1); |
212 | OPENSSL_gmtime_adj(&tm1, 0, offset); | 213 | OPENSSL_gmtime_adj(&tm1, 0, offset); |
213 | if ((tm1.tm_year == tm2.tm_year) && | 214 | if ((tm1.tm_year == tm2.tm_year) && |
214 | (tm1.tm_mon == tm2.tm_mon) && | 215 | (tm1.tm_mon == tm2.tm_mon) && |
215 | (tm1.tm_mday == tm2.tm_mday) && | 216 | (tm1.tm_mday == tm2.tm_mday) && |
216 | (tm1.tm_hour == tm2.tm_hour) && | 217 | (tm1.tm_hour == tm2.tm_hour) && |
217 | (tm1.tm_min == tm2.tm_min) && | 218 | (tm1.tm_min == tm2.tm_min) && |
218 | (tm1.tm_sec == tm2.tm_sec)) | 219 | (tm1.tm_sec == tm2.tm_sec)) |
219 | return 1; | 220 | return 1; |
220 | fprintf(stderr, "TIME ERROR!!\n"); | 221 | fprintf(stderr, "TIME ERROR!!\n"); |
221 | fprintf(stderr, "Time1: %d/%d/%d, %d:%02d:%02d\n", | 222 | fprintf(stderr, "Time1: %d/%d/%d, %d:%02d:%02d\n", |
222 | tm2.tm_mday, tm2.tm_mon + 1, tm2.tm_year + 1900, | 223 | tm2.tm_mday, tm2.tm_mon + 1, tm2.tm_year + 1900, |
223 | tm2.tm_hour, tm2.tm_min, tm2.tm_sec); | 224 | tm2.tm_hour, tm2.tm_min, tm2.tm_sec); |
224 | fprintf(stderr, "Time2: %d/%d/%d, %d:%02d:%02d\n", | 225 | fprintf(stderr, "Time2: %d/%d/%d, %d:%02d:%02d\n", |
225 | tm1.tm_mday, tm1.tm_mon + 1, tm1.tm_year + 1900, | 226 | tm1.tm_mday, tm1.tm_mon + 1, tm1.tm_year + 1900, |
226 | tm1.tm_hour, tm1.tm_min, tm1.tm_sec); | 227 | tm1.tm_hour, tm1.tm_min, tm1.tm_sec); |
227 | return 0; | 228 | return 0; |
228 | } | 229 | } |
229 | 230 | ||
230 | #endif | 231 | #endif |
diff --git a/src/lib/libssl/src/crypto/ossl_typ.h b/src/lib/libssl/src/crypto/ossl_typ.h index ea9227f6f9..ae79bf8ae4 100644 --- a/src/lib/libssl/src/crypto/ossl_typ.h +++ b/src/lib/libssl/src/crypto/ossl_typ.h | |||
@@ -182,18 +182,18 @@ typedef struct DIST_POINT_st DIST_POINT; | |||
182 | typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; | 182 | typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; |
183 | typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; | 183 | typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; |
184 | 184 | ||
185 | /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ | 185 | /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ |
186 | #define DECLARE_PKCS12_STACK_OF(type) /* Nothing */ | 186 | #define DECLARE_PKCS12_STACK_OF(type) /* Nothing */ |
187 | #define IMPLEMENT_PKCS12_STACK_OF(type) /* Nothing */ | 187 | #define IMPLEMENT_PKCS12_STACK_OF(type) /* Nothing */ |
188 | 188 | ||
189 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; | 189 | typedef struct crypto_ex_data_st CRYPTO_EX_DATA; |
190 | /* Callback types for crypto.h */ | 190 | /* Callback types for crypto.h */ |
191 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 191 | typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
192 | int idx, long argl, void *argp); | 192 | int idx, long argl, void *argp); |
193 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, | 193 | typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
194 | int idx, long argl, void *argp); | 194 | int idx, long argl, void *argp); |
195 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, | 195 | typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, |
196 | int idx, long argl, void *argp); | 196 | void *from_d, int idx, long argl, void *argp); |
197 | 197 | ||
198 | typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; | 198 | typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; |
199 | typedef struct ocsp_response_st OCSP_RESPONSE; | 199 | typedef struct ocsp_response_st OCSP_RESPONSE; |
diff --git a/src/lib/libssl/src/crypto/ppccap.c b/src/lib/libssl/src/crypto/ppccap.c index f71ba66aa3..16cc9c445e 100644 --- a/src/lib/libssl/src/crypto/ppccap.c +++ b/src/lib/libssl/src/crypto/ppccap.c | |||
@@ -15,112 +15,110 @@ static int OPENSSL_ppccap_P = 0; | |||
15 | static sigset_t all_masked; | 15 | static sigset_t all_masked; |
16 | 16 | ||
17 | #ifdef OPENSSL_BN_ASM_MONT | 17 | #ifdef OPENSSL_BN_ASM_MONT |
18 | int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num) | 18 | int |
19 | { | 19 | bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, |
20 | const BN_ULONG *np, const BN_ULONG *n0, int num) | ||
21 | { | ||
20 | int bn_mul_mont_fpu64(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); | 22 | int bn_mul_mont_fpu64(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); |
21 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); | 23 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); |
22 | 24 | ||
23 | if (sizeof(size_t)==4) | 25 | if (sizeof(size_t) == 4) { |
24 | { | ||
25 | #if (defined(__APPLE__) && defined(__MACH__)) | 26 | #if (defined(__APPLE__) && defined(__MACH__)) |
26 | if (num>=8 && (num&3)==0 && (OPENSSL_ppccap_P&PPC_FPU64)) | 27 | if (num >= 8 && (num&3) == 0 && (OPENSSL_ppccap_P&PPC_FPU64)) |
27 | return bn_mul_mont_fpu64(rp,ap,bp,np,n0,num); | 28 | return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); |
28 | #else | 29 | #else |
29 | /* boundary of 32 was experimentally determined on | 30 | /* boundary of 32 was experimentally determined on |
30 | Linux 2.6.22, might have to be adjusted on AIX... */ | 31 | Linux 2.6.22, might have to be adjusted on AIX... */ |
31 | if (num>=32 && (num&3)==0 && (OPENSSL_ppccap_P&PPC_FPU64)) | 32 | if (num >= 32 && (num&3) == 0 && (OPENSSL_ppccap_P&PPC_FPU64)) { |
32 | { | ||
33 | sigset_t oset; | 33 | sigset_t oset; |
34 | int ret; | 34 | int ret; |
35 | 35 | ||
36 | sigprocmask(SIG_SETMASK,&all_masked,&oset); | 36 | sigprocmask(SIG_SETMASK, &all_masked, &oset); |
37 | ret=bn_mul_mont_fpu64(rp,ap,bp,np,n0,num); | 37 | ret = bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); |
38 | sigprocmask(SIG_SETMASK,&oset,NULL); | 38 | sigprocmask(SIG_SETMASK, &oset, NULL); |
39 | 39 | ||
40 | return ret; | 40 | return ret; |
41 | } | ||
42 | #endif | ||
43 | } | 41 | } |
44 | else if ((OPENSSL_ppccap_P&PPC_FPU64)) | 42 | #endif |
43 | } else if ((OPENSSL_ppccap_P&PPC_FPU64)) | ||
45 | /* this is a "must" on POWER6, but run-time detection | 44 | /* this is a "must" on POWER6, but run-time detection |
46 | * is not implemented yet... */ | 45 | * is not implemented yet... */ |
47 | return bn_mul_mont_fpu64(rp,ap,bp,np,n0,num); | 46 | return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); |
48 | 47 | ||
49 | return bn_mul_mont_int(rp,ap,bp,np,n0,num); | 48 | return bn_mul_mont_int(rp, ap, bp, np, n0, num); |
50 | } | 49 | } |
51 | #endif | 50 | #endif |
52 | 51 | ||
53 | static sigjmp_buf ill_jmp; | 52 | static sigjmp_buf ill_jmp; |
54 | static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | 53 | static void ill_handler (int sig) |
54 | { | ||
55 | siglongjmp(ill_jmp, sig); | ||
56 | } | ||
55 | 57 | ||
56 | void OPENSSL_ppc64_probe(void); | 58 | void OPENSSL_ppc64_probe(void); |
57 | void OPENSSL_altivec_probe(void); | 59 | void OPENSSL_altivec_probe(void); |
58 | 60 | ||
59 | void OPENSSL_cpuid_setup(void) | 61 | void |
60 | { | 62 | OPENSSL_cpuid_setup(void) |
63 | { | ||
61 | char *e; | 64 | char *e; |
62 | struct sigaction ill_oact,ill_act; | 65 | struct sigaction ill_oact, ill_act; |
63 | sigset_t oset; | 66 | sigset_t oset; |
64 | static int trigger=0; | 67 | static int trigger = 0; |
68 | |||
69 | if (trigger) | ||
70 | return; | ||
71 | trigger = 1; | ||
65 | 72 | ||
66 | if (trigger) return; | ||
67 | trigger=1; | ||
68 | |||
69 | sigfillset(&all_masked); | 73 | sigfillset(&all_masked); |
70 | sigdelset(&all_masked,SIGILL); | 74 | sigdelset(&all_masked, SIGILL); |
71 | sigdelset(&all_masked,SIGTRAP); | 75 | sigdelset(&all_masked, SIGTRAP); |
72 | #ifdef SIGEMT | 76 | #ifdef SIGEMT |
73 | sigdelset(&all_masked,SIGEMT); | 77 | sigdelset(&all_masked, SIGEMT); |
74 | #endif | 78 | #endif |
75 | sigdelset(&all_masked,SIGFPE); | 79 | sigdelset(&all_masked, SIGFPE); |
76 | sigdelset(&all_masked,SIGBUS); | 80 | sigdelset(&all_masked, SIGBUS); |
77 | sigdelset(&all_masked,SIGSEGV); | 81 | sigdelset(&all_masked, SIGSEGV); |
78 | 82 | ||
79 | if ((e=getenv("OPENSSL_ppccap"))) | 83 | if ((e = getenv("OPENSSL_ppccap"))) { |
80 | { | 84 | OPENSSL_ppccap_P = strtoul(e, NULL, 0); |
81 | OPENSSL_ppccap_P=strtoul(e,NULL,0); | ||
82 | return; | 85 | return; |
83 | } | 86 | } |
84 | 87 | ||
85 | OPENSSL_ppccap_P = 0; | 88 | OPENSSL_ppccap_P = 0; |
86 | 89 | ||
87 | #if defined(_AIX) | 90 | #if defined(_AIX) |
88 | if (sizeof(size_t)==4 | 91 | if (sizeof(size_t) == 4 |
89 | # if defined(_SC_AIX_KERNEL_BITMODE) | 92 | # if defined(_SC_AIX_KERNEL_BITMODE) |
90 | && sysconf(_SC_AIX_KERNEL_BITMODE)!=64 | 93 | && sysconf(_SC_AIX_KERNEL_BITMODE) != 64 |
91 | # endif | 94 | # endif |
92 | ) | 95 | ) |
93 | return; | 96 | return; |
94 | #endif | 97 | #endif |
95 | 98 | ||
96 | memset(&ill_act,0,sizeof(ill_act)); | 99 | memset(&ill_act, 0, sizeof(ill_act)); |
97 | ill_act.sa_handler = ill_handler; | 100 | ill_act.sa_handler = ill_handler; |
98 | ill_act.sa_mask = all_masked; | 101 | ill_act.sa_mask = all_masked; |
99 | 102 | ||
100 | sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); | 103 | sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); |
101 | sigaction(SIGILL,&ill_act,&ill_oact); | 104 | sigaction(SIGILL, &ill_act, &ill_oact); |
102 | 105 | ||
103 | if (sizeof(size_t)==4) | 106 | if (sizeof(size_t) == 4) { |
104 | { | 107 | if (sigsetjmp(ill_jmp, 1) == 0) { |
105 | if (sigsetjmp(ill_jmp,1) == 0) | ||
106 | { | ||
107 | OPENSSL_ppc64_probe(); | 108 | OPENSSL_ppc64_probe(); |
108 | OPENSSL_ppccap_P |= PPC_FPU64; | 109 | OPENSSL_ppccap_P |= PPC_FPU64; |
109 | } | ||
110 | } | 110 | } |
111 | else | 111 | } else { |
112 | { | ||
113 | /* | 112 | /* |
114 | * Wanted code detecting POWER6 CPU and setting PPC_FPU64 | 113 | * Wanted code detecting POWER6 CPU and setting PPC_FPU64 |
115 | */ | 114 | */ |
116 | } | 115 | } |
117 | 116 | ||
118 | if (sigsetjmp(ill_jmp,1) == 0) | 117 | if (sigsetjmp(ill_jmp, 1) == 0) { |
119 | { | ||
120 | OPENSSL_altivec_probe(); | 118 | OPENSSL_altivec_probe(); |
121 | OPENSSL_ppccap_P |= PPC_ALTIVEC; | 119 | OPENSSL_ppccap_P |= PPC_ALTIVEC; |
122 | } | ||
123 | |||
124 | sigaction (SIGILL,&ill_oact,NULL); | ||
125 | sigprocmask(SIG_SETMASK,&oset,NULL); | ||
126 | } | 120 | } |
121 | |||
122 | sigaction (SIGILL, &ill_oact, NULL); | ||
123 | sigprocmask(SIG_SETMASK, &oset, NULL); | ||
124 | } | ||
diff --git a/src/lib/libssl/src/crypto/s390xcap.c b/src/lib/libssl/src/crypto/s390xcap.c index f2e94ef47e..77f6260785 100644 --- a/src/lib/libssl/src/crypto/s390xcap.c +++ b/src/lib/libssl/src/crypto/s390xcap.c | |||
@@ -7,31 +7,36 @@ | |||
7 | extern unsigned long OPENSSL_s390xcap_P[]; | 7 | extern unsigned long OPENSSL_s390xcap_P[]; |
8 | 8 | ||
9 | static sigjmp_buf ill_jmp; | 9 | static sigjmp_buf ill_jmp; |
10 | static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); } | 10 | static void ill_handler (int sig) |
11 | { | ||
12 | siglongjmp(ill_jmp, sig); | ||
13 | } | ||
11 | 14 | ||
12 | unsigned long OPENSSL_s390x_facilities(void); | 15 | unsigned long OPENSSL_s390x_facilities(void); |
13 | 16 | ||
14 | void OPENSSL_cpuid_setup(void) | 17 | void |
15 | { | 18 | OPENSSL_cpuid_setup(void) |
19 | { | ||
16 | sigset_t oset; | 20 | sigset_t oset; |
17 | struct sigaction ill_act,oact; | 21 | struct sigaction ill_act, oact; |
18 | 22 | ||
19 | if (OPENSSL_s390xcap_P[0]) return; | 23 | if (OPENSSL_s390xcap_P[0]) |
24 | return; | ||
20 | 25 | ||
21 | OPENSSL_s390xcap_P[0] = 1UL<<(8*sizeof(unsigned long)-1); | 26 | OPENSSL_s390xcap_P[0] = 1UL << (8*sizeof(unsigned long) - 1); |
22 | 27 | ||
23 | memset(&ill_act,0,sizeof(ill_act)); | 28 | memset(&ill_act, 0, sizeof(ill_act)); |
24 | ill_act.sa_handler = ill_handler; | 29 | ill_act.sa_handler = ill_handler; |
25 | sigfillset(&ill_act.sa_mask); | 30 | sigfillset(&ill_act.sa_mask); |
26 | sigdelset(&ill_act.sa_mask,SIGILL); | 31 | sigdelset(&ill_act.sa_mask, SIGILL); |
27 | sigdelset(&ill_act.sa_mask,SIGTRAP); | 32 | sigdelset(&ill_act.sa_mask, SIGTRAP); |
28 | sigprocmask(SIG_SETMASK,&ill_act.sa_mask,&oset); | 33 | sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); |
29 | sigaction (SIGILL,&ill_act,&oact); | 34 | sigaction (SIGILL, &ill_act, &oact); |
30 | 35 | ||
31 | /* protection against missing store-facility-list-extended */ | 36 | /* protection against missing store-facility-list-extended */ |
32 | if (sigsetjmp(ill_jmp,1) == 0) | 37 | if (sigsetjmp(ill_jmp, 1) == 0) |
33 | OPENSSL_s390x_facilities(); | 38 | OPENSSL_s390x_facilities(); |
34 | 39 | ||
35 | sigaction (SIGILL,&oact,NULL); | 40 | sigaction (SIGILL, &oact, NULL); |
36 | sigprocmask(SIG_SETMASK,&oset,NULL); | 41 | sigprocmask(SIG_SETMASK, &oset, NULL); |
37 | } | 42 | } |
diff --git a/src/lib/libssl/src/crypto/sparcv9cap.c b/src/lib/libssl/src/crypto/sparcv9cap.c index 43b3ac6f81..08f7de3ec8 100644 --- a/src/lib/libssl/src/crypto/sparcv9cap.c +++ b/src/lib/libssl/src/crypto/sparcv9cap.c | |||
@@ -12,20 +12,22 @@ | |||
12 | #define SPARCV9_VIS2 (1<<3) /* reserved */ | 12 | #define SPARCV9_VIS2 (1<<3) /* reserved */ |
13 | #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ | 13 | #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ |
14 | 14 | ||
15 | static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED; | 15 | static int OPENSSL_sparcv9cap_P = SPARCV9_TICK_PRIVILEGED; |
16 | 16 | ||
17 | int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num) | 17 | int |
18 | { | 18 | bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, |
19 | int bn_mul_mont_fpu(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); | 19 | const BN_ULONG *np, const BN_ULONG *n0, int num) |
20 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); | 20 | { |
21 | 21 | int bn_mul_mont_fpu(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); | |
22 | if (num>=8 && !(num&1) && | 22 | int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); |
23 | (OPENSSL_sparcv9cap_P&(SPARCV9_PREFER_FPU|SPARCV9_VIS1)) == | 23 | |
24 | (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) | 24 | if (num >= 8 && !(num & 1) && |
25 | return bn_mul_mont_fpu(rp,ap,bp,np,n0,num); | 25 | (OPENSSL_sparcv9cap_P & (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) == |
26 | (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) | ||
27 | return bn_mul_mont_fpu(rp, ap, bp, np, n0, num); | ||
26 | else | 28 | else |
27 | return bn_mul_mont_int(rp,ap,bp,np,n0,num); | 29 | return bn_mul_mont_int(rp, ap, bp, np, n0, num); |
28 | } | 30 | } |
29 | 31 | ||
30 | unsigned long _sparcv9_rdtick(void); | 32 | unsigned long _sparcv9_rdtick(void); |
31 | void _sparcv9_vis1_probe(void); | 33 | void _sparcv9_vis1_probe(void); |
@@ -33,8 +35,9 @@ unsigned long _sparcv9_vis1_instrument(void); | |||
33 | void _sparcv9_vis2_probe(void); | 35 | void _sparcv9_vis2_probe(void); |
34 | void _sparcv9_fmadd_probe(void); | 36 | void _sparcv9_fmadd_probe(void); |
35 | 37 | ||
36 | unsigned long OPENSSL_rdtsc(void) | 38 | unsigned long |
37 | { | 39 | OPENSSL_rdtsc(void) |
40 | { | ||
38 | if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED) | 41 | if (OPENSSL_sparcv9cap_P&SPARCV9_TICK_PRIVILEGED) |
39 | #if defined(__sun) && defined(__SVR4) | 42 | #if defined(__sun) && defined(__SVR4) |
40 | return gethrtime(); | 43 | return gethrtime(); |
@@ -43,7 +46,7 @@ unsigned long OPENSSL_rdtsc(void) | |||
43 | #endif | 46 | #endif |
44 | else | 47 | else |
45 | return _sparcv9_rdtick(); | 48 | return _sparcv9_rdtick(); |
46 | } | 49 | } |
47 | 50 | ||
48 | #if 0 && defined(__sun) && defined(__SVR4) | 51 | #if 0 && defined(__sun) && defined(__SVR4) |
49 | /* This code path is disabled, because of incompatibility of | 52 | /* This code path is disabled, because of incompatibility of |
@@ -54,21 +57,22 @@ unsigned long OPENSSL_rdtsc(void) | |||
54 | #include <libdevinfo.h> | 57 | #include <libdevinfo.h> |
55 | #include <sys/systeminfo.h> | 58 | #include <sys/systeminfo.h> |
56 | 59 | ||
57 | typedef di_node_t (*di_init_t)(const char *,uint_t); | 60 | typedef di_node_t (*di_init_t)(const char *, uint_t); |
58 | typedef void (*di_fini_t)(di_node_t); | 61 | typedef void (*di_fini_t)(di_node_t); |
59 | typedef char * (*di_node_name_t)(di_node_t); | 62 | typedef char * (*di_node_name_t)(di_node_t); |
60 | typedef int (*di_walk_node_t)(di_node_t,uint_t,di_node_name_t,int (*)(di_node_t,di_node_name_t)); | 63 | typedef int (*di_walk_node_t)(di_node_t, uint_t, di_node_name_t, int (*)(di_node_t, di_node_name_t)); |
61 | 64 | ||
62 | #define DLLINK(h,name) (name=(name##_t)dlsym((h),#name)) | 65 | #define DLLINK(h,name) (name=(name##_t)dlsym((h),#name)) |
63 | 66 | ||
64 | static int walk_nodename(di_node_t node, di_node_name_t di_node_name) | 67 | static int |
65 | { | 68 | walk_nodename(di_node_t node, di_node_name_t di_node_name) |
69 | { | ||
66 | char *name = (*di_node_name)(node); | 70 | char *name = (*di_node_name)(node); |
67 | 71 | ||
68 | /* This is expected to catch all UltraSPARC flavors prior T1 */ | 72 | /* This is expected to catch all UltraSPARC flavors prior T1 */ |
69 | if (!strcmp (name,"SUNW,UltraSPARC") || | 73 | if (!strcmp (name, "SUNW, UltraSPARC") || |
70 | !strncmp(name,"SUNW,UltraSPARC-I",17)) /* covers II,III,IV */ | 74 | !strncmp(name,"SUNW,UltraSPARC-I",17)) /* covers II,III,IV */ |
71 | { | 75 | { |
72 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1; | 76 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU|SPARCV9_VIS1; |
73 | 77 | ||
74 | /* %tick is privileged only on UltraSPARC-I/II, but not IIe */ | 78 | /* %tick is privileged only on UltraSPARC-I/II, but not IIe */ |
@@ -76,51 +80,48 @@ static int walk_nodename(di_node_t node, di_node_name_t di_node_name) | |||
76 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 80 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
77 | 81 | ||
78 | return DI_WALK_TERMINATE; | 82 | return DI_WALK_TERMINATE; |
79 | } | 83 | } |
80 | /* This is expected to catch remaining UltraSPARCs, such as T1 */ | 84 | /* This is expected to catch remaining UltraSPARCs, such as T1 */ |
81 | else if (!strncmp(name,"SUNW,UltraSPARC",15)) | 85 | else if (!strncmp(name, "SUNW, UltraSPARC", 15)) { |
82 | { | ||
83 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 86 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
84 | 87 | ||
85 | return DI_WALK_TERMINATE; | 88 | return DI_WALK_TERMINATE; |
86 | } | 89 | } |
87 | 90 | ||
88 | return DI_WALK_CONTINUE; | 91 | return DI_WALK_CONTINUE; |
89 | } | 92 | } |
90 | 93 | ||
91 | void OPENSSL_cpuid_setup(void) | 94 | void |
92 | { | 95 | OPENSSL_cpuid_setup(void) |
96 | { | ||
93 | void *h; | 97 | void *h; |
94 | char *e,si[256]; | 98 | char *e, si[256]; |
95 | static int trigger=0; | 99 | static int trigger = 0; |
96 | 100 | ||
97 | if (trigger) return; | 101 | if (trigger) |
98 | trigger=1; | 102 | return; |
103 | trigger = 1; | ||
99 | 104 | ||
100 | if ((e=getenv("OPENSSL_sparcv9cap"))) | 105 | if ((e = getenv("OPENSSL_sparcv9cap"))) { |
101 | { | 106 | OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0); |
102 | OPENSSL_sparcv9cap_P=strtoul(e,NULL,0); | ||
103 | return; | 107 | return; |
104 | } | 108 | } |
105 | 109 | ||
106 | if (sysinfo(SI_MACHINE,si,sizeof(si))>0) | 110 | if (sysinfo(SI_MACHINE, si, sizeof(si)) > 0) { |
107 | { | 111 | if (strcmp(si, "sun4v")) |
108 | if (strcmp(si,"sun4v")) | ||
109 | /* FPU is preferred for all CPUs, but US-T1/2 */ | 112 | /* FPU is preferred for all CPUs, but US-T1/2 */ |
110 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU; | 113 | OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU; |
111 | } | 114 | } |
112 | 115 | ||
113 | if (sysinfo(SI_ISALIST,si,sizeof(si))>0) | 116 | if (sysinfo(SI_ISALIST, si, sizeof(si)) > 0) { |
114 | { | 117 | if (strstr(si, "+vis")) |
115 | if (strstr(si,"+vis")) | ||
116 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; | 118 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; |
117 | if (strstr(si,"+vis2")) | 119 | if (strstr(si, "+vis2")) { |
118 | { | ||
119 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; | 120 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; |
120 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 121 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
121 | return; | 122 | return; |
122 | } | ||
123 | } | 123 | } |
124 | } | ||
124 | #ifdef M_KEEP | 125 | #ifdef M_KEEP |
125 | /* | 126 | /* |
126 | * Solaris libdevinfo.so.1 is effectively incomatible with | 127 | * Solaris libdevinfo.so.1 is effectively incomatible with |
@@ -129,109 +130,115 @@ void OPENSSL_cpuid_setup(void) | |||
129 | * free(3LIBMALLOC) called by di_fini. Prior call to | 130 | * free(3LIBMALLOC) called by di_fini. Prior call to |
130 | * mallopt(M_KEEP,0) somehow helps... But not always... | 131 | * mallopt(M_KEEP,0) somehow helps... But not always... |
131 | */ | 132 | */ |
132 | if ((h = dlopen(NULL,RTLD_LAZY))) | 133 | if ((h = dlopen(NULL, RTLD_LAZY))) { |
133 | { | 134 | union { void *p; |
134 | union { void *p; int (*f)(int,int); } sym; | 135 | int (*f)(int, int); |
135 | if ((sym.p = dlsym(h,"mallopt"))) (*sym.f)(M_KEEP,0); | 136 | } sym; |
136 | dlclose(h); | 137 | if ((sym.p = dlsym(h, "mallopt"))) (*sym.f)(M_KEEP, 0); |
137 | } | 138 | dlclose(h); |
139 | } | ||
138 | #endif | 140 | #endif |
139 | if ((h = dlopen("libdevinfo.so.1",RTLD_LAZY))) do | 141 | if ((h = dlopen("libdevinfo.so.1", RTLD_LAZY))) |
140 | { | 142 | do { |
141 | di_init_t di_init; | 143 | di_init_t di_init; |
142 | di_fini_t di_fini; | 144 | di_fini_t di_fini; |
143 | di_walk_node_t di_walk_node; | 145 | di_walk_node_t di_walk_node; |
144 | di_node_name_t di_node_name; | 146 | di_node_name_t di_node_name; |
145 | di_node_t root_node; | 147 | di_node_t root_node; |
146 | 148 | ||
147 | if (!DLLINK(h,di_init)) break; | 149 | if (!DLLINK(h, di_init)) |
148 | if (!DLLINK(h,di_fini)) break; | 150 | break; |
149 | if (!DLLINK(h,di_walk_node)) break; | 151 | if (!DLLINK(h, di_fini)) |
150 | if (!DLLINK(h,di_node_name)) break; | 152 | break; |
151 | 153 | if (!DLLINK(h, di_walk_node)) | |
152 | if ((root_node = (*di_init)("/",DINFOSUBTREE))!=DI_NODE_NIL) | 154 | break; |
153 | { | 155 | if (!DLLINK(h, di_node_name)) |
154 | (*di_walk_node)(root_node,DI_WALK_SIBFIRST, | 156 | break; |
155 | di_node_name,walk_nodename); | 157 | |
156 | (*di_fini)(root_node); | 158 | if ((root_node = (*di_init)("/", DINFOSUBTREE)) != |
159 | DI_NODE_NIL) { | ||
160 | (*di_walk_node)(root_node, DI_WALK_SIBFIRST, | ||
161 | di_node_name, walk_nodename); | ||
162 | (*di_fini)(root_node); | ||
157 | } | 163 | } |
158 | } while(0); | 164 | } while (0); |
159 | 165 | ||
160 | if (h) dlclose(h); | 166 | if (h) |
161 | } | 167 | dlclose(h); |
168 | } | ||
162 | 169 | ||
163 | #else | 170 | #else |
164 | 171 | ||
165 | static sigjmp_buf common_jmp; | 172 | static sigjmp_buf common_jmp; |
166 | static void common_handler(int sig) { siglongjmp(common_jmp,sig); } | 173 | static void common_handler(int sig) |
167 | 174 | { | |
168 | void OPENSSL_cpuid_setup(void) | 175 | siglongjmp(common_jmp, sig); |
169 | { | 176 | } |
177 | |||
178 | void | ||
179 | OPENSSL_cpuid_setup(void) | ||
180 | { | ||
170 | char *e; | 181 | char *e; |
171 | struct sigaction common_act,ill_oact,bus_oact; | 182 | struct sigaction common_act, ill_oact, bus_oact; |
172 | sigset_t all_masked,oset; | 183 | sigset_t all_masked, oset; |
173 | static int trigger=0; | 184 | static int trigger = 0; |
174 | 185 | ||
175 | if (trigger) return; | 186 | if (trigger) |
176 | trigger=1; | ||
177 | |||
178 | if ((e=getenv("OPENSSL_sparcv9cap"))) | ||
179 | { | ||
180 | OPENSSL_sparcv9cap_P=strtoul(e,NULL,0); | ||
181 | return; | 187 | return; |
182 | } | 188 | trigger = 1; |
189 | |||
190 | if ((e = getenv("OPENSSL_sparcv9cap"))) { | ||
191 | OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0); | ||
192 | return; | ||
193 | } | ||
183 | 194 | ||
184 | /* Initial value, fits UltraSPARC-I&II... */ | 195 | /* Initial value, fits UltraSPARC-I&II... */ |
185 | OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED; | 196 | OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU|SPARCV9_TICK_PRIVILEGED; |
186 | 197 | ||
187 | sigfillset(&all_masked); | 198 | sigfillset(&all_masked); |
188 | sigdelset(&all_masked,SIGILL); | 199 | sigdelset(&all_masked, SIGILL); |
189 | sigdelset(&all_masked,SIGTRAP); | 200 | sigdelset(&all_masked, SIGTRAP); |
190 | #ifdef SIGEMT | 201 | #ifdef SIGEMT |
191 | sigdelset(&all_masked,SIGEMT); | 202 | sigdelset(&all_masked, SIGEMT); |
192 | #endif | 203 | #endif |
193 | sigdelset(&all_masked,SIGFPE); | 204 | sigdelset(&all_masked, SIGFPE); |
194 | sigdelset(&all_masked,SIGBUS); | 205 | sigdelset(&all_masked, SIGBUS); |
195 | sigdelset(&all_masked,SIGSEGV); | 206 | sigdelset(&all_masked, SIGSEGV); |
196 | sigprocmask(SIG_SETMASK,&all_masked,&oset); | 207 | sigprocmask(SIG_SETMASK, &all_masked, &oset); |
197 | 208 | ||
198 | memset(&common_act,0,sizeof(common_act)); | 209 | memset(&common_act, 0, sizeof(common_act)); |
199 | common_act.sa_handler = common_handler; | 210 | common_act.sa_handler = common_handler; |
200 | common_act.sa_mask = all_masked; | 211 | common_act.sa_mask = all_masked; |
201 | 212 | ||
202 | sigaction(SIGILL,&common_act,&ill_oact); | 213 | sigaction(SIGILL, &common_act, &ill_oact); |
203 | sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */ | 214 | sigaction(SIGBUS,&common_act,&bus_oact);/* T1 fails 16-bit ldda [on Linux] */ |
204 | 215 | ||
205 | if (sigsetjmp(common_jmp,1) == 0) | 216 | if (sigsetjmp(common_jmp, 1) == 0) { |
206 | { | ||
207 | _sparcv9_rdtick(); | 217 | _sparcv9_rdtick(); |
208 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; | 218 | OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED; |
209 | } | 219 | } |
210 | 220 | ||
211 | if (sigsetjmp(common_jmp,1) == 0) | 221 | if (sigsetjmp(common_jmp, 1) == 0) { |
212 | { | ||
213 | _sparcv9_vis1_probe(); | 222 | _sparcv9_vis1_probe(); |
214 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; | 223 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS1; |
215 | /* detect UltraSPARC-Tx, see sparccpud.S for details... */ | 224 | /* detect UltraSPARC-Tx, see sparccpud.S for details... */ |
216 | if (_sparcv9_vis1_instrument() >= 12) | 225 | if (_sparcv9_vis1_instrument() >= 12) |
217 | OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1|SPARCV9_PREFER_FPU); | 226 | OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1|SPARCV9_PREFER_FPU); |
218 | else | 227 | else { |
219 | { | ||
220 | _sparcv9_vis2_probe(); | 228 | _sparcv9_vis2_probe(); |
221 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; | 229 | OPENSSL_sparcv9cap_P |= SPARCV9_VIS2; |
222 | } | ||
223 | } | 230 | } |
231 | } | ||
224 | 232 | ||
225 | if (sigsetjmp(common_jmp,1) == 0) | 233 | if (sigsetjmp(common_jmp, 1) == 0) { |
226 | { | ||
227 | _sparcv9_fmadd_probe(); | 234 | _sparcv9_fmadd_probe(); |
228 | OPENSSL_sparcv9cap_P |= SPARCV9_FMADD; | 235 | OPENSSL_sparcv9cap_P |= SPARCV9_FMADD; |
229 | } | 236 | } |
230 | 237 | ||
231 | sigaction(SIGBUS,&bus_oact,NULL); | 238 | sigaction(SIGBUS, &bus_oact, NULL); |
232 | sigaction(SIGILL,&ill_oact,NULL); | 239 | sigaction(SIGILL, &ill_oact, NULL); |
233 | 240 | ||
234 | sigprocmask(SIG_SETMASK,&oset,NULL); | 241 | sigprocmask(SIG_SETMASK, &oset, NULL); |
235 | } | 242 | } |
236 | 243 | ||
237 | #endif | 244 | #endif |
diff --git a/src/lib/libssl/src/crypto/uid.c b/src/lib/libssl/src/crypto/uid.c index b1fd52bada..fcfa05ce0c 100644 --- a/src/lib/libssl/src/crypto/uid.c +++ b/src/lib/libssl/src/crypto/uid.c | |||
@@ -60,30 +60,32 @@ | |||
60 | 60 | ||
61 | #include OPENSSL_UNISTD | 61 | #include OPENSSL_UNISTD |
62 | 62 | ||
63 | int OPENSSL_issetugid(void) | 63 | int |
64 | { | 64 | OPENSSL_issetugid(void) |
65 | { | ||
65 | return issetugid(); | 66 | return issetugid(); |
66 | } | 67 | } |
67 | 68 | ||
68 | #elif defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) | 69 | #elif defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) |
69 | 70 | ||
70 | int OPENSSL_issetugid(void) | 71 | int |
71 | { | 72 | OPENSSL_issetugid(void) |
73 | { | ||
72 | return 0; | 74 | return 0; |
73 | } | 75 | } |
74 | 76 | ||
75 | #else | 77 | #else |
76 | 78 | ||
77 | #include OPENSSL_UNISTD | 79 | #include OPENSSL_UNISTD |
78 | #include <sys/types.h> | 80 | #include <sys/types.h> |
79 | 81 | ||
80 | int OPENSSL_issetugid(void) | 82 | int |
81 | { | 83 | OPENSSL_issetugid(void) |
82 | if (getuid() != geteuid()) return 1; | 84 | { |
83 | if (getgid() != getegid()) return 1; | 85 | if (getuid() |
86 | != geteuid()) return 1; | ||
87 | if (getgid() | ||
88 | != getegid()) return 1; | ||
84 | return 0; | 89 | return 0; |
85 | } | 90 | } |
86 | #endif | 91 | #endif |
87 | |||
88 | |||
89 | |||