[Varnish] #962: Persistent storage don't work on Linux with Address space layout randomization

Varnish varnish-bugs at varnish-cache.org
Fri Jul 15 13:02:25 CEST 2011


#962: Persistent storage don't work on Linux with Address space layout
randomization
---------------------+------------------------------------------------------
 Reporter:  pmialon  |        Type:  defect
   Status:  new      |    Priority:  normal
Milestone:           |   Component:  build 
  Version:  3.0.0    |    Severity:  normal
 Keywords:           |  
---------------------+------------------------------------------------------
 Debian Squeeze, Fedora 15 and RHEL 6 uses Adress space layout
 randomization by default:

 {{{
 # sysctl kernel.randomize_va_space
 kernel.randomize_va_space = 2
 }}}

 This breaks persistent storage:
 {{{
 # varnishd -d -a :80 -f /etc/varnish/default.vcl -s
 persistent,/var/lib/varnish/instance/A.shm,10M
 ...
 CHK(0x7fbfcc1330a0 SILO 0x7fbfcb0e1000 SILO) = 3
 ...
 Platform: Linux,2.6.32-5-amd64,x86_64,-spersistent,-smalloc,-hcritbit
 ...
 }}}
 By disabling ASLR (sysctl kernel.randomize_va_space=0), it works again.
 In source:bin/varnishd/storage_persistent_mgt.c, smp_mgt_init():
 {{{
 sc->base = mmap(NULL, sc->mediasize, PROT_READ|PROT_WRITE,
  MAP_NOCORE | MAP_NOSYNC | MAP_SHARED, sc->fd, 0);
 ...
 smp_def_sign(sc, &sc->idn, 0, "SILO");
 ...
 i = smp_valid_silo(sc);
 }}}
 mmap(2) may return a random address. This address is stored in sc->idn->ss
 and written to the mmap()'d file in smp_reset_sign():
 {{{
 ctx->ss->mapped = (uintptr_t)ctx->ss;
 }}}
 This is ok with the very first run because the file is created and the
 mmap address stored. But with following run, smp_valid_silo() calls
 smp_chk_sign() (source:bin/varnishd/storage_persistent_subr.c) which
 compares addresses from mmap(2) and the file:
 {{{
 if ((uintptr_t)ctx->ss != ctx->ss->mapped)
  r = 3
 }}}
 This causes the silo to be reset.

-- 
Ticket URL: <http://www.varnish-cache.org/trac/ticket/962>
Varnish <http://varnish-cache.org/>
The Varnish HTTP Accelerator




More information about the varnish-bugs mailing list