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 */