Commit 0deea1d6 authored by Cliff Woolley's avatar Cliff Woolley
Browse files

Fix the rest of the apr_pool_userdata_setn() bogosity w.r.t. DSO modules.

It's totally unsafe to use apr_pool_userdata_setn() in the post_config
phase of a module, since on some platforms when the DSO gets reloaded
between phases, the data segment will be at a different address on the
second phase and the userdata_get() call will fail.

PR: 9413
Submitted by: Tsuyoshi Sasamoto <nazonazo@super.win.ne.jp>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95287 13f79535-47bb-0310-9956-ffa450edef68
parent 170ac28e
Loading
Loading
Loading
Loading
+6 −0
Changes for CHANGES: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
Changes with Apache 2.0.37
  *) Fix segfaults at startup on some platforms when mod_auth_digest,
     mod_suexec, or mod_ssl were used as DSO's due to the way they
     were tracking the current init phase since DSO's get completely
     unloaded and reloaded between phases.  PR 9413.
     [Tsuyoshi Sasamoto <nazonazo@super.win.ne.jp>, Brad Nicholes]
  *) Fix mod_include's handling of regular expressions in
     "<!--#if" directives [Julius Gawlas <julius_gawlas@hp.com>]
+1 −1
Changes for modules/generators/mod_suexec.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ static int suexec_post_config(apr_pool_t *p, apr_pool_t *plog,
        ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s,
                     "suEXEC mechanism enabled (wrapper: %s)", SUEXEC_BIN);

        apr_pool_userdata_setn((void *)1, SUEXEC_POST_CONFIG_USERDATA,
        apr_pool_userdata_set((void *)1, SUEXEC_POST_CONFIG_USERDATA,
                              apr_pool_cleanup_null, s->process->pool);
    }

+1 −1
Changes for modules/ssl/ssl_scache.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ void ssl_scache_init(server_rec *s, apr_pool_t *p)

        apr_pool_userdata_get(&data, userdata_key, s->process->pool);
        if (!data) {
            apr_pool_userdata_setn((const void *)1, userdata_key,
            apr_pool_userdata_set((const void *)1, userdata_key,
                                  apr_pool_cleanup_null, s->process->pool);
            return;
        }