Changeset 368b574 in mod_gnutls for src


Ignore:
Timestamp:
Aug 18, 2010, 2:41:36 PM (9 years ago)
Author:
Nikos Mavrogiannopoulos <nmav@…>
Branches:
debian/master, debian/stretch-backports, jessie-backports, master, msva, upstream
Children:
41dd507
Parents:
7fec961
git-author:
Nikos Mavrogiannopoulos <nmav@…> (08/17/10 13:04:34)
git-committer:
Nikos Mavrogiannopoulos <nmav@…> (08/18/10 14:41:36)
Message:

Safer usage of session variable to prevent segmentation faults on closure. Should solve issue #106.

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_hooks.c

    r7fec961 r368b574  
    487487const char *mgs_hook_http_scheme(const request_rec * r)
    488488{
    489     mgs_srvconf_rec *sc =
     489    mgs_srvconf_rec *sc;
     490   
     491    if (r == NULL)
     492        return NULL;
     493   
     494    sc =
    490495        (mgs_srvconf_rec *) ap_get_module_config(r->server->module_config,
    491496                                                 &gnutls_module);
     
    501506apr_port_t mgs_hook_default_port(const request_rec * r)
    502507{
    503     mgs_srvconf_rec *sc =
     508    mgs_srvconf_rec *sc;
     509   
     510    if (r == NULL)
     511        return 0;
     512   
     513    sc =
    504514        (mgs_srvconf_rec *) ap_get_module_config(r->server->module_config,
    505515                                                 &gnutls_module);
     
    580590#endif
    581591
     592    if (session == NULL)
     593        return NULL;
     594
    582595    _gnutls_log(debug_log_fp,   "%s: %d\n", __func__, __LINE__);
    583596    ctxt = gnutls_transport_get_ptr(session);
     
    694707{
    695708    mgs_handle_t *ctxt;
    696     mgs_srvconf_rec *sc =
     709    mgs_srvconf_rec *sc;
     710
     711    _gnutls_log(debug_log_fp,   "%s: %d\n", __func__, __LINE__);
     712   
     713    if (c == NULL)
     714        return DECLINED;
     715   
     716    sc =
    697717        (mgs_srvconf_rec *) ap_get_module_config(c->base_server->
    698718                                                 module_config,
    699719                                                 &gnutls_module);
    700720
    701     _gnutls_log(debug_log_fp,   "%s: %d\n", __func__, __LINE__);
    702721    if (!(sc && (sc->enabled == GNUTLS_ENABLED_TRUE))) {
    703722        return DECLINED;
     
    733752    int rv = OK;
    734753
     754    if (r == NULL)
     755        return DECLINED;
     756
    735757    _gnutls_log(debug_log_fp,   "%s: %d\n", __func__, __LINE__);
    736758    apr_table_t *env = r->subprocess_env;
     
    739761        ap_get_module_config(r->connection->conn_config, &gnutls_module);
    740762
    741     if (!ctxt) {
     763    if (!ctxt || ctxt->session == NULL) {
    742764        return DECLINED;
    743765    }
     
    805827    int rv;
    806828    mgs_handle_t *ctxt;
    807     mgs_dirconf_rec *dc = ap_get_module_config(r->per_dir_config,
     829    mgs_dirconf_rec *dc;
     830   
     831    if (r == NULL)
     832        return DECLINED;
     833   
     834    dc = ap_get_module_config(r->per_dir_config,
    808835                                               &gnutls_module);
    809836
     
    812839        ap_get_module_config(r->connection->conn_config, &gnutls_module);
    813840
    814     if (!ctxt) {
     841    if (!ctxt || ctxt->session == NULL) {
    815842        return DECLINED;
    816843    }
     
    875902    size_t len;
    876903    int ret, i;
     904
     905    if (r == NULL)
     906        return;
    877907
    878908    apr_table_t *env = r->subprocess_env;
     
    9841014    size_t len;
    9851015    int ret;
     1016   
     1017    if (r == NULL)
     1018        return;
    9861019
    9871020    _gnutls_log(debug_log_fp,   "%s: %d\n", __func__, __LINE__);
     
    10521085    } cert;
    10531086    apr_time_t expiration_time, cur_time;
     1087
     1088    if (r == NULL || ctxt == NULL || ctxt->session == NULL)
     1089        return HTTP_FORBIDDEN;
    10541090
    10551091    _gnutls_log(debug_log_fp, "%s: %d\n", __func__, __LINE__);
  • src/gnutls_io.c

    r7fec961 r368b574  
    222222        }
    223223    }
     224   
     225    if (ctxt->session == NULL) {
     226        return APR_EGENERAL;
     227    }
    224228
    225229    while (1) {
     
    361365    int maxtries = HANDSHAKE_MAX_TRIES;
    362366
    363     if (ctxt->status != 0) {
     367    if (ctxt->status != 0 || ctxt->session == NULL) {
    364368        return -1;
    365369    }
     
    442446{
    443447    int rv;
     448   
     449    if (ctxt->session == NULL)
     450        return -1;
    444451
    445452    rv = gnutls_rehandshake(ctxt->session);
     
    566573            apr_bucket_copy(bucket, &e);
    567574            APR_BRIGADE_INSERT_TAIL(ctxt->output_bb, e);
    568             
     575 
    569576            if ((status = ap_pass_brigade(f->next, tmpb)) != APR_SUCCESS) {
    570577                apr_brigade_cleanup(ctxt->output_bb);
     
    610617            if (len > 0) {
    611618
    612                 do {
    613                     ret = gnutls_record_send(ctxt->session, data, len);
    614                 }
    615                 while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
     619                if (ctxt->session == NULL) {
     620                    ret = GNUTLS_E_INVALID_REQUEST;
     621                } else {
     622                    do {
     623                        ret = gnutls_record_send(ctxt->session, data, len);
     624                    }
     625                    while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
     626                }
    616627
    617628                if (ret < 0) {
     
    675686                return 0;
    676687            } else {
    677                 gnutls_transport_set_errno(ctxt->session, EINTR);
     688                if (ctxt->session)
     689                    gnutls_transport_set_errno(ctxt->session, EINTR);
    678690                return -1;
    679691            }
     
    698710        || APR_STATUS_IS_EINTR(ctxt->input_rc)) {
    699711        if (len == 0) {
    700             gnutls_transport_set_errno(ctxt->session, EINTR);
     712            if (ctxt->session)
     713                gnutls_transport_set_errno(ctxt->session, EINTR);
    701714            return -1;
    702715        }
Note: See TracChangeset for help on using the changeset viewer.