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

Aleksei Nikiforov darktemplar на altlinux.org
Пт Окт 25 10:23:00 MSK 2019


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.

Конец цитаты.


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