]> git.kaiwu.me - nginx.git/commitdiff
Cache: fixed minimum cache keys zone size limit.
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 31 Oct 2018 13:49:39 +0000 (16:49 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 31 Oct 2018 13:49:39 +0000 (16:49 +0300)
Size of a shared memory zones must be at least two pages - one page
for slab allocator internal data, and another page for actual allocations.
Using 8192 instead is wrong, as there are systems with page sizes other
than 4096.

Note well that two pages is usually too low as well.  In particular, cache
is likely to use two allocations of different sizes for global structures,
and at least four pages will be needed to properly allocate cache nodes.
Except in a few very special cases, with keys zone of just two pages nginx
won't be able to start.  Other uses of shared memory impose a limit
of 8 pages, which provides some room for global allocations.  This patch
doesn't try to address this though.

Inspired by ticket #1665.

src/http/ngx_http_file_cache.c

index 330833df6a3a5406921066155b54d3851e86f1f3..2cf1ce4a9c82d4af49bbdc9575327b44a9d7112d 100644 (file)
@@ -2427,7 +2427,7 @@ ngx_http_file_cache_set_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
                 s.data = p;
 
                 size = ngx_parse_size(&s);
-                if (size > 8191) {
+                if (size >= (ssize_t) (2 * ngx_pagesize)) {
                     continue;
                 }
             }