ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Andrey Savchenko <bircoph@altlinux.org>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
Date: Thu, 24 Oct 2019 18:10:12 +0300
Message-ID: <20191024181012.5bce1667504871bc6cdc367a@altlinux.org> (raw)
In-Reply-To: <7d37cd6b-6410-80b7-0c7f-d5706d88f4fb@altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 6272 bytes --]

On Thu, 24 Oct 2019 16:59:13 +0300 Aleksei Nikiforov wrote:
> 22.10.2019 18:32, Dmitry V. Levin пишет:
> > 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 выровнен на начало страницы.
> >>>
> 
> Спасибо, тоже поржал над этим анализом кода.
> 
> Да, патч увеличивает расход памяти. В полтора раза звучит страшно, и не 
> соответствует действительности. Прошу UB продемонстрировать.

UB не обязательно демонстрировать. Если по стандарту языка
происходит UB, то это не значит, что оно будет происходить
в конкретной реализации, но это значит, что оно может произойти где
и когда угодно: другой компилятор, другая версия, другая фаза луны.

Тот факт, что из-за сложения ошибок произошла корректная работа не
означает, что ошибок нет.

> Все 
> практические тесты демонстрируют исправление данной проблемы с 
> указателями. Код из Debian смотрел, возможно, я что-то пропустил, но где 
> там разница между их реализацией MMap::Base и моей, которая исправляла 
> бы данную проблему? Было бы замечательно, если бы это исправление из 
> Debian было продемонстрировано на e2k с apt из ALT.
> 
> >> Я не вижу разницы в адресе 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;
> > 
> > Всё ещё не видно разницы?
> > 
> 
> Предлагаю посмотреть внимательнее. Вот мой код:
> 
>     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);
> 	}
> _______________________________________________
> Devel mailing list
> Devel@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/devel

Best regards,
Andrew Savchenko

[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2019-10-24 15:10 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-21 23:42 ` Dmitry V. Levin
2019-10-22  0:01   ` Michael Shigorin
2019-10-22  8:32     ` Dmitry V. Levin
2019-10-22 12:28       ` Anton Farygin
2019-10-22 12:46         ` Anton Farygin
2019-10-22 15:32         ` Dmitry V. Levin
2019-10-22 15:51           ` Anton Farygin
2019-10-22 16:52           ` Ivan Zakharyaschev
2019-10-24 13:59           ` Aleksei Nikiforov
2019-10-24 15:10             ` Andrey Savchenko [this message]
2019-10-24 15:29               ` Aleksei Nikiforov
2019-10-24 15:50                 ` Andrey Savchenko
2019-10-24 16:01                   ` Aleksei Nikiforov
2019-10-24 16:54                     ` Andrey Savchenko
2019-10-25  7:23                       ` Aleksei Nikiforov
2019-10-22  4:06   ` Anton Farygin
2019-10-22 15:35     ` Alexey Tourbin
2019-10-23 12:46       ` Dmitry V. Levin
2019-10-24 13:58       ` Aleksei Nikiforov
2019-10-24 15:20   ` Ivan Zakharyaschev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191024181012.5bce1667504871bc6cdc367a@altlinux.org \
    --to=bircoph@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git