From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.1 To: devel@lists.altlinux.org References: <20190917090515.3421584402D0@gitery.altlinux.org> <20191021234206.GA22520@altlinux.org> <20191022000116.GE28113@imap.altlinux.org> <20191022083258.GA28557@altlinux.org> <20191022153259.GA1096@altlinux.org> <7d37cd6b-6410-80b7-0c7f-d5706d88f4fb@altlinux.org> <20191024181012.5bce1667504871bc6cdc367a@altlinux.org> <4e38d389-944f-2c7f-9d93-3dc08fb39395@altlinux.org> <20191024185006.682e7469460029f23d818635@altlinux.org> <7bc022b5-52fb-a99c-4561-5c7bf551c6cd@altlinux.org> <20191024195417.2675b868736b9939c003880b@altlinux.org> From: Aleksei Nikiforov Message-ID: <0d4b342b-5219-d3f6-1efd-9407e78170a3@altlinux.org> Date: Fri, 25 Oct 2019 10:23:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20191024195417.2675b868736b9939c003880b@altlinux.org> Content-Type: text/plain; charset=koi8-r; format=flowed Content-Language: ru Content-Transfer-Encoding: 8bit Subject: Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Oct 2019 07:23:04 -0000 Archived-At: List-Archive: List-Post: 24.10.2019 19:54, Andrey Savchenko пишет: > On Thu, 24 Oct 2019 19:01:11 +0300 Aleksei Nikiforov wrote: >> 24.10.2019 18:50, Andrey Savchenko пишет: >>>> Да, но в таком случае как минимум можно указать на конкретный проблемный >>>> участок кода, который содержит UB, и в чём это UB заключается. Как и >>>> ошибки, которые складываются. >>> >>> Так ldv это и сделал в письме выше. >>> >> >> Я, наверно, в этом потоке сообщений где-то это пропустил. Как минимум >> ничего кроме общих слов не видел. Можешь повторить этот фрагмент, >> пожалуйста? > > https://lists.altlinux.org/pipermail/devel/2019-October/208756.html > >>> Этот патч увеличивает расход оперативной памяти 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; > > В 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; > > Всё ещё не видно разницы? > Как раз тот случай, когда был написан бред. https://lists.altlinux.org/pipermail/devel/2019-October/208777.html Далее цитирую: Предлагаю посмотреть внимательнее. Вот мой код: if (Fd != 0) { void *tmp_base = MAP_FAILED; #ifdef MREMAP_MAYMOVE if ((this->Flags & Moveable) == Moveable) tmp_base = mremap(Base, WorkSpace, newSize, MREMAP_MAYMOVE); else #endif tmp_base = mremap(Base, WorkSpace, newSize, 0); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: mremap from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == MAP_FAILED) ? _("Fail") : _("Success")); if (tmp_base == MAP_FAILED) return false; Base = tmp_base; } else { if ((this->Flags & Moveable) != Moveable) return false; void *tmp_base = realloc(Base, newSize); if (debug_grow) _error->Warning(_("DynamicMMap::Grow: realloc from %llu to %llu, result: %s"), WorkSpace, newSize, (tmp_base == nullptr) ? _("Fail") : _("Success")); if (tmp_base == NULL) return false; Base = tmp_base; /* Set new memory to 0 */ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); } А вот код из Debian: if ((Flags & Fallback) != Fallback) { #if defined(_POSIX_MAPPED_FILES) && defined(__linux__) #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; #else return false; #endif } else { if ((Flags & Moveable) != Moveable) return false; Base = realloc(Base, newSize); if (Base == NULL) return false; else /* Set new memory to 0 */ memset((char*)Base + WorkSpace, 0, newSize - WorkSpace); } Конец цитаты. Если думаешь что код работает не аналогично, предлагаю ещё тебе самостоятельно продебажить apt и убедиться в том, как ты не прав. Дополнительно процитирую Ивана: https://lists.altlinux.org/pipermail/devel/2019-October/208759.html Цитирую: Проблема с попорченными адресами на e2k проявлялась одинаково и при использовании mremap, и при realloc. Конец цитаты.