comparison src/event/ngx_event_openssl.c @ 7365:cd4fa2fab8d8

SSL: fixed unlocked access to sess_id->len.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 25 Sep 2018 14:07:59 +0300
parents c09c7d47acb9
children ed8738b1c7c4
comparison
equal deleted inserted replaced
7364:5fa22beeaf11 7365:cd4fa2fab8d8
3144 { 3144 {
3145 #if OPENSSL_VERSION_NUMBER >= 0x0090707fL 3145 #if OPENSSL_VERSION_NUMBER >= 0x0090707fL
3146 const 3146 const
3147 #endif 3147 #endif
3148 u_char *p; 3148 u_char *p;
3149 size_t slen;
3149 uint32_t hash; 3150 uint32_t hash;
3150 ngx_int_t rc; 3151 ngx_int_t rc;
3151 ngx_shm_zone_t *shm_zone; 3152 ngx_shm_zone_t *shm_zone;
3152 ngx_slab_pool_t *shpool; 3153 ngx_slab_pool_t *shpool;
3153 ngx_rbtree_node_t *node, *sentinel; 3154 ngx_rbtree_node_t *node, *sentinel;
3199 (size_t) len, (size_t) node->data); 3200 (size_t) len, (size_t) node->data);
3200 3201
3201 if (rc == 0) { 3202 if (rc == 0) {
3202 3203
3203 if (sess_id->expire > ngx_time()) { 3204 if (sess_id->expire > ngx_time()) {
3204 ngx_memcpy(buf, sess_id->session, sess_id->len); 3205 slen = sess_id->len;
3206
3207 ngx_memcpy(buf, sess_id->session, slen);
3205 3208
3206 ngx_shmtx_unlock(&shpool->mutex); 3209 ngx_shmtx_unlock(&shpool->mutex);
3207 3210
3208 p = buf; 3211 p = buf;
3209 sess = d2i_SSL_SESSION(NULL, &p, sess_id->len); 3212 sess = d2i_SSL_SESSION(NULL, &p, slen);
3210 3213
3211 return sess; 3214 return sess;
3212 } 3215 }
3213 3216
3214 ngx_queue_remove(&sess_id->queue); 3217 ngx_queue_remove(&sess_id->queue);