[PATCH] Lock panic buffer before mangling it

Poul-Henning Kamp phk at phk.freebsd.dk
Fri Aug 19 18:46:47 CEST 2011


In message <1313759878-7836-1-git-send-email-tfheen at varnish-software.com>, Toll
ef Fog Heen writes:

Go for it...


>If we were panic-ing in multiple threads at the same time, the panic
>buffer would be partially overwritten.  Prevent this with a mutex
>---
> bin/varnishd/cache_panic.c  |    5 +++++
> bin/varnishd/cache_shmlog.c |    2 +-
> 2 files changed, 6 insertions(+), 1 deletions(-)
>
>diff --git a/bin/varnishd/cache_panic.c b/bin/varnishd/cache_panic.c
>index c443b67..9279029 100644
>--- a/bin/varnishd/cache_panic.c
>+++ b/bin/varnishd/cache_panic.c
>@@ -34,6 +34,7 @@
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
>+#include <pthread.h>
> 
> #ifndef HAVE_EXECINFO_H
> #include "compat/execinfo.h"
>@@ -56,6 +57,7 @@
>  */
> 
> static struct vsb vsps, *vsp;
>+pthread_mutex_t panicstr_mtx = PTHREAD_MUTEX_INITIALIZER;
> 
> /*--------------------------------------------------------------------*/
> 
>@@ -294,6 +296,9 @@ pan_ic(const char *func, const char *file, int line, const char *cond,
> 	const char *q;
> 	const struct sess *sp;
> 
>+	AZ(pthread_mutex_lock(&panicstr_mtx)); /* Won't be released,
>+						  we're going to die
>+						  anyway */
> 	switch(xxx) {
> 	case 3:
> 		VSB_printf(vsp,
>diff --git a/bin/varnishd/cache_shmlog.c b/bin/varnishd/cache_shmlog.c
>index e0b332d..023c20a 100644
>--- a/bin/varnishd/cache_shmlog.c
>+++ b/bin/varnishd/cache_shmlog.c
>@@ -288,7 +288,7 @@ VSL_Init(void)
> 
> 	vsl_wrap();
> 	VSM_head->starttime = (intmax_t)TIM_real();
>-	VSM_head->panicstr[0] = '\0';
>+	memset(VSM_head->panicstr, '\0', sizeof *VSM_head->panicstr);
> 	memset(VSC_C_main, 0, sizeof *VSC_C_main);
> 	VSM_head->child_pid = getpid();
> }
>-- 
>1.7.5.4
>
>
>_______________________________________________
>varnish-dev mailing list
>varnish-dev at varnish-cache.org
>https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
>

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.




More information about the varnish-dev mailing list