From: Askar Safin <safinaskar@gmail.com>
To: brauner@kernel.org
Cc: amir73il@gmail.com, cyphar@cyphar.com, jack@suse.cz,
jlayton@kernel.org, josef@toxicpanda.com,
linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk,
Lennart Poettering <mzxreary@0pointer.de>,
David Howells <dhowells@redhat.com>,
Zhang Yunkai <zhang.yunkai@zte.com.cn>,
cgel.zte@gmail.com, Menglong Dong <menglong8.dong@gmail.com>,
linux-kernel@vger.kernel.org, initramfs@vger.kernel.org,
containers@lists.linux.dev, linux-api@vger.kernel.org,
news@phoronix.com, lwn@lwn.net, Jonathan Corbet <corbet@lwn.net>,
Rob Landley <rob@landley.net>,
emily@redcoat.dev, Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH 0/2] mount: add OPEN_TREE_NAMESPACE
Date: Mon, 19 Jan 2026 20:11:01 +0300 [thread overview]
Message-ID: <20260119171101.3215697-1-safinaskar@gmail.com> (raw)
In-Reply-To: <20251229-work-empty-namespace-v1-0-bfb24c7b061f@kernel.org>
Christian Brauner <brauner@kernel.org>:
> Extend open_tree() with a new OPEN_TREE_NAMESPACE flag. Similar to
> OPEN_TREE_CLONE only the indicated mount tree is copied. Instead of
> returning a file descriptor referring to that mount tree
> OPEN_TREE_NAMESPACE will cause open_tree() to return a file descriptor
> to a new mount namespace. In that new mount namespace the copied mount
> tree has been mounted on top of a copy of the real rootfs.
I want to point at security benefits of this.
[[ TL;DR: [1] and [2] are very big changes to how mount namespaces work.
I like them, and I think they should get wider exposure. ]]
If this patchset ([1]) and [2] both land (they are both in "next" now and
likely will be submitted to mainline soon) and "nullfs_rootfs" is passed on
command line, then mount namespace created by open_tree(OPEN_TREE_NAMESPACE) will
usually contain exactly 2 mounts: nullfs and whatever was passed to
open_tree(OPEN_TREE_NAMESPACE).
This means that even if attacker somehow is able to unmount its root and
get access to underlying mounts, then the only underlying thing they will
get is nullfs.
Also this means that other mounts are not only hidden in new namespace, they
are fully absent. This prevents attacks discussed here: [3], [4].
Also this means that (assuming we have both [1] and [2] and "nullfs_rootfs"
is passed), there is no anymore hidden writable mount shared by all containers,
potentially available to attackers. This is concern raised in [5]:
> You want rootfs to be a NULLFS instead of ramfs. You don't seem to want it to
> actually _be_ a filesystem. Even with your "fix", containers could communicate
> with each _other_ through it if it becomes accessible. If a container can get
> access to an empty initramfs and write into it, it can ask/answer the question
> "Are there any other containers on this machine running stux24" and then coordinate.
Note: as well as I understand all actual security bugs are already fixed in kernel,
runc and similar tools. But still [1] and [2] reduce chances of similar bugs
in the future, and this is very good thing.
Also: [1] and [2] are pretty big changes to how mount namespaces work, so
I added more people and lists to CC.
This mail is answer to [1].
[1] https://lore.kernel.org/all/20251229-work-empty-namespace-v1-0-bfb24c7b061f@kernel.org/
[2] https://lore.kernel.org/all/20260112-work-immutable-rootfs-v2-0-88dd1c34a204@kernel.org/
[3] https://lore.kernel.org/all/rxh6knvencwjajhgvdgzmrkwmyxwotu3itqyreun3h2pmaujhr@snhuqoq44kkf/
[4] https://github.com/opencontainers/runc/pull/1962
[5] https://lore.kernel.org/all/cec90924-e7ec-377c-fb02-e0f25ab9db73@landley.net/
--
Askar Safin
next prev parent reply other threads:[~2026-01-19 19:00 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-29 13:03 [PATCH 0/2] mount: add OPEN_TREE_NAMESPACE Christian Brauner
2025-12-29 13:03 ` [PATCH 1/2] " Christian Brauner
2026-01-08 22:37 ` Aleksa Sarai
2026-01-12 13:00 ` Christian Brauner
2026-01-12 13:37 ` Aleksa Sarai
2026-02-24 11:23 ` Florian Weimer
2026-02-24 12:05 ` Christian Brauner
2026-02-24 13:30 ` Florian Weimer
2026-02-24 14:33 ` Christian Brauner
2026-02-26 11:54 ` Jan Kara
2026-03-02 10:15 ` Florian Weimer
2025-12-29 13:03 ` [PATCH 2/2] selftests/open_tree: add OPEN_TREE_NAMESPACE tests Christian Brauner
2025-12-29 15:24 ` [PATCH 0/2] mount: add OPEN_TREE_NAMESPACE Jeff Layton
2026-01-05 20:29 ` Jeff Layton
2026-01-06 22:47 ` Christian Brauner
2026-01-19 17:11 ` Askar Safin [this message]
2026-01-19 19:05 ` Andy Lutomirski
2026-01-19 22:21 ` Jeff Layton
2026-01-21 10:20 ` Christian Brauner
2026-01-21 18:00 ` Andy Lutomirski
2026-01-23 10:23 ` Christian Brauner
2026-01-24 10:13 ` Askar Safin
2026-01-21 19:56 ` Rob Landley
2026-02-19 23:42 ` Askar Safin
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=20260119171101.3215697-1-safinaskar@gmail.com \
--to=safinaskar@gmail.com \
--cc=amir73il@gmail.com \
--cc=brauner@kernel.org \
--cc=cgel.zte@gmail.com \
--cc=containers@lists.linux.dev \
--cc=corbet@lwn.net \
--cc=cyphar@cyphar.com \
--cc=dhowells@redhat.com \
--cc=emily@redcoat.dev \
--cc=hch@lst.de \
--cc=initramfs@vger.kernel.org \
--cc=jack@suse.cz \
--cc=jlayton@kernel.org \
--cc=josef@toxicpanda.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lwn@lwn.net \
--cc=menglong8.dong@gmail.com \
--cc=mzxreary@0pointer.de \
--cc=news@phoronix.com \
--cc=rob@landley.net \
--cc=viro@zeniv.linux.org.uk \
--cc=zhang.yunkai@zte.com.cn \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox