ALT Linux Team development discussions
 help / color / mirror / Atom feed
* 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