From: "Mickaël Salaün" <mic@digikod.net>
To: "Konstantin Meskhidze (A)" <konstantin.meskhidze@huawei.com>
Cc: willemdebruijn.kernel@gmail.com, gnoack3000@gmail.com,
linux-security-module@vger.kernel.org, netdev@vger.kernel.org,
netfilter-devel@vger.kernel.org, anton.sirazetdinov@huawei.com
Subject: Re: [PATCH v7 03/18] landlock: refactor merge/inherit_ruleset functions
Date: Mon, 12 Sep 2022 19:17:27 +0200 [thread overview]
Message-ID: <21bc4d6b-6c06-3bbb-f2f4-7d10d289c3a4@digikod.net> (raw)
In-Reply-To: <72db3ee6-06ee-0af8-06c6-ac16200bb83f@huawei.com>
On 09/09/2022 16:53, Konstantin Meskhidze (A) wrote:
>
>
> 9/6/2022 11:07 AM, Mickaël Salaün пишет:
>>
>> On 29/08/2022 19:03, Konstantin Meskhidze wrote:
>>> Refactors merge_ruleset() and inherit_ruleset() functions to support
>>> new rule types. This patch adds merge_tree() and inherit_tree()
>>> helpers. Each has key_type argument to choose a particular rb_tree
>>> structure in a ruleset.
>>>
>>> Signed-off-by: Konstantin Meskhidze <konstantin.meskhidze@huawei.com>
>>> ---
>>>
>>> Changes since v6:
>>> * Refactors merge_ruleset() and inherit_ruleset() functions to support
>>> new rule types.
>>> * Renames tree_merge() to merge_tree() (and reorder arguments), and
>>> tree_copy() to inherit_tree().
>>>
>>> Changes since v5:
>>> * Refactors some logic errors.
>>> * Formats code with clang-format-14.
>>>
>>> Changes since v4:
>>> * None
>>>
>>> ---
>>> security/landlock/ruleset.c | 108 +++++++++++++++++++++++-------------
>>> 1 file changed, 69 insertions(+), 39 deletions(-)
>>>
>>> diff --git a/security/landlock/ruleset.c b/security/landlock/ruleset.c
>>> index 41de17d1869e..3a5ef356aaa3 100644
>>> --- a/security/landlock/ruleset.c
>>> +++ b/security/landlock/ruleset.c
>>> @@ -302,36 +302,18 @@ static void put_hierarchy(struct landlock_hierarchy *hierarchy)
>>> }
>>> }
>>>
>>> -static int merge_ruleset(struct landlock_ruleset *const dst,
>>> - struct landlock_ruleset *const src)
>>> +static int merge_tree(struct landlock_ruleset *const dst,
>>> + struct landlock_ruleset *const src,
>>> + const enum landlock_key_type key_type)
>>> {
>>> struct landlock_rule *walker_rule, *next_rule;
>>> struct rb_root *src_root;
>>> int err = 0;
>>>
>>> - might_sleep();
>>> - /* Should already be checked by landlock_merge_ruleset() */
>>> - if (WARN_ON_ONCE(!src))
>>> - return 0;
>>> - /* Only merge into a domain. */
>>> - if (WARN_ON_ONCE(!dst || !dst->hierarchy))
>>> - return -EINVAL;
>>> -
>>> - src_root = get_root(src, LANDLOCK_KEY_INODE);
>>
>> This hunk is a bit misleading, but please add a might_sleep() call here
>> because of the insert_rule() call, and some lock asserts:
>>
>> might_sleep();
>> lockdep_assert_held(&dst->lock);
>> lockdep_assert_held(&src->lock);
>
> it was moved into merge_ruleset() function,
> please check below.
I know but you still need to add these asserts.
>
>>
>>
>>> + src_root = get_root(src, key_type);
>>> if (IS_ERR(src_root))
>>> return PTR_ERR(src_root);
>>>
>>> - /* Locks @dst first because we are its only owner. */
>>> - mutex_lock(&dst->lock);
>>> - mutex_lock_nested(&src->lock, SINGLE_DEPTH_NESTING);
>>> -
>>> - /* Stacks the new layer. */
>>> - if (WARN_ON_ONCE(src->num_layers != 1 || dst->num_layers < 1)) {
>>> - err = -EINVAL;
>>> - goto out_unlock;
>>> - }
>>> - dst->access_masks[dst->num_layers - 1] = src->access_masks[0];
>>> -
>>> /* Merges the @src tree. */
>>> rbtree_postorder_for_each_entry_safe(walker_rule, next_rule, src_root,
>>> node) {
>>> @@ -340,7 +322,7 @@ static int merge_ruleset(struct landlock_ruleset *const dst,
>>> } };
>>> const struct landlock_id id = {
>>> .key = walker_rule->key,
>>> - .type = LANDLOCK_KEY_INODE,
>>> + .type = key_type,
>>> };
>>>
>>> if (WARN_ON_ONCE(walker_rule->num_layers != 1))
>>> @@ -351,8 +333,39 @@ static int merge_ruleset(struct landlock_ruleset *const dst,
>>>
>>> err = insert_rule(dst, id, &layers, ARRAY_SIZE(layers));
>>> if (err)
>>> - goto out_unlock;
>>> + return err;
>>> + }
>>> + return err;
>>> +}
>>> +
>>> +static int merge_ruleset(struct landlock_ruleset *const dst,
>>> + struct landlock_ruleset *const src)
>>> +{
>>> + int err = 0;
>>> +
>>> + might_sleep();
>>> + /* Should already be checked by landlock_merge_ruleset() */
>>> + if (WARN_ON_ONCE(!src))
>>> + return 0;
>>> + /* Only merge into a domain. */
>>> + if (WARN_ON_ONCE(!dst || !dst->hierarchy))
>>> + return -EINVAL;
>>> +
>>> + /* Locks @dst first because we are its only owner. */
>>> + mutex_lock(&dst->lock);
>>> + mutex_lock_nested(&src->lock, SINGLE_DEPTH_NESTING);
>>> +
>>> + /* Stacks the new layer. */
>>> + if (WARN_ON_ONCE(src->num_layers != 1 || dst->num_layers < 1)) {
>>> + err = -EINVAL;
>>> + goto out_unlock;
>>> }
>>> + dst->access_masks[dst->num_layers - 1] = src->access_masks[0];
>>> +
>>> + /* Merges the @src inode tree. */
>>> + err = merge_tree(dst, src, LANDLOCK_KEY_INODE);
>>> + if (err)
>>> + goto out_unlock;
>>>
>>> out_unlock:
>>> mutex_unlock(&src->lock);
>>> @@ -360,43 +373,60 @@ static int merge_ruleset(struct landlock_ruleset *const dst,
>>> return err;
>>> }
>>>
>>> -static int inherit_ruleset(struct landlock_ruleset *const parent,
>>> - struct landlock_ruleset *const child)
>>> +static int inherit_tree(struct landlock_ruleset *const parent,
>>> + struct landlock_ruleset *const child,
>>> + const enum landlock_key_type key_type)
>>> {
>>> struct landlock_rule *walker_rule, *next_rule;
>>> struct rb_root *parent_root;
>>> int err = 0;
>>>
>>> - might_sleep();
>>> - if (!parent)
>>> - return 0;
>>> -
>>> - parent_root = get_root(parent, LANDLOCK_KEY_INODE);
>>
>> This hunk is a bit misleading, but please add a might_sleep() call here
>> because of the insert_rule() call, and some lock asserts:
>>
>> might_sleep();
>> lockdep_assert_held(&parent->lock);
>> lockdep_assert_held(&child->lock);
>>
> it was moved into inherit_ruleset() function,
> please check below.
same
next prev parent reply other threads:[~2022-09-12 17:17 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-29 17:03 [PATCH v7 00/18] Network support for Landlock Konstantin Meskhidze
2022-08-29 17:03 ` [PATCH v7 01/18] landlock: rename access mask Konstantin Meskhidze
2022-09-06 8:06 ` Mickaël Salaün
2022-09-09 10:42 ` Konstantin Meskhidze (A)
2022-09-12 17:16 ` Mickaël Salaün
2022-08-29 17:03 ` [PATCH v7 02/18] landlock: refactor landlock_find_rule/insert_rule Konstantin Meskhidze
2022-09-06 8:07 ` Mickaël Salaün
2022-09-09 10:48 ` Konstantin Meskhidze (A)
2022-09-12 17:17 ` Mickaël Salaün
2022-10-12 8:37 ` Konstantin Meskhidze (A)
2022-10-12 10:06 ` Mickaël Salaün
2022-10-12 11:13 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 03/18] landlock: refactor merge/inherit_ruleset functions Konstantin Meskhidze
2022-09-06 8:07 ` Mickaël Salaün
2022-09-09 14:53 ` Konstantin Meskhidze (A)
2022-09-12 17:17 ` Mickaël Salaün [this message]
2022-08-29 17:03 ` [PATCH v7 04/18] landlock: move helper functions Konstantin Meskhidze
2022-09-06 8:07 ` Mickaël Salaün
2022-09-10 16:50 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 05/18] landlock: refactor " Konstantin Meskhidze
2022-09-06 8:07 ` Mickaël Salaün
2022-09-10 17:20 ` Konstantin Meskhidze (A)
2022-09-12 17:18 ` Mickaël Salaün
2022-08-29 17:03 ` [PATCH v7 06/18] landlock: refactor landlock_add_rule syscall Konstantin Meskhidze
2022-08-29 17:03 ` [PATCH v7 07/18] landlock: user space API network support Konstantin Meskhidze
2022-09-06 8:08 ` Mickaël Salaün
2022-09-10 17:25 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 08/18] landlock: add network rules support Konstantin Meskhidze
2022-09-06 8:08 ` Mickaël Salaün
2022-09-10 18:27 ` Konstantin Meskhidze (A)
2022-09-12 17:18 ` Mickaël Salaün
2022-08-29 17:03 ` [PATCH v7 09/18] landlock: implement TCP network hooks Konstantin Meskhidze
2022-09-06 8:08 ` Mickaël Salaün
2022-09-10 20:28 ` Konstantin Meskhidze (A)
2022-09-12 17:18 ` Mickaël Salaün
2022-08-29 17:03 ` [PATCH v7 10/18] seltests/landlock: move helper function Konstantin Meskhidze
2022-09-06 8:09 ` Mickaël Salaün
2022-09-10 20:29 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 11/18] seltests/landlock: add tests for bind() hooks Konstantin Meskhidze
2022-09-06 8:09 ` Mickaël Salaün
2022-09-10 20:47 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 12/18] seltests/landlock: add tests for connect() hooks Konstantin Meskhidze
2022-08-29 17:03 ` [PATCH v7 13/18] seltests/landlock: add AF_UNSPEC family test Konstantin Meskhidze
2022-09-06 8:09 ` Mickaël Salaün
2022-09-10 20:48 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 14/18] seltests/landlock: add rules overlapping test Konstantin Meskhidze
2022-09-06 8:09 ` Mickaël Salaün
2022-09-10 20:49 ` Konstantin Meskhidze (A)
2022-08-29 17:03 ` [PATCH v7 15/18] seltests/landlock: add ruleset expanding test Konstantin Meskhidze
2022-08-29 17:03 ` [PATCH v7 16/18] seltests/landlock: add invalid input data test Konstantin Meskhidze
2022-09-06 8:09 ` Mickaël Salaün
2022-09-10 20:51 ` Konstantin Meskhidze (A)
2022-09-12 17:22 ` Mickaël Salaün
2022-10-10 10:37 ` Mickaël Salaün
2022-10-11 7:55 ` Konstantin Meskhidze (A)
2022-10-11 8:32 ` Mickaël Salaün
2022-08-29 17:04 ` [PATCH v7 17/18] samples/landlock: add network demo Konstantin Meskhidze
2022-09-06 8:10 ` Mickaël Salaün
2022-09-10 20:59 ` Konstantin Meskhidze (A)
2022-09-12 17:23 ` Mickaël Salaün
2022-08-29 17:04 ` [PATCH v7 18/18] landlock: Document Landlock's network support Konstantin Meskhidze
2022-09-06 8:12 ` Mickaël Salaün
2022-09-10 21:14 ` Konstantin Meskhidze (A)
2022-09-12 17:23 ` Mickaël Salaün
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=21bc4d6b-6c06-3bbb-f2f4-7d10d289c3a4@digikod.net \
--to=mic@digikod.net \
--cc=anton.sirazetdinov@huawei.com \
--cc=gnoack3000@gmail.com \
--cc=konstantin.meskhidze@huawei.com \
--cc=linux-security-module@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=willemdebruijn.kernel@gmail.com \
/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;
as well as URLs for NNTP newsgroup(s).