* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
@ 2019-10-21 23:42 ` Dmitry V. Levin
2019-10-22 0:01 ` Michael Shigorin
` (2 more replies)
0 siblings, 3 replies; 20+ messages in thread
From: Dmitry V. Levin @ 2019-10-21 23:42 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 7373 bytes --]
On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote:
> Update of /people/darktemplar/packages/apt.git
>
> Changes statistics since common ancestor `0.5.15lorg2-alt73-1-gd6d78da' follows:
> apt.spec | 6 +++++-
> apt/apt-pkg/Makefile.am | 1 +
> apt/apt-pkg/contrib/mmap.cc | 3 ++-
> apt/apt-pkg/contrib/mmap.h | 3 ++-
> apt/apt-pkg/pkgcache.h | 15 ++++++++-------
> apt/apt-pkg/utils.h | 17 +++++++++++++++++
> 6 files changed, 35 insertions(+), 10 deletions(-)
>
> Changelog since common ancestor `0.5.15lorg2-alt73-1-gd6d78da' follows:
> commit 875442eb7b676dd7994415e9becc64d0f5511f59
> Author: Aleksei Nikiforov <darktemplar@altlinux>
> Date: Mon Sep 16 15:38:27 2019 +0300
>
> 0.5.15lorg2-alt74
>
> - Added debugging output for allocation functions.
> - Fixed dynamic memory allocation pointer arithmetics issue.
>
> commit 9e6dc9a082c2e4f1b420ff57734a782b358ce317
> Author: Aleksei Nikiforov <darktemplar@altlinux>
> Date: Mon Sep 16 15:37:00 2019 +0300
>
> Improve alignment of structures moved on memory reallocation
>
> This change should fix pointer arithmetic issues for e2k.
> Also use special ptrdiff_t type.
>
> Full diff since common ancestor `0.5.15lorg2-alt73-1-gd6d78da' follows:
> diff --git a/apt.spec b/apt.spec
> index 2143ce4..b7a2532 100644
> --- a/apt.spec
> +++ b/apt.spec
> @@ -1,6 +1,6 @@
> Name: apt
> Version: 0.5.15lorg2
> -Release: alt73
> +Release: alt74
>
> Summary: Debian's Advanced Packaging Tool with RPM support
> Summary(ru_RU.UTF-8): Debian APT - Усовершенствованное средство управления пакетами с поддержкой RPM
> @@ -320,6 +320,10 @@ unset RPM_PYTHON
> %_libdir/%name/methods/https
>
> %changelog
> +* Mon Sep 16 2019 Aleksei Nikiforov <darktemplar@altlinux> 0.5.15lorg2-alt74
> +- Added debugging output for allocation functions.
> +- Fixed dynamic memory allocation pointer arithmetics issue.
> +
> * Thu Sep 05 2019 Aleksei Nikiforov <darktemplar@altlinux> 0.5.15lorg2-alt73
> - Improved handling of ipv6 addresses (Closes: #34000).
> - Enabled url-decoding http_proxy env variable (thx to snejok@) (Closes: #37186).
> diff --git a/apt/apt-pkg/Makefile.am b/apt/apt-pkg/Makefile.am
> index 4c0d234..4461078 100644
> --- a/apt/apt-pkg/Makefile.am
> +++ b/apt/apt-pkg/Makefile.am
> @@ -105,6 +105,7 @@ libapt_pkg_la_SOURCES = \
> tagfile.h \
> update.cc \
> update.h \
> + utils.h \
> version.cc \
> version.h \
> versionmatch.cc \
> diff --git a/apt/apt-pkg/contrib/mmap.cc b/apt/apt-pkg/contrib/mmap.cc
> index cf01be9..ea2aded 100644
> --- a/apt/apt-pkg/contrib/mmap.cc
> +++ b/apt/apt-pkg/contrib/mmap.cc
> @@ -38,6 +38,7 @@
> #include <unistd.h>
> #include <fcntl.h>
> #include <cstring>
> +#include <stddef.h>
> /*}}}*/
>
> // MMap::MMap - Constructor /*{{{*/
> @@ -371,7 +372,7 @@ bool DynamicMMap::Grow(unsigned long long size)
> Fd->Write(&C,sizeof(C));
> }
>
> - unsigned long const poolOffset = Pools - ((Pool*) Base);
> + ptrdiff_t const poolOffset = Pools - ((Pool*) Base);
>
> if (Fd != 0)
> {
> diff --git a/apt/apt-pkg/contrib/mmap.h b/apt/apt-pkg/contrib/mmap.h
> index bcbdaa1..439e4fa 100644
> --- a/apt/apt-pkg/contrib/mmap.h
> +++ b/apt/apt-pkg/contrib/mmap.h
> @@ -35,6 +35,7 @@
> #include <sys/mman.h>
>
> #include <apt-pkg/fileutl.h>
> +#include <apt-pkg/utils.h>
>
> using std::string;
>
> @@ -80,7 +81,7 @@ class DynamicMMap : public MMap
> public:
>
> // This is the allocation pool structure
> - struct Pool
> + struct alignas(get_minimal_power_of_2(sizeof(unsigned long) * 3)) Pool
> {
> unsigned long ItemSize;
> unsigned long Start;
> diff --git a/apt/apt-pkg/pkgcache.h b/apt/apt-pkg/pkgcache.h
> index 56fc89d..324ece5 100644
> --- a/apt/apt-pkg/pkgcache.h
> +++ b/apt/apt-pkg/pkgcache.h
> @@ -25,6 +25,7 @@
> #include <string>
> #include <time.h>
> #include <apt-pkg/mmap.h>
> +#include <apt-pkg/utils.h>
>
> using std::string;
>
> @@ -209,7 +210,7 @@ struct pkgCache::Header
> Header();
> };
>
> -struct pkgCache::Package
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 7 + sizeof(unsigned char) * 3 + sizeof(unsigned int) + sizeof(unsigned long))) pkgCache::Package
> {
> // Pointers
> map_ptrloc Name; // Stringtable
> @@ -231,7 +232,7 @@ struct pkgCache::Package
> unsigned long Flags;
> };
>
> -struct pkgCache::PackageFile
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 10 + sizeof(unsigned long long) + sizeof(unsigned long) + sizeof(unsigned short) + sizeof(time_t))) pkgCache::PackageFile
> {
> // Names
> map_ptrloc FileName; // Stringtable
> @@ -252,7 +253,7 @@ struct pkgCache::PackageFile
> time_t mtime; // Modification time for the file
> };
>
> -struct pkgCache::VerFile
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 3 + sizeof(unsigned short))) pkgCache::VerFile
> {
> map_ptrloc File; // PackageFile
> map_ptrloc NextFile; // PkgVerFile
> @@ -260,7 +261,7 @@ struct pkgCache::VerFile
> unsigned short Size;
> };
>
> -struct pkgCache::Version
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 8 + sizeof(unsigned long long) * 2 + sizeof(unsigned int) * 2 + sizeof(unsigned char))) pkgCache::Version
> {
> map_ptrloc VerStr; // Stringtable
> map_ptrloc Section; // StringTable (StringItem)
> @@ -284,7 +285,7 @@ struct pkgCache::Version
> unsigned char Priority;
> };
>
> -struct pkgCache::Dependency
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 6 + sizeof(unsigned char) * 2)) pkgCache::Dependency
> {
> map_ptrloc Version; // Stringtable
> map_ptrloc Package; // Package
> @@ -298,7 +299,7 @@ struct pkgCache::Dependency
> unsigned char CompareOp;
> };
>
> -struct pkgCache::Provides
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 6)) pkgCache::Provides
> {
> map_ptrloc ParentPkg; // Pacakge
> map_ptrloc Version; // Version
> @@ -307,7 +308,7 @@ struct pkgCache::Provides
> map_ptrloc NextPkgProv; // Provides
> };
>
> -struct pkgCache::StringItem
> +struct alignas(get_minimal_power_of_2(sizeof(map_ptrloc) * 2)) pkgCache::StringItem
> {
> map_ptrloc String; // Stringtable
> map_ptrloc NextItem; // StringItem
> diff --git a/apt/apt-pkg/utils.h b/apt/apt-pkg/utils.h
> new file mode 100644
> index 0000000..08f7f18
> --- /dev/null
> +++ b/apt/apt-pkg/utils.h
> @@ -0,0 +1,17 @@
> +#ifndef APT_EXTRA_UTILS_H
> +#define APT_EXTRA_UTILS_H
> +
> +#include <stddef.h>
> +
> +template <size_t N>
> +constexpr size_t get_minimal_power_of_2_helper(size_t size)
> +{
> + return (size <= N) ? N : get_minimal_power_of_2_helper<N*2>(size);
> +}
> +
> +constexpr size_t get_minimal_power_of_2(size_t size)
> +{
> + return get_minimal_power_of_2_helper<1>(size);
> +}
> +
> +#endif /* APT_EXTRA_UTILS_H */
Жаль, что вы не дождались первого апреля, но всё равно спасибо,
шутка получилась отличная.
--
ldv
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin
@ 2019-10-22 0:01 ` Michael Shigorin
2019-10-22 8:32 ` Dmitry V. Levin
2019-10-22 4:06 ` Anton Farygin
2019-10-24 15:20 ` Ivan Zakharyaschev
2 siblings, 1 reply; 20+ messages in thread
From: Michael Shigorin @ 2019-10-22 0:01 UTC (permalink / raw)
To: devel
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?
--
---- WBR, Michael Shigorin / http://altlinux.org
------ http://opennet.ru / http://anna-news.info
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin
2019-10-22 0:01 ` Michael Shigorin
@ 2019-10-22 4:06 ` Anton Farygin
2019-10-22 15:35 ` Alexey Tourbin
2019-10-24 15:20 ` Ivan Zakharyaschev
2 siblings, 1 reply; 20+ messages in thread
From: Anton Farygin @ 2019-10-22 4:06 UTC (permalink / raw)
To: devel
On 22.10.2019 2:42, Dmitry V. Levin wrote:
> On Tue, Sep 17, 2019 at 09:05:15AM +0000, Aleksei Nikiforov wrote:
<skip>
>> --- /dev/null
>> +++ b/apt/apt-pkg/utils.h
>> @@ -0,0 +1,17 @@
>> +#ifndef APT_EXTRA_UTILS_H
>> +#define APT_EXTRA_UTILS_H
>> +
>> +#include <stddef.h>
>> +
>> +template <size_t N>
>> +constexpr size_t get_minimal_power_of_2_helper(size_t size)
>> +{
>> + return (size <= N) ? N : get_minimal_power_of_2_helper<N*2>(size);
>> +}
>> +
>> +constexpr size_t get_minimal_power_of_2(size_t size)
>> +{
>> + return get_minimal_power_of_2_helper<1>(size);
>> +}
>> +
>> +#endif /* APT_EXTRA_UTILS_H */
> Жаль, что вы не дождались первого апреля, но всё равно спасибо,
> шутка получилась отличная.
>
Ты серьёзно не понял зачем это было сделано ?
Да уж, шутка года.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-22 0:01 ` Michael Shigorin
@ 2019-10-22 8:32 ` Dmitry V. Levin
2019-10-22 12:28 ` Anton Farygin
0 siblings, 1 reply; 20+ messages in thread
From: Dmitry V. Levin @ 2019-10-22 8:32 UTC (permalink / raw)
To: ALT Devel discussion list
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 выровнен на начало страницы.
--
ldv
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
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
0 siblings, 2 replies; 20+ messages in thread
From: Anton Farygin @ 2019-10-22 12:28 UTC (permalink / raw)
To: devel
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 и у нас - в обоих
случаях он выровнен на начало страницы.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-22 12:28 ` Anton Farygin
@ 2019-10-22 12:46 ` Anton Farygin
2019-10-22 15:32 ` Dmitry V. Levin
1 sibling, 0 replies; 20+ messages in thread
From: Anton Farygin @ 2019-10-22 12:46 UTC (permalink / raw)
To: devel
On 22.10.2019 15:28, 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 и у нас - в обоих
> случаях он выровнен на начало страницы.
Что касается потребления оперативной памяти, конечно оно будет расти. Но
не так как ты написал - в полтора раза. потребление увеличивается на 10
мегабайт.
Т.е. - меньше 10 процентов от всей используемой apt оперативной памяти.
Хеши от тестового задания можно игнорировать - они занимают в памяти
несколько сотен килобайт.
содержимое /var/cache/apt/ перед каждой командой было подчищено.
# time apt-get update
Получено: 1 https://download.basealt.ru ALTLinux/Sisyphus/x86_64 release
[1123B]
Получено: 2 https://download.basealt.ru ALTLinux/Sisyphus/noarch release
[707B]
Получено: 3 https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586
release [555B]
Получено 2385B за 0s (10,9kB/s).
Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic pkglist
Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic release
Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic pkglist
Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic release
Найдено https://download.basealt.ru
ALTLinux/Sisyphus/x86_64-i586/classic pkglist
Найдено https://download.basealt.ru
ALTLinux/Sisyphus/x86_64-i586/classic release
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
4.07user 0.61system 0:05.22elapsed 89%CPU (0avgtext+0avgdata
155940maxresident)k
1480inputs+347064outputs (129major+38161minor)pagefaults 0swaps
# time apt-get update
Получено: 1 http://git.altlinux.org repo/239313/x86_64 release [557B]
Получено: 2 http://git.altlinux.org repo/239313/x86_64-i586 release [532B]
Получено: 3 https://download.basealt.ru ALTLinux/Sisyphus/x86_64 release
[1123B]
Получено: 4 https://download.basealt.ru ALTLinux/Sisyphus/noarch release
[707B]
Получено: 5 https://download.basealt.ru ALTLinux/Sisyphus/x86_64-i586
release [555B]
Получено 3474B за 0s (15,6kB/s).
Найдено http://git.altlinux.org repo/239313/x86_64/task pkglist
Найдено http://git.altlinux.org repo/239313/x86_64/task release
Найдено http://git.altlinux.org repo/239313/x86_64-i586/task pkglist
Найдено http://git.altlinux.org repo/239313/x86_64-i586/task release
Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic
pkglist
Найдено https://download.basealt.ru ALTLinux/Sisyphus/x86_64/classic release
Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic pkglist
Найдено https://download.basealt.ru ALTLinux/Sisyphus/noarch/classic release
Найдено https://download.basealt.ru
ALTLinux/Sisyphus/x86_64-i586/classic pkglist
Найдено https://download.basealt.ru
ALTLinux/Sisyphus/x86_64-i586/classic release
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
4.04user 0.68system 0:05.24elapsed 90%CPU (0avgtext+0avgdata
166504maxresident)k
0inputs+388648outputs (110major+42977minor)pagefaults 0swaps
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
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
` (2 more replies)
1 sibling, 3 replies; 20+ messages in thread
From: Dmitry V. Levin @ 2019-10-22 15:32 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1842 bytes --]
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;
В 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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
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
0 siblings, 2 replies; 20+ messages in thread
From: Alexey Tourbin @ 2019-10-22 15:35 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Tue, Oct 22, 2019 at 7:06 AM Anton Farygin <rider@basealt.ru> wrote:
> On 22.10.2019 2:42, Dmitry V. Levin wrote:
> > Жаль, что вы не дождались первого апреля, но всё равно спасибо,
> > шутка получилась отличная.
> >
> Ты серьёзно не понял зачем это было сделано ?
Зачем выравнивать структуру исходя из ее общего размера, а не
требований к выравниванию членов?
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
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
2 siblings, 0 replies; 20+ messages in thread
From: Anton Farygin @ 2019-10-22 15:51 UTC (permalink / raw)
To: devel
On 22.10.2019 18:32, 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;
>
> В 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;
>
> Всё ещё не видно разницы?
>
Я просто посмотрел то, что получается (адреса). Результат одинаковый.
Если поискать это место в коде Алексея, то я вижу его в строке 180
(такое же как в приведённом тобой из Debian).
Там же поведение разное - если файл открыт и если нет.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
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
2 siblings, 0 replies; 20+ messages in thread
From: Ivan Zakharyaschev @ 2019-10-22 16:52 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 2316 bytes --]
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
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-22 15:35 ` Alexey Tourbin
@ 2019-10-23 12:46 ` Dmitry V. Levin
2019-10-24 13:58 ` Aleksei Nikiforov
1 sibling, 0 replies; 20+ messages in thread
From: Dmitry V. Levin @ 2019-10-23 12:46 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 595 bytes --]
On Tue, Oct 22, 2019 at 06:35:48PM +0300, Alexey Tourbin wrote:
[...]
> Зачем выравнивать структуру исходя из ее общего размера, а не
> требований к выравниванию членов?
Все структуры, память для которых резервируется с помощью
pkgCacheGenerator::AllocateInMap, apt с незапамятных времён выравнивает
не на размер выравнивания этой структуры (как принято везде), а на размер
самой структуры, и, что хуже, полагается на такое выравнивание
(см. напр. DynamicMMap::Allocate).
Из-за этого особенного поведения в apt проблем с памятью ещё больше,
чем должно было бы быть.
--
ldv
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-22 15:35 ` Alexey Tourbin
2019-10-23 12:46 ` Dmitry V. Levin
@ 2019-10-24 13:58 ` Aleksei Nikiforov
1 sibling, 0 replies; 20+ messages in thread
From: Aleksei Nikiforov @ 2019-10-24 13:58 UTC (permalink / raw)
To: devel
22.10.2019 18:35, Alexey Tourbin пишет:
> On Tue, Oct 22, 2019 at 7:06 AM Anton Farygin <rider@basealt.ru> wrote:
>> On 22.10.2019 2:42, Dmitry V. Levin wrote:
>>> Жаль, что вы не дождались первого апреля, но всё равно спасибо,
>>> шутка получилась отличная.
>>>
>> Ты серьёзно не понял зачем это было сделано ?
>
> Зачем выравнивать структуру исходя из ее общего размера, а не
> требований к выравниванию членов?
Потому что эта структура лежит где-то в *(MMap::Base), т.е. является по
сути членом ещё большей структуры. И работа с такой структурой, если она
не является выравненной, вызывает проблемы на e2k при изменении адреса
MMap::Base, поскольку при этом пересчитываются многие адреса, в том
числе адреса таких структур.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
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
2 siblings, 1 reply; 20+ messages in thread
From: Aleksei Nikiforov @ 2019-10-24 13:59 UTC (permalink / raw)
To: devel
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);
}
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-24 13:59 ` Aleksei Nikiforov
@ 2019-10-24 15:10 ` Andrey Savchenko
2019-10-24 15:29 ` Aleksei Nikiforov
0 siblings, 1 reply; 20+ messages in thread
From: Andrey Savchenko @ 2019-10-24 15:10 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- 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 --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 Dmitry V. Levin
2019-10-22 0:01 ` Michael Shigorin
2019-10-22 4:06 ` Anton Farygin
@ 2019-10-24 15:20 ` Ivan Zakharyaschev
2 siblings, 0 replies; 20+ messages in thread
From: Ivan Zakharyaschev @ 2019-10-24 15:20 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 966 bytes --]
Hello!
Прежде чем выпускать окончательное исправление для проблемы с попрченной
памятью в apt на e2k, собираюсь переписать неразумную арифметику
указателей, а именно вычитания указателей, которые до этого были насильно
приведены к типу указателя на структуру -- а разность этих произвольных
адресов-то не гарантированно кратна размеру структуры, т.е. из этого
соображения результат такой операции просто невозможно определить (не
говоря о том, что стандарт более жёсток в отношении таких выражений:
разность определена между элементами одного массива). Есть разные мнения о
том, что происходит при приведении указателя к типу указателя на
структуру, если исходный адрес не выровнен так же, как должна быть
структуры; это тоже может быть проблемой.
Запостил свои заметки, сложившиеся при взгляде на эту проблему, в
https://bugzilla.altlinux.org/show_bug.cgi?id=37373 .
Предлагаемые мной изменения арифметики я тоже скоро запощу.
--
Best regards,
Ivan
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-24 15:10 ` Andrey Savchenko
@ 2019-10-24 15:29 ` Aleksei Nikiforov
2019-10-24 15:50 ` Andrey Savchenko
0 siblings, 1 reply; 20+ messages in thread
From: Aleksei Nikiforov @ 2019-10-24 15:29 UTC (permalink / raw)
To: devel
24.10.2019 18:10, Andrey Savchenko пишет:
> UB не обязательно демонстрировать. Если по стандарту языка
> происходит UB, то это не значит, что оно будет происходить
> в конкретной реализации, но это значит, что оно может произойти где
> и когда угодно: другой компилятор, другая версия, другая фаза луны.
>
> Тот факт, что из-за сложения ошибок произошла корректная работа не
> означает, что ошибок нет.
Да, но в таком случае как минимум можно указать на конкретный проблемный
участок кода, который содержит UB, и в чём это UB заключается. Как и
ошибки, которые складываются.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-24 15:29 ` Aleksei Nikiforov
@ 2019-10-24 15:50 ` Andrey Savchenko
2019-10-24 16:01 ` Aleksei Nikiforov
0 siblings, 1 reply; 20+ messages in thread
From: Andrey Savchenko @ 2019-10-24 15:50 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 1190 bytes --]
On Thu, 24 Oct 2019 18:29:36 +0300 Aleksei Nikiforov wrote:
> 24.10.2019 18:10, Andrey Savchenko пишет:
> > UB не обязательно демонстрировать. Если по стандарту языка
> > происходит UB, то это не значит, что оно будет происходить
> > в конкретной реализации, но это значит, что оно может произойти где
> > и когда угодно: другой компилятор, другая версия, другая фаза луны.
> >
> > Тот факт, что из-за сложения ошибок произошла корректная работа не
> > означает, что ошибок нет.
>
> Да, но в таком случае как минимум можно указать на конкретный проблемный
> участок кода, который содержит UB, и в чём это UB заключается. Как и
> ошибки, которые складываются.
Так ldv это и сделал в письме выше.
Best regards,
Andrew Savchenko
[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-24 15:50 ` Andrey Savchenko
@ 2019-10-24 16:01 ` Aleksei Nikiforov
2019-10-24 16:54 ` Andrey Savchenko
0 siblings, 1 reply; 20+ messages in thread
From: Aleksei Nikiforov @ 2019-10-24 16:01 UTC (permalink / raw)
To: devel
24.10.2019 18:50, Andrey Savchenko пишет:
>> Да, но в таком случае как минимум можно указать на конкретный проблемный
>> участок кода, который содержит UB, и в чём это UB заключается. Как и
>> ошибки, которые складываются.
>
> Так ldv это и сделал в письме выше.
>
Я, наверно, в этом потоке сообщений где-то это пропустил. Как минимум
ничего кроме общих слов не видел. Можешь повторить этот фрагмент,
пожалуйста?
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-24 16:01 ` Aleksei Nikiforov
@ 2019-10-24 16:54 ` Andrey Savchenko
2019-10-25 7:23 ` Aleksei Nikiforov
0 siblings, 1 reply; 20+ messages in thread
From: Andrey Savchenko @ 2019-10-24 16:54 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 2337 bytes --]
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;
Всё ещё не видно разницы?
Best regards,
Andrew Savchenko
[-- Attachment #2: Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74
2019-10-24 16:54 ` Andrey Savchenko
@ 2019-10-25 7:23 ` Aleksei Nikiforov
0 siblings, 0 replies; 20+ messages in thread
From: Aleksei Nikiforov @ 2019-10-25 7:23 UTC (permalink / raw)
To: devel
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.
Конец цитаты.
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2019-10-25 7:23 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-21 23:42 ` [devel] [SCM] packages/apt: tags/0.5.15lorg2-alt74 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
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
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