[devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74

Ivan Zakharyaschev imz на altlinux.org
Вт Окт 22 19:52:08 MSK 2019


On Tue, 22 Oct 2019, Dmitry V. Levin wrote:

> On Tue, Oct 22, 2019 at 03:28:40PM +0300, Anton Farygin wrote:
> > On 22.10.2019 11:32, Dmitry V. Levin wrote:
> > > On Tue, Oct 22, 2019 at 03:01:16AM +0300, Michael Shigorin wrote:
> > >> On Tue, Oct 22, 2019 at 02:42:06AM +0300, Dmitry V. Levin wrote:
> > >>> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote:
> > >>>> Update of /people/darktemplar/packages/apt.git
> > >>>>      0.5.15lorg2-alt74
> > >>>>      - Added debugging output for allocation functions.
> > >>>>      - Fixed dynamic memory allocation pointer arithmetics issue.
> > >>> Жаль, что вы не дождались первого апреля, но всё равно спасибо,
> > >>> шутка получилась отличная.
> > >> В смысле про fixed?
> > > Именно.
> > >
> > > Этот патч увеличивает расход оперативной памяти apt'ом в среднем в полтора
> > > раза, но не исправляет UB с арифметикой указателей, поскольку MMap::Base
> > > как был невыровненным, так и остался невыровненным.  В отличие от Debian,
> > > между прочим, где по умолчанию MMap::Base выровнен на начало страницы.
> > >
> > Я не вижу разницы в адресе MMap::Base на Debian и у нас - в обоих 
> > случаях он выровнен на начало страницы.
> 
> У Алексея:
> 
>       void *tmp_base = realloc(Base, newSize);
> 
>       if (debug_grow)
>          _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == n
> 
>       if (tmp_base == NULL)
>          return false;
> 
>       Base = tmp_base;

Если не ошибаюсь, realloc используется только в особых случаях (когда в 
файл не можем писать, например, когда не-root).

Проблема с попорченными адресами на e2k проявлялась одинаково и при 
использовании mremap, и при realloc.

Может быть, есть какая-то разница с Debian в первоначальной аллокации, но 
в той части, где делаются последующие mremap, нет, насколько я понимаю.

> В Debian по умолчанию:
> 
>    #ifdef MREMAP_MAYMOVE
> 
>                 if ((Flags & Moveable) == Moveable)
>                         Base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE);
>                 else
>    #endif
>                         Base = mremap(Base, WorkSpace, newSize, 0);
> 
>                 if(Base == MAP_FAILED)
>                         return false;
> 
> Всё ещё не видно разницы?
> 
> 
> -- 
> ldv
> 


Подробная информация о списке рассылки Devel