Thread (68 messages) 68 messages, 7 authors, 2021-12-13

Re: [PATCH v5 15/16] ima: Move dentries into ima_namespace

From: James Bottomley <hidden>
Date: 2021-12-09 15:31:02
Also in: linux-security-module, lkml

On Thu, 2021-12-09 at 15:37 +0100, Christian Brauner wrote:
On Thu, Dec 09, 2021 at 03:34:28PM +0100, Christian Brauner wrote:
quoted
On Wed, Dec 08, 2021 at 05:18:17PM -0500, Stefan Berger wrote:
quoted
Move the dentries into the ima_namespace for reuse by virtualized
SecurityFS. Implement function freeing the dentries in order of
files and symlinks before directories.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
---
This doesn't work as implemented, I think.

What I would have preferred and what I tried to explain in the
earlier review was:
Keep the dentry stashing global since it is only needed for
init_ima_ns.
Then struct ima_namespace becomes way smaller and simpler.
If you do that then it makes sense to remove the additional dget()
in securityfs_create_dentry() for non-init_ima_ns.
Then you can rely on auto-cleanup in .kill_sb() or on
ima_securityfs_init() failure and you only need to call
ima_fs_ns_free_dentries() if ns != init_ima_ns.

IIuc, it seems you're currently doing one dput() too many since
you're calling securityfs_remove() in the error path for non-
init_ima_ns which relies on the previous increased dget() which we
removed.
If you really want to move the dentry stashing into struct
ima_namespace even though it's really unnecessary then you may as
well not care about the auto-cleanup and keep that additional
ima_fs_ns_free_dentries(ns) call in .kill_sb(). But I really think
not dragging dentry stashing into struct ima_namespace is the correct
way to go about this.
We, unfortunately, do have one case we can't avoid stashing for the
policy file.  It's this code in ima_release_policy:
#if !defined(CONFIG_IMA_WRITE_POLICY) &&
!defined(CONFIG_IMA_READ_POLICY)
	securityfs_remove(ns->dentry[IMAFS_DENTRY_IMA_POLICY]);
	ns->dentry[IMAFS_DENTRY_IMA_POLICY] = NULL;
What it does is that in certain config options, the policy file entry
gets removed from the securityfs ima directory after you write to it.

James

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help