Hi Denys,

On Tue, Nov 25, 2014 at 10:06:54PM +0200, Denys Fedoryshchenko wrote:
> Hi
> 
> It seems after adding rules:
> 
>        acl youtubedst dst 173.194.40.0/24 173.194.41.0/24
>        acl youtube req_ssl_sni -m end googlevideos.com googlevideo.com 
> gvt1.com youtube.com
>        tcp-request connection reject if youtube
>        tcp-request connection reject if youtubedst
> 
> To frontend, i experienced segfault. gdb details follows:
> 
> #0  smp_fetch_ssl_hello_sni (px=0x6eae90, s=0x707c30, l7=0x0, 
> opt=<optimized out>, args=0x6aae40 <empty_arg_list>, smp=0x7fffb5515a50, 
> kw=0x48cef7 "req.ssl_sni") at src/payload.c:279
> 279             bleft = chn->buf->i;
> (gdb) print chn->buf
> Cannot access memory at address 0x8
> (gdb) print chn
> $1 = (struct channel *) 0x0
> (gdb)
> 
> Adding
> chn = ((opt & SMP_OPT_DIR) == SMP_OPT_DIR_RES) ? s->rep : s->req;
> 
> +if (!chn)
> +    return 0;
> 
> Helped for me.

A test is missing in this function to ensure that buffers are allocated,
I'll take a look at it. In your case the problem is that you're using
a content-based sample fetch at the connection layer, so such information
are not available. You can use this fetch in "tcp-request content" rules
however. Didn't you get a warning when it started ?

Thanks for the report!
Willy


Reply via email to