Function report |
Source Code:security\keys\keyring.c |
Create Date:2022-07-28 18:17:52 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:Search a tree of keyrings that point to other keyrings up to the maximum* depth.
Proto:static bool search_nested_keyrings(struct key *keyring, struct keyring_search_context *ctx)
Type:bool
Parameter:
Type | Parameter | Name |
---|---|---|
struct key * | keyring | |
struct keyring_search_context * | ctx |
680 | sp = 0 |
682 | kenter("{%d},{%s,%s}", key serial number , name, description) |
691 | If description Then Finalise an index key to include a part of the description actually in the* index key, to set the domain tag and to calculate the hash. |
697 | If Type of lookup for this search. == Iterative search. || keyring_compare_object(keyring, & index_key) Then |
699 | Internal stuff = 2 |
701 | Case iterator(keyring_key_to_ptr(keyring), ctx) == 1 |
702 | Go to found |
703 | Case iterator(keyring_key_to_ptr(keyring), ctx) == 2 |
704 | Return false |
705 | Default |
706 | Break |
710 | Internal stuff = 0 |
713 | descend_to_keyring : |
714 | kdebug("descend to %d", key serial number ) |
715 | If status flags (change with bitops) & ( 1 << set if key has been invalidated | 1 << set if key had been revoked ) Then Go to not_this_keyring |
733 | If Not (flags & Search child keyrings also ) Then Go to not_this_keyring |
737 | If Not ptr Then Go to not_this_keyring |
740 | If assoc_array_ptr_is_shortcut(ptr) Then |
746 | If (index_key[0] & ASSOC_ARRAY_FAN_MASK) != 0 Then Go to not_this_keyring |
750 | node = assoc_array_ptr_to_node(ptr) |
751 | Go to begin_node |
754 | node = assoc_array_ptr_to_node(ptr) |
756 | If Not assoc_array_ptr_is_meta(ptr) Then Go to begin_node |
759 | descend_to_node : |
763 | kdebug("descend") |
764 | If assoc_array_ptr_is_shortcut(ptr) Then |
767 | BUG_ON(!assoc_array_ptr_is_node(ptr)) |
769 | node = assoc_array_ptr_to_node(ptr) |
771 | begin_node : |
772 | kdebug("begin_node") |
773 | slot = 0 |
774 | ascend_to_node : |
776 | When slot < Number of slots per node cycle |
779 | If assoc_array_ptr_is_meta(ptr) && back_pointer Then Go to descend_to_node |
782 | If Not keyring_ptr_is_keyring(ptr) Then Continue |
785 | key = keyring_ptr_to_key(ptr) |
788 | If flags & Give an error on excessive depth Then |
792 | Go to not_this_keyring |
796 | If Not (flags & Don't check permissions ) && key_task_permission(make_key_ref(key, possessed), cred, Require permission to search (keyring) or find (key) ) < 0 Then Continue |
805 | sp++ |
809 | Go to descend_to_keyring |
815 | ptr = READ_ONCE(back_pointer) |
816 | slot = parent_slot |
818 | If ptr && assoc_array_ptr_is_shortcut(ptr) Then |
820 | ptr = READ_ONCE(back_pointer) |
821 | slot = parent_slot |
823 | If Not ptr Then Go to not_this_keyring |
825 | node = assoc_array_ptr_to_node(ptr) |
826 | slot++ |
832 | If back_pointer Then |
834 | Go to ascend_to_node |
840 | not_this_keyring : |
842 | If sp <= 0 Then |
843 | kleave(" = false") |
844 | Return false |
848 | sp-- |
852 | kdebug("ascend to %d [%d]", key serial number , slot) |
853 | Go to ascend_to_node |
856 | found : |
857 | key = key_ref_to_ptr(result) |
859 | If Not (flags & Don't update times ) Then |
865 | kleave(" = true") |
866 | Return true |
Name | Describe |
---|---|
keyring_search_rcu | keyring_search_rcu - Search a keyring tree for a matching key under RCU*@keyring_ref: A pointer to the keyring with possession indicator |
keyring_detect_cycle | See if a cycle will will be created by inserting acyclic tree B in acyclic* tree A at the topmost level (ie: as a direct child of A).* Since we are adding B to A at the top level, checking for cycles should just |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |