ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] Q: capset after pthread_create (droproot patch for	3proxy)
Date: Mon, 8 Jun 2009 20:25:57 +0400
Message-ID: <20090608162557.GA8104@atlas.home> (raw)
In-Reply-To: <20090608142236.GC8215@ender.fondinvestrk.ru>

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

On Mon, Jun 08, 2009 at 06:22:37PM +0400, Afanasov Dmitry wrote:
> как я понимаю, capset после pthread_create проставит capabilities только
> для текущего треда, так?

Да, именно так.  Упоминающийся в man capset параметр pid использовать
нельзя - в свежих версиях ядер он заблокирован окончательно;
допускается изменение только собственных параметров.

> вопрос: как постфактум проставить для всех порожденных тредов?

Только каким-то образом обеспечить вызов capset() во всех потоках, для
которых это необходимо (впрочем, при выполнении clone() при вызовах
pthread_create() результат capset() будет наследоваться; это не
работало в древней реализации Linuxthreads, где вызовы clone()
выполнялись в контексте отдельного потока "thread manager").

> если никак, то придется drop_root вписывать в пяток лишних файлов.

При вписывании следует учитывать, что функции set*id(), реализованные
в glibc, действуют на весь процесс (несмотря на то, что используемые
ими системные вызовы также меняют состояние только текущего потока).
Внутри glibc это реализовано передачей всем потокам зарезервированного
для этой цели сигнала, в обработчике которого выполняется запрошенный
системный вызов; функция __nptl_setxid() после рассылки сигналов всем
прочим потокам ожидает завершения их обработки, после чего выполняет
системный вызов set*id() для собственного потока.  Поэтому при наличии
в процедуре сброса привилегий вызовов set*id() следует аккуратно
синхронизировать инициализацию (иначе можно получить либо ложную
ошибку при повторном вызове set*id(), либо невозможность выполнения
других необходимых операций из-за слишком раннего выполнения set*id()
в другом потоке).

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

  reply	other threads:[~2009-06-08 16:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-08 14:22 Afanasov Dmitry
2009-06-08 16:25 ` Sergey Vlasov [this message]
2009-06-09  6:07   ` Afanasov Dmitry
2009-06-08 19:52 ` Dmitry V. Levin

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20090608162557.GA8104@atlas.home \
    --to=vsu@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

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

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

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

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

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

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


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