Hello,, AFAIK, the patch attached here : http://mailman.nginx.org/pipermail/nginx-devel/2013-December/004721.html compile, and should work on 1.6 too.
Maybe the merge is a bit tricky with the last changes made on ngx_slab.c I have a up-to-date version on my patch queue. as Maxim stated, it still needs a functional rework . http://mailman.nginx.org/pipermail/nginx-devel/2013-October/004337.html Best, Filipe 2014-04-25 21:47 GMT+02:00 John Watson <j...@disqus.com>: > Hi Maxim, > > Any chance you can fix up this patch and get it into 1.7? > > This patch is not compatible with 1.6. > > Best, > > John > > On Wed, Jan 22, 2014 at 8:51 AM, Maxim Dounin <mdou...@mdounin.ru> wrote: >> Hello! >> >> On Wed, Jan 22, 2014 at 01:39:54AM -0200, Wandenberg Peixoto wrote: >> >>> Hello Maxim, >>> >>> did you have opportunity to take a look on this last patch? >> >> It looks more or less correct, though I don't happy with the >> checks done, and there are various style issues. I'm planning to >> look into it and build a better version as time permits. >> >>> >>> >>> Regards, >>> Wandenberg >>> >>> >>> On Thu, Dec 26, 2013 at 10:12 PM, Wandenberg Peixoto >>> <wandenb...@gmail.com>wrote: >>> >>> > Hello Maxim, >>> > >>> > I changed the patch to check only the p->next pointer. >>> > And checking if the page is in an address less than the (pool->pages + >>> > pages). >>> > >>> > + ngx_slab_page_t *prev, *p; >>> > + ngx_uint_t pages; >>> > + size_t size; >>> > + >>> > + size = pool->end - (u_char *) pool - sizeof(ngx_slab_pool_t); >>> > + pages = (ngx_uint_t) (size / (ngx_pagesize + >>> > sizeof(ngx_slab_page_t))); >>> > + >>> > + p = &page[page->slab]; >>> > + >>> > + if ((p < pool->pages + pages) && >>> > + (p->next != NULL) && >>> > + ((p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)) { >>> > >>> > >>> > I hope that now I did the right checks. >>> > >>> > Regards, >>> > Wandenberg >>> > >>> > >>> > On Fri, Dec 20, 2013 at 2:49 PM, Maxim Dounin <mdou...@mdounin.ru> wrote: >>> > >>> >> Hello! >>> >> >>> >> On Tue, Dec 17, 2013 at 09:05:16PM -0200, Wandenberg Peixoto wrote: >>> >> >>> >> > Hi Maxim, >>> >> > >>> >> > sorry for the long delay. I hope you remember my issue. >>> >> > In attach is the new patch with the changes you suggest. >>> >> > Can you check it again? I hope it can be applied to nginx code now. >>> >> > >>> >> > About this point "2. There is probably no need to check both prev and >>> >> > next.", >>> >> > I check both pointers to avoid a segmentation fault, since in some >>> >> > situations the next can be NULL and the prev may point to pool->free. >>> >> > As far as I could follow the code seems to me that could happen one of >>> >> this >>> >> > pointers, next or prev, point to a NULL. >>> >> > I just made a double check to protect. >>> >> >>> >> As far as I see, all pages in the pool->free list are expected to >>> >> have both p->prev and p->next set. And all pages with type >>> >> NGX_SLAB_PAGE will be either on the pool->free list, or will have >>> >> p->next set to NULL. >>> >> >>> >> [...] >>> >> >>> >> > > > +{ >>> >> > > > + ngx_slab_page_t *neighbour = &page[page->slab]; >>> >> > > >>> >> > > Here "neighbour" may point outside of the allocated page >>> >> > > structures if we are freeing the last page in the pool. >>> >> >>> >> It looks like you've tried to address this problem with the >>> >> following check: >>> >> >>> >> > +static ngx_int_t >>> >> > +ngx_slab_merge_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page) >>> >> > +{ >>> >> > + ngx_slab_page_t *prev, *p; >>> >> > + >>> >> > + p = &page[page->slab]; >>> >> > + if ((u_char *) p >= pool->end) { >>> >> > + return NGX_DECLINED; >>> >> > + } >>> >> >>> >> This looks wrong, as pool->end points to the end of the pool, not >>> >> the end of allocated page structures. >>> >> >>> >> -- >>> >> Maxim Dounin >>> >> http://nginx.org/ >>> >> >>> >> _______________________________________________ >>> >> nginx-devel mailing list >>> >> nginx-devel@nginx.org >>> >> http://mailman.nginx.org/mailman/listinfo/nginx-devel >>> >> >>> > >>> > >> >>> _______________________________________________ >>> nginx-devel mailing list >>> nginx-devel@nginx.org >>> http://mailman.nginx.org/mailman/listinfo/nginx-devel >> >> >> -- >> Maxim Dounin >> http://nginx.org/ >> >> _______________________________________________ >> nginx-devel mailing list >> nginx-devel@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-devel > > _______________________________________________ > nginx-devel mailing list > nginx-devel@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel