From f79fb14dbb54ea89ec84bc202f47d1ef83b1d0ac Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Tue, 16 Dec 2025 16:05:10 +0000 Subject: [PATCH 1/2] mod_file_cache: Fix crashes for mmap'ed files under threaded MPM. * modules/cache/mod_file_cache.c (mmap_handler): fix file getting unmapped erroneously when server is under load in multi-thread multi-core configuration PR: 69901 Submitted by: barr.israel Github: closes #582 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1930632 13f79535-47bb-0310-9956-ffa450edef68 (cherry picked from commit 59c3f0e23106c70de8085d0404cd266486de8fd9) --- changes-entries/pr69901.txt | 3 +++ modules/cache/mod_file_cache.c | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 changes-entries/pr69901.txt diff --git a/changes-entries/pr69901.txt b/changes-entries/pr69901.txt new file mode 100644 index 00000000000..4b80e5c9727 --- /dev/null +++ b/changes-entries/pr69901.txt @@ -0,0 +1,3 @@ + *) mod_file_cache: Fix crashes for mmap'ed files under threaded + MPMs. PR 69901. barr.israel + diff --git a/modules/cache/mod_file_cache.c b/modules/cache/mod_file_cache.c index ce1db2d2c93..51a53a7509c 100644 --- a/modules/cache/mod_file_cache.c +++ b/modules/cache/mod_file_cache.c @@ -275,9 +275,8 @@ static int mmap_handler(request_rec *r, a_file *file) apr_mmap_t *mm; apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc); - apr_mmap_dup(&mm, file->mm, r->pool); - b = apr_bucket_mmap_create(mm, 0, (apr_size_t)file->finfo.size, - c->bucket_alloc); + b = apr_bucket_immortal_create((const char *)file->mm->mm, + (apr_size_t)file->finfo.size, c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); b = apr_bucket_eos_create(c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); From 0d9bc58ca47dcb2474c87007a8b114b0c3a3e99c Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Tue, 16 Dec 2025 16:11:24 +0000 Subject: [PATCH 2/2] Follow up to r1930632 - * modules/cache/mod_file_cache.c (mmap_handler): Remove unused variable. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1930633 13f79535-47bb-0310-9956-ffa450edef68 (cherry picked from commit efd77789fccf65cf37c4f940b3637aac7b5e27d9) --- modules/cache/mod_file_cache.c | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/cache/mod_file_cache.c b/modules/cache/mod_file_cache.c index 51a53a7509c..40781429636 100644 --- a/modules/cache/mod_file_cache.c +++ b/modules/cache/mod_file_cache.c @@ -272,7 +272,6 @@ static int mmap_handler(request_rec *r, a_file *file) #if APR_HAS_MMAP conn_rec *c = r->connection; apr_bucket *b; - apr_mmap_t *mm; apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc); b = apr_bucket_immortal_create((const char *)file->mm->mm,