From: Aleksei Nikiforov <darktemplar@altlinux.org> To: devel@lists.altlinux.org Subject: Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Date: Thu, 24 Oct 2019 16:59:13 +0300 Message-ID: <7d37cd6b-6410-80b7-0c7f-d5706d88f4fb@altlinux.org> (raw) In-Reply-To: <20191022153259.GA1096@altlinux.org> 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 продемонстрировать. Все практические тесты демонстрируют исправление данной проблемы с указателями. Код из 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); }
next prev parent reply other threads:[~2019-10-24 13:59 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 [this message] 2019-10-24 15:10 ` Andrey Savchenko 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=7d37cd6b-6410-80b7-0c7f-d5706d88f4fb@altlinux.org \ --to=darktemplar@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