Mercurial > hg > nginx
comparison src/stream/ngx_stream_variables.c @ 7147:0800444254e8 stable-1.12
Fixed handling of unix sockets in $binary_remote_addr.
Previously, unix sockets were treated as AF_INET ones, and this may
result in buffer overread on Linux, where unbound unix sockets have
2-byte addresses.
Note that it is not correct to use just sun_path as a binary representation
for unix sockets. This will result in an empty string for unbound unix
sockets, and thus behaviour of limit_req and limit_conn will change when
switching from $remote_addr to $binary_remote_addr. As such, normal text
representation is used.
Reported by Stephan Dollberg.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 04 Oct 2017 21:19:42 +0300 |
parents | d2b2ff157da5 |
children |
comparison
equal
deleted
inserted
replaced
7146:5c25f01bbd52 | 7147:0800444254e8 |
---|---|
475 v->len = sizeof(struct in6_addr); | 475 v->len = sizeof(struct in6_addr); |
476 v->valid = 1; | 476 v->valid = 1; |
477 v->no_cacheable = 0; | 477 v->no_cacheable = 0; |
478 v->not_found = 0; | 478 v->not_found = 0; |
479 v->data = sin6->sin6_addr.s6_addr; | 479 v->data = sin6->sin6_addr.s6_addr; |
480 | |
481 break; | |
482 #endif | |
483 | |
484 #if (NGX_HAVE_UNIX_DOMAIN) | |
485 case AF_UNIX: | |
486 | |
487 v->len = s->connection->addr_text.len; | |
488 v->valid = 1; | |
489 v->no_cacheable = 0; | |
490 v->not_found = 0; | |
491 v->data = s->connection->addr_text.data; | |
480 | 492 |
481 break; | 493 break; |
482 #endif | 494 #endif |
483 | 495 |
484 default: /* AF_INET */ | 496 default: /* AF_INET */ |