Skip to content

Commit

Permalink
nginx: update latest release
Browse files Browse the repository at this point in the history
It fixes CVE-2017-7529.
  • Loading branch information
kenhys committed Jul 17, 2017
1 parent 8e5cf24 commit 2f28a3f
Show file tree
Hide file tree
Showing 444 changed files with 170 additions and 204 deletions.
2 changes: 1 addition & 1 deletion nginx_version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.13.2
1.13.3
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,26 @@
<change_log title="nginx">


<changes ver="1.13.3" date="2017-07-11">

<change type="security">
<para lang="ru">
специально созданный запрос мог вызвать целочисленное переполнение
в range-фильтре и последующую некорректную обработку запрошенных диапазонов,
что потенциально могло привести к утечке конфиденциальной информации
(CVE-2017-7529).
</para>
<para lang="en">
a specially crafted request might result in an integer overflow
and incorrect processing of ranges in the range filter,
potentially resulting in sensitive information leak
(CVE-2017-7529).
</para>
</change>

</changes>


<changes ver="1.13.2" date="2017-06-27">

<change type="change">
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#define _NGINX_H_INCLUDED_


#define nginx_version 1013002
#define NGINX_VERSION "1.13.2"
#define nginx_version 1013003
#define NGINX_VERSION "1.13.3"
#define NGINX_VER "nginx/" NGINX_VERSION

#ifdef NGX_BUILD
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ static void ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp,
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
static ngx_int_t ngx_resolver_copy(ngx_resolver_t *r, ngx_str_t *name,
u_char *buf, u_char *src, u_char *last);
static ngx_int_t ngx_resolver_set_timeout(ngx_resolver_t *r,
ngx_resolver_ctx_t *ctx);
static void ngx_resolver_timeout_handler(ngx_event_t *ev);
static void ngx_resolver_free_node(ngx_resolver_t *r, ngx_resolver_node_t *rn);
static void *ngx_resolver_alloc(ngx_resolver_t *r, size_t size);
Expand Down Expand Up @@ -189,6 +191,7 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
r->event->handler = ngx_resolver_resend_handler;
r->event->data = r;
r->event->log = &cf->cycle->new_log;
r->event->cancelable = 1;
r->ident = -1;

r->resend_timeout = 5;
Expand Down Expand Up @@ -728,19 +731,8 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx,
}

if (rn->waiting) {

if (ctx->event == NULL && ctx->timeout) {
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
if (ctx->event == NULL) {
return NGX_ERROR;
}

ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = ctx;
ctx->event->log = r->log;
ctx->ident = -1;

ngx_add_timer(ctx->event, ctx->timeout);
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
return NGX_ERROR;
}

last->next = rn->waiting;
Expand Down Expand Up @@ -864,18 +856,8 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx,
goto failed;
}

if (ctx->event == NULL && ctx->timeout) {
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
if (ctx->event == NULL) {
goto failed;
}

ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = ctx;
ctx->event->log = r->log;
ctx->ident = -1;

ngx_add_timer(ctx->event, ctx->timeout);
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
goto failed;
}

if (ngx_resolver_resend_empty(r)) {
Expand Down Expand Up @@ -1007,19 +989,8 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
}

if (rn->waiting) {

if (ctx->event == NULL && ctx->timeout) {
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
if (ctx->event == NULL) {
return NGX_ERROR;
}

ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = ctx;
ctx->event->log = r->log;
ctx->ident = -1;

ngx_add_timer(ctx->event, ctx->timeout);
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
return NGX_ERROR;
}

ctx->next = rn->waiting;
Expand Down Expand Up @@ -1089,18 +1060,8 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
goto failed;
}

if (ctx->event == NULL && ctx->timeout) {
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
if (ctx->event == NULL) {
goto failed;
}

ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = ctx;
ctx->event->log = r->log;
ctx->ident = -1;

ngx_add_timer(ctx->event, ctx->timeout);
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
goto failed;
}

if (ngx_resolver_resend_empty(r)) {
Expand Down Expand Up @@ -3034,25 +2995,15 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)

addrs = ngx_resolver_calloc(r, cctx->naddrs * sizeof(ngx_addr_t));
if (addrs == NULL) {
ngx_resolve_name_done(cctx);

ctx->state = NGX_ERROR;
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);

ctx->handler(ctx);
return;
srv->state = NGX_ERROR;
goto done;
}

sockaddr = ngx_resolver_alloc(r, cctx->naddrs * sizeof(ngx_sockaddr_t));
if (sockaddr == NULL) {
ngx_resolver_free(r, addrs);
ngx_resolve_name_done(cctx);

ctx->state = NGX_ERROR;
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);

ctx->handler(ctx);
return;
srv->state = NGX_ERROR;
goto done;
}

for (i = 0; i < cctx->naddrs; i++) {
Expand All @@ -3069,6 +3020,8 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)
srv->naddrs = cctx->naddrs;
}

done:

ngx_resolve_name_done(cctx);

if (ctx->count == 0) {
Expand Down Expand Up @@ -4041,6 +3994,30 @@ ngx_resolver_copy(ngx_resolver_t *r, ngx_str_t *name, u_char *buf, u_char *src,
}


static ngx_int_t
ngx_resolver_set_timeout(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
{
if (ctx->event || ctx->timeout == 0) {
return NGX_OK;
}

ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
if (ctx->event == NULL) {
return NGX_ERROR;
}

ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = ctx;
ctx->event->log = r->log;
ctx->event->cancelable = ctx->cancelable;
ctx->ident = -1;

ngx_add_timer(ctx->event, ctx->timeout);

return NGX_OK;
}


static void
ngx_resolver_timeout_handler(ngx_event_t *ev)
{
Expand Down Expand Up @@ -4254,10 +4231,21 @@ ngx_resolver_report_srv(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
ngx_resolver_addr_t *addrs;
ngx_resolver_srv_name_t *srvs;

srvs = ctx->srvs;
nsrvs = ctx->nsrvs;

naddrs = 0;

for (i = 0; i < ctx->nsrvs; i++) {
naddrs += ctx->srvs[i].naddrs;
for (i = 0; i < nsrvs; i++) {
if (srvs[i].state == NGX_ERROR) {
ctx->state = NGX_ERROR;
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);

ctx->handler(ctx);
return;
}

naddrs += srvs[i].naddrs;
}

if (naddrs == 0) {
Expand All @@ -4277,9 +4265,6 @@ ngx_resolver_report_srv(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
return;
}

srvs = ctx->srvs;
nsrvs = ctx->nsrvs;

i = 0;
n = 0;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ struct ngx_resolver_ctx_s {

unsigned quick:1;
unsigned async:1;
unsigned cancelable:1;
ngx_uint_t recursion;
ngx_event_t *event;
};
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ void *
ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
{
size_t s;
uintptr_t p, n, m, mask, *bitmap;
ngx_uint_t i, slot, shift, map;
uintptr_t p, m, mask, *bitmap;
ngx_uint_t i, n, slot, shift, map;
ngx_slab_page_t *page, *prev, *slots;

if (size > ngx_slab_max_size) {
Expand Down Expand Up @@ -226,7 +226,7 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)

bitmap = (uintptr_t *) ngx_slab_page_addr(pool, page);

map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));

for (n = 0; n < map; n++) {

Expand All @@ -239,7 +239,7 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)

bitmap[n] |= m;

i = (n * sizeof(uintptr_t) * 8 + i) << shift;
i = (n * 8 * sizeof(uintptr_t) + i) << shift;

p = (uintptr_t) bitmap + i;

Expand Down Expand Up @@ -339,11 +339,17 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
}

/* "n" elements for bitmap, plus one requested */
bitmap[0] = ((uintptr_t) 2 << n) - 1;

map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
for (i = 0; i < (n + 1) / (8 * sizeof(uintptr_t)); i++) {
bitmap[i] = NGX_SLAB_BUSY;
}

m = ((uintptr_t) 1 << ((n + 1) % (8 * sizeof(uintptr_t)))) - 1;
bitmap[i] = m;

for (i = 1; i < map; i++) {
map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));

for (i = i + 1; i < map; i++) {
bitmap[i] = 0;
}

Expand All @@ -369,7 +375,7 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)

slots[slot].next = page;

pool->stats[slot].total += sizeof(uintptr_t) * 8;
pool->stats[slot].total += 8 * sizeof(uintptr_t);

p = ngx_slab_page_addr(pool, page);

Expand Down Expand Up @@ -480,8 +486,8 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)
}

n = ((uintptr_t) p & (ngx_pagesize - 1)) >> shift;
m = (uintptr_t) 1 << (n % (sizeof(uintptr_t) * 8));
n /= sizeof(uintptr_t) * 8;
m = (uintptr_t) 1 << (n % (8 * sizeof(uintptr_t)));
n /= 8 * sizeof(uintptr_t);
bitmap = (uintptr_t *)
((uintptr_t) p & ~((uintptr_t) ngx_pagesize - 1));

Expand All @@ -506,13 +512,16 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)
n = 1;
}

if (bitmap[0] & ~(((uintptr_t) 1 << n) - 1)) {
i = n / (8 * sizeof(uintptr_t));
m = ((uintptr_t) 1 << (n % (8 * sizeof(uintptr_t)))) - 1;

if (bitmap[i] & ~m) {
goto done;
}

map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));

for (i = 1; i < map; i++) {
for (i = i + 1; i < map; i++) {
if (bitmap[i]) {
goto done;
}
Expand Down Expand Up @@ -558,7 +567,7 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)

ngx_slab_free_pages(pool, page, 1);

pool->stats[slot].total -= sizeof(uintptr_t) * 8;
pool->stats[slot].total -= 8 * sizeof(uintptr_t);

goto done;
}
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 2f28a3f

Please sign in to comment.