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 >