Lines Matching refs:ctx
460 struct keyring_read_iterator_context *ctx = data; in keyring_read_iterator() local
464 key->type->name, key->serial, ctx->count, ctx->buflen); in keyring_read_iterator()
466 if (ctx->count >= ctx->buflen) in keyring_read_iterator()
469 *ctx->buffer++ = key->serial; in keyring_read_iterator()
470 ctx->count += sizeof(key->serial); in keyring_read_iterator()
484 struct keyring_read_iterator_context ctx; in keyring_read() local
494 ctx.buffer = (key_serial_t *)buffer; in keyring_read()
495 ctx.buflen = buflen; in keyring_read()
496 ctx.count = 0; in keyring_read()
498 keyring_read_iterator, &ctx); in keyring_read()
576 struct keyring_search_context *ctx = iterator_data; in keyring_search_iterator() local
584 if (key->type != ctx->index_key.type) { in keyring_search_iterator()
590 if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) { in keyring_search_iterator()
595 ctx->result = ERR_PTR(-EKEYREVOKED); in keyring_search_iterator()
596 kleave(" = %d [invrev]", ctx->skipped_ret); in keyring_search_iterator()
600 if (expiry && ctx->now >= expiry) { in keyring_search_iterator()
601 if (!(ctx->flags & KEYRING_SEARCH_SKIP_EXPIRED)) in keyring_search_iterator()
602 ctx->result = ERR_PTR(-EKEYEXPIRED); in keyring_search_iterator()
603 kleave(" = %d [expire]", ctx->skipped_ret); in keyring_search_iterator()
609 if (!ctx->match_data.cmp(key, &ctx->match_data)) { in keyring_search_iterator()
615 if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) && in keyring_search_iterator()
616 key_task_permission(make_key_ref(key, ctx->possessed), in keyring_search_iterator()
617 ctx->cred, KEY_NEED_SEARCH) < 0) { in keyring_search_iterator()
618 ctx->result = ERR_PTR(-EACCES); in keyring_search_iterator()
619 kleave(" = %d [!perm]", ctx->skipped_ret); in keyring_search_iterator()
623 if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) { in keyring_search_iterator()
626 ctx->result = ERR_PTR(state); in keyring_search_iterator()
627 kleave(" = %d [neg]", ctx->skipped_ret); in keyring_search_iterator()
633 ctx->result = make_key_ref(key, ctx->possessed); in keyring_search_iterator()
638 return ctx->skipped_ret; in keyring_search_iterator()
646 static int search_keyring(struct key *keyring, struct keyring_search_context *ctx) in search_keyring() argument
648 if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_DIRECT) { in search_keyring()
653 &ctx->index_key); in search_keyring()
654 return object ? ctx->iterator(object, ctx) : 0; in search_keyring()
656 return assoc_array_iterate(&keyring->keys, ctx->iterator, ctx); in search_keyring()
664 struct keyring_search_context *ctx) in search_nested_keyrings() argument
680 ctx->index_key.type->name, in search_nested_keyrings()
681 ctx->index_key.description); in search_nested_keyrings()
684 BUG_ON((ctx->flags & STATE_CHECKS) == 0 || in search_nested_keyrings()
685 (ctx->flags & STATE_CHECKS) == STATE_CHECKS); in search_nested_keyrings()
687 if (ctx->index_key.description) in search_nested_keyrings()
688 key_set_index_key(&ctx->index_key); in search_nested_keyrings()
693 if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_ITERATE || in search_nested_keyrings()
694 keyring_compare_object(keyring, &ctx->index_key)) { in search_nested_keyrings()
695 ctx->skipped_ret = 2; in search_nested_keyrings()
696 switch (ctx->iterator(keyring_key_to_ptr(keyring), ctx)) { in search_nested_keyrings()
706 ctx->skipped_ret = 0; in search_nested_keyrings()
718 if (search_keyring(keyring, ctx)) in search_nested_keyrings()
729 if (!(ctx->flags & KEYRING_SEARCH_RECURSE)) in search_nested_keyrings()
787 if (ctx->flags & KEYRING_SEARCH_DETECT_TOO_DEEP) { in search_nested_keyrings()
788 ctx->result = ERR_PTR(-ELOOP); in search_nested_keyrings()
795 if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) && in search_nested_keyrings()
796 key_task_permission(make_key_ref(key, ctx->possessed), in search_nested_keyrings()
797 ctx->cred, KEY_NEED_SEARCH) < 0) in search_nested_keyrings()
856 key = key_ref_to_ptr(ctx->result); in search_nested_keyrings()
858 if (!(ctx->flags & KEYRING_SEARCH_NO_UPDATE_TIME)) { in search_nested_keyrings()
859 key->last_used_at = ctx->now; in search_nested_keyrings()
860 keyring->last_used_at = ctx->now; in search_nested_keyrings()
862 stack[--sp].keyring->last_used_at = ctx->now; in search_nested_keyrings()
903 struct keyring_search_context *ctx) in keyring_search_rcu() argument
908 ctx->iterator = keyring_search_iterator; in keyring_search_rcu()
909 ctx->possessed = is_key_possessed(keyring_ref); in keyring_search_rcu()
910 ctx->result = ERR_PTR(-EAGAIN); in keyring_search_rcu()
918 if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM)) { in keyring_search_rcu()
919 err = key_task_permission(keyring_ref, ctx->cred, KEY_NEED_SEARCH); in keyring_search_rcu()
924 ctx->now = ktime_get_real_seconds(); in keyring_search_rcu()
925 if (search_nested_keyrings(keyring, ctx)) in keyring_search_rcu()
926 __key_get(key_ref_to_ptr(ctx->result)); in keyring_search_rcu()
927 return ctx->result; in keyring_search_rcu()
945 struct keyring_search_context ctx = { in keyring_search() local
959 ctx.flags |= KEYRING_SEARCH_RECURSE; in keyring_search()
961 ret = type->match_preparse(&ctx.match_data); in keyring_search()
967 key = keyring_search_rcu(keyring, &ctx); in keyring_search()
971 type->match_free(&ctx.match_data); in keyring_search()
1195 struct keyring_search_context *ctx = iterator_data; in keyring_detect_cycle_iterator() local
1202 if (key != ctx->match_data.raw_data) in keyring_detect_cycle_iterator()
1205 ctx->result = ERR_PTR(-EDEADLK); in keyring_detect_cycle_iterator()
1218 struct keyring_search_context ctx = { in keyring_detect_cycle() local
1231 search_nested_keyrings(B, &ctx); in keyring_detect_cycle()
1233 return PTR_ERR(ctx.result) == -EAGAIN ? 0 : PTR_ERR(ctx.result); in keyring_detect_cycle()