You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2019/07/18 13:37:25 UTC
svn commit: r1863292 - in /subversion/branches/1.10.x: ./ STATUS
subversion/mod_dav_svn/repos.c
Author: julianfoad
Date: Thu Jul 18 13:37:25 2019
New Revision: 1863292
URL: http://svn.apache.org/viewvc?rev=1863292&view=rev
Log:
Merge r1850651 from trunk:
* r1850651
Fix a use-after-free in mod_dav_svn's logging of FS warnings.
Justification:
Lots of crashes on OpenBSD during 'make check' with HTTPD 2.4.
See https://svn.haxx.se/dev/archive-2018-12/0137.shtml
Votes:
+1: stsp, brane
Modified:
subversion/branches/1.10.x/ (props changed)
subversion/branches/1.10.x/STATUS
subversion/branches/1.10.x/subversion/mod_dav_svn/repos.c
Propchange: subversion/branches/1.10.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 18 13:37:25 2019
@@ -103,4 +103,4 @@
/subversion/branches/verify-at-commit:1462039-1462408
/subversion/branches/verify-keep-going:1439280-1546110
/subversion/branches/wc-collate-path:1402685-1480384
-/subversion/trunk:1817837,1817856,1818577-1818578,1818584,1818651,1818662,1818727,1818801,1818803,1818807,1818868,1818871,1819036-1819037,1819043,1819049,1819052,1819093,1819146,1819162,1819444,1819556-1819557,1819603,1819804,1819911,1820044,1820046-1820047,1820518,1820627,1820718,1820778,1821183,1821224,1821621,1821678,1822401,1822587,1822591,1822996,1823202-1823203,1823211,1823327,1823791,1823966,1823989,1824033,1825024,1825045,1825215,1825266,1825306,1825709,1825711,1825721,1825736,1825778,1825783,1825787-1825788,1825979,1826720-1826721,1826747,1826811,1826814,1826877,1826907,1826971,1827105,1827114,1827191,1827562,1827574,1827670,1828613,1829012,1829015,1829241,1829260,1829344,1830083,1830882-1830883,1830885,1830900-1830901,1831110,1831112,1831540,1833465,1833621,1833836,1833842,1833864,1833866,1833895,1833897,1833899,1833901,1835760,1836306,1836762,1836802,1836960,1836963,1836968,1836976,1837037,1837790,1838813,1839662,1839703,1839734,1839739,1840991,1842260,1842262,1842264,184
3888,1844882,1844987,1845204,1845212,1845261,1845408,1845555,1845577,1846299,1846403,1846406,1846704,1847181-1847182,1847188,1847264,1847572,1847596,1847598,1847697,1847922,1847924,1847946,1850348,1850621,1851676,1851687,1851791,1853761,1863262
+/subversion/trunk:1817837,1817856,1818577-1818578,1818584,1818651,1818662,1818727,1818801,1818803,1818807,1818868,1818871,1819036-1819037,1819043,1819049,1819052,1819093,1819146,1819162,1819444,1819556-1819557,1819603,1819804,1819911,1820044,1820046-1820047,1820518,1820627,1820718,1820778,1821183,1821224,1821621,1821678,1822401,1822587,1822591,1822996,1823202-1823203,1823211,1823327,1823791,1823966,1823989,1824033,1825024,1825045,1825215,1825266,1825306,1825709,1825711,1825721,1825736,1825778,1825783,1825787-1825788,1825979,1826720-1826721,1826747,1826811,1826814,1826877,1826907,1826971,1827105,1827114,1827191,1827562,1827574,1827670,1828613,1829012,1829015,1829241,1829260,1829344,1830083,1830882-1830883,1830885,1830900-1830901,1831110,1831112,1831540,1833465,1833621,1833836,1833842,1833864,1833866,1833895,1833897,1833899,1833901,1835760,1836306,1836762,1836802,1836960,1836963,1836968,1836976,1837037,1837790,1838813,1839662,1839703,1839734,1839739,1840991,1842260,1842262,1842264,184
3888,1844882,1844987,1845204,1845212,1845261,1845408,1845555,1845577,1846299,1846403,1846406,1846704,1847181-1847182,1847188,1847264,1847572,1847596,1847598,1847697,1847922,1847924,1847946,1850348,1850621,1850651,1851676,1851687,1851791,1853761,1863262
Modified: subversion/branches/1.10.x/STATUS
URL: http://svn.apache.org/viewvc/subversion/branches/1.10.x/STATUS?rev=1863292&r1=1863291&r2=1863292&view=diff
==============================================================================
--- subversion/branches/1.10.x/STATUS (original)
+++ subversion/branches/1.10.x/STATUS Thu Jul 18 13:37:25 2019
@@ -21,14 +21,6 @@ Veto-blocked changes:
Approved changes:
=================
- * r1850651
- Fix a use-after-free in mod_dav_svn's logging of FS warnings.
- Justification:
- Lots of crashes on OpenBSD during 'make check' with HTTPD 2.4.
- See https://svn.haxx.se/dev/archive-2018-12/0137.shtml
- Votes:
- +1: stsp, brane
-
* r1851920
Remove a useless common ancestor search from the conflict resolver.
Justification:
Modified: subversion/branches/1.10.x/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.10.x/subversion/mod_dav_svn/repos.c?rev=1863292&r1=1863291&r2=1863292&view=diff
==============================================================================
--- subversion/branches/1.10.x/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/1.10.x/subversion/mod_dav_svn/repos.c Thu Jul 18 13:37:25 2019
@@ -1225,25 +1225,32 @@ create_private_resource(const dav_resour
return &comb->res;
}
-
-static void log_warning(void *baton, svn_error_t *err)
+static void log_warning_req(void *baton, svn_error_t *err)
{
request_rec *r = baton;
const char *continuation = "";
- /* ### hmm. the FS is cleaned up at request cleanup time. "r" might
- ### not really be valid. we should probably put the FS into a
- ### subpool to ensure it gets cleaned before the request.
+ /* Not showing file/line so no point in tracing */
+ err = svn_error_purge_tracing(err);
+ while (err)
+ {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r, "%s%s",
+ continuation, err->message);
+ continuation = "-";
+ err = err->child;
+ }
+}
- ### is there a good way to create and use a subpool for all
- ### of our functions ... ??
- */
+static void log_warning_conn(void *baton, svn_error_t *err)
+{
+ conn_rec *c = baton;
+ const char *continuation = "";
/* Not showing file/line so no point in tracing */
err = svn_error_purge_tracing(err);
while (err)
{
- ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r, "%s%s",
+ ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, c, "%s%s",
continuation, err->message);
continuation = "-";
err = err->child;
@@ -1547,6 +1554,24 @@ cleanup_fs_access(void *data)
return APR_SUCCESS;
}
+/* Context for cleanup handler. */
+struct cleanup_req_logging_baton
+{
+ svn_fs_t *fs;
+ conn_rec *connection;
+};
+
+static apr_status_t
+cleanup_req_logging(void *data)
+{
+ struct cleanup_req_logging_baton *baton = data;
+
+ /* The request about to be freed. Log future warnings with a connection
+ * context instead of a request context. */
+ svn_fs_set_warning_func(baton->fs, log_warning_conn, baton->connection);
+
+ return APR_SUCCESS;
+}
/* Helper func to construct a special 'parentpath' private resource. */
static dav_error *
@@ -2180,6 +2205,7 @@ get_resource(request_rec *r,
int had_slash;
dav_locktoken_list *ltl;
struct cleanup_fs_access_baton *cleanup_baton;
+ struct cleanup_req_logging_baton *cleanup_req_logging_baton;
void *userdata;
apr_hash_t *fs_config;
@@ -2486,7 +2512,7 @@ get_resource(request_rec *r,
repos->fs = svn_repos_fs(repos->repos);
/* capture warnings during cleanup of the FS */
- svn_fs_set_warning_func(repos->fs, log_warning, r);
+ svn_fs_set_warning_func(repos->fs, log_warning_req, r);
/* if an authenticated username is present, attach it to the FS */
if (r->user)
@@ -2503,6 +2529,14 @@ get_resource(request_rec *r,
apr_pool_cleanup_register(r->pool, cleanup_baton, cleanup_fs_access,
apr_pool_cleanup_null);
+ /* We must degrade the logging context when the request is freed. */
+ cleanup_req_logging_baton =
+ apr_pcalloc(r->pool, sizeof(*cleanup_req_logging_baton));
+ cleanup_req_logging_baton->fs = repos->fs;
+ cleanup_req_logging_baton->connection = r->connection;
+ apr_pool_pre_cleanup_register(r->pool, cleanup_req_logging_baton,
+ cleanup_req_logging);
+
/* Create an access context based on the authenticated username. */
serr = svn_fs_create_access(&access_ctx, r->user, r->pool);
if (serr)