Summary: | SysV shared memory support is unfunctional with CONFIG_HARDEN_SHM (Openwall patch) | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Sir Raorn <raorn> |
Component: | perl-base | Assignee: | at <at> |
Status: | CLOSED WORKSFORME | QA Contact: | qa-sisyphus |
Severity: | blocker | ||
Priority: | P2 | CC: | at, crux, lakostis, mike, viy |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux | ||
Bug Depends on: | |||
Bug Blocks: | 7371 |
Description
Sir Raorn
2005-07-18 10:53:58 MSD
Date: Thu, 21 Jul 2005 19:43:08 +0400
From: Sergey Vlasov <vsu@>
To: ALT Linux Sisyphus <sisyphus@>
Subject: Re: [sisyphus] perl SysV IPC vs Owl
> > С этой багой надо идти в апстрим... Это проблема дизайна
> > shmread/shmwrite...
> В чей апастрим? В чём суть проблемы? Подробнее, пожалуйста...
В патче Openwall для ядер 2.4.x добавляется возможность автоматического
уничтожения неиспользуемых сегментов SysV shared memory (сегмент считается
неиспользуемым, если он не отображается в адресное пространство хотя бы
одного процесса). В ядрах std-* эта опция конфигурации патча Openwall
(CONFIG_HARDEN_SHM) включена.
Функции shmread и shmwrite в Perl при каждом вызове выполняют shmat(),
осуществляют доступ к данным в разделяемой памяти, после чего выполняют
shmdt(). В результате выполнения этих действий, если отсутствуют другие
процессы, использующие этот сегмент, и при этом в ядре включена опция
CONFIG_HARDEN_SHM, при выполнении shmdt() сегмент уничтожается.
Настоящая проблема здесь даже не в Perl, а в самом SysV shared memory API,
допускающем существование областей разделяемой памяти при отсутствии
ответственных за них процессов. В большинстве случаев использования SysV
shm это свойство вызывает только проблемы (в частности, необходимость
ручного удаления сегментов после аварийного завершения использовавших их
процессов).
В случае, если автоматическое удаление сегментов разделяемой памяти
всё-таки нужно выключить, это можно сделать командой
echo 0 >/proc/sys/kernel/shm_destroy_unused
(соответствующий патч есть в ядрах начиная с 2.4.25-std-*-alt3).
Бишь WORKSFORME, поскольку есть workaround (задокументировано около http://www.freesource.info/wiki/AltLinux/Features). А ещё в 2.6 этого патча помойму вообще нет. (In reply to comment #3) > А ещё в 2.6 этого патча помойму вообще нет. Ну... был altsec, но на .18 и тем более .24 Костик его не притащил, насколько понимаю. |