Hi Ralf,

I built the Apache and mod_ssl in Debug configuration to trace out this consistent problem. When I got this unreferenced memory, I clicked cancel to debug using VC++. It says "invalid memory Access" and points to the following source code.

    API_EXPORT(void *) ap_ctx_get(ap_ctx *ctx, char *key)
    {
        int i;

==>    for (i = 0; ctx->cr_entry[i] != NULL; i++)
                if (strcmp(ctx->cr_entry[i]->ce_key, key) == 0)
                return ctx->cr_entry[i]->ce_val;
        return NULL;
    }

So, ctx can be either a NULL pointer or uninitialised or corrupted memory reference for this case.

Here is the full debug functional trace:
ap_ctx_get(ap_ctx_rec *, char *)
ssl_io_suck_read(ssl_st *, char *, int)
SSL_recvwithtimeout(buff_struct *, char *, int)
ssl_io_hook_recvwithtimeout(buff_struct *, char *, int)
ap_hook_call_func(char *, ap_hook_entry *, ap_hook_func *)
ap_hook_call(char *)
buff_read(buff_struct *, void *, int)
saferead_guts(buff_struct *, void *, int)
read_with_errors(buff_struct *, void *, int)
ap_bgets(char * int , buff_struct *)
getline(char *, int, buff_struct *, int)
read_request_line(request_rec *)
ap_read_request(conn_rec *)
child_sub_main(int)
child_main(int)

I understand that memory has been allocated for the request object and for the context (r->ctx) in ap_read_request as follows. And, I am pretty sure that we built under EAPI only.

 r = ap_pcalloc(p, sizeof(request_rec));
 r->pool            = p;
.....
.....
#ifdef EAPI
    r->ctx = ap_ctx_new(r->pool);
#endif /* EAPI */

Then, How come this ctx value can be NULL or invalid? Is this memory pool will be cleaned-up intermittently?

By handling this exception with __try and  __except block in ssl_io_suck_read, I can avoid these invalid memory reference errors. But, I want to make sure this doesn't break anything else.
I feel there is some buggy code added in mod_ssl2.8.8 since I am not facing this problem with Apache1.3.20 and mod_ssl2.8.4 on the same Win2k server in SSL mode. And, please note that Apache1.3.24 is working perfectly in http mode for me. Please let me know, if you need any other information.

Any help is greatly appreciated.

Thanks
Hassan

Hassan S wrote:

Hi,

   I have a situation where I have to redirect from a HTTP to a HTTPS
connection
via a servlet. That is I send a HTTP GET request to a servlet which in
reply sends
a redirect to a web page with the URL protocol changed to HTTPS.

Till Apache 1.3.20+ModSSL 2.8.4 this was working fine. But after I
upgraded
to Apache 1.3.24+ModSSL 2.8.8 (to get the security fixes :) ), it is
crashing
with a error message like

"The instruction at "0x6ff90e08" referenced memory at "0x72676f76". The
memory
could not be read."

If I click Cancel to debug using VC++ it shows an invalid memory access
in ApacheCore.dll.

My platform config is

Windows 2000
MS VC++ 6.0 (SP5)
OpenSSL 0.9.6c (built using MASM optimizations).

Please let me know where the problem is, or maybe where I should look to
try and
debug this. This has become a critical issue for me!

Regards,
Hassan.

______________________________________________________________________
Apache Interface to OpenSSL (mod_ssl)                   www.modssl.org
User Support Mailing List                      [EMAIL PROTECTED]
Automated List Manager                            [EMAIL PROTECTED]

Reply via email to