Lines Matching refs:ctx

426 	struct keyring_read_iterator_context *ctx = data;  in keyring_read_iterator()  local
431 key->type->name, key->serial, ctx->count, ctx->qty); in keyring_read_iterator()
433 if (ctx->count >= ctx->qty) in keyring_read_iterator()
436 ret = put_user(key->serial, ctx->buffer); in keyring_read_iterator()
439 ctx->buffer++; in keyring_read_iterator()
440 ctx->count += sizeof(key->serial); in keyring_read_iterator()
454 struct keyring_read_iterator_context ctx; in keyring_read() local
468 ctx.qty = nr_keys * sizeof(key_serial_t); in keyring_read()
471 return ctx.qty; in keyring_read()
473 if (buflen > ctx.qty) in keyring_read()
474 ctx.qty = buflen; in keyring_read()
477 ctx.buffer = (key_serial_t __user *)buffer; in keyring_read()
478 ctx.count = 0; in keyring_read()
479 ret = assoc_array_iterate(&keyring->keys, keyring_read_iterator, &ctx); in keyring_read()
485 kleave(" = %zu [ok]", ctx.count); in keyring_read()
486 return ctx.count; in keyring_read()
527 struct keyring_search_context *ctx = iterator_data; in keyring_search_iterator() local
534 if (key->type != ctx->index_key.type) { in keyring_search_iterator()
540 if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) { in keyring_search_iterator()
543 ctx->result = ERR_PTR(-EKEYREVOKED); in keyring_search_iterator()
544 kleave(" = %d [invrev]", ctx->skipped_ret); in keyring_search_iterator()
548 if (key->expiry && ctx->now.tv_sec >= key->expiry) { in keyring_search_iterator()
549 if (!(ctx->flags & KEYRING_SEARCH_SKIP_EXPIRED)) in keyring_search_iterator()
550 ctx->result = ERR_PTR(-EKEYEXPIRED); in keyring_search_iterator()
551 kleave(" = %d [expire]", ctx->skipped_ret); in keyring_search_iterator()
557 if (!ctx->match_data.cmp(key, &ctx->match_data)) { in keyring_search_iterator()
563 if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) && in keyring_search_iterator()
564 key_task_permission(make_key_ref(key, ctx->possessed), in keyring_search_iterator()
565 ctx->cred, KEY_NEED_SEARCH) < 0) { in keyring_search_iterator()
566 ctx->result = ERR_PTR(-EACCES); in keyring_search_iterator()
567 kleave(" = %d [!perm]", ctx->skipped_ret); in keyring_search_iterator()
571 if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) { in keyring_search_iterator()
575 ctx->result = ERR_PTR(key->reject_error); in keyring_search_iterator()
576 kleave(" = %d [neg]", ctx->skipped_ret); in keyring_search_iterator()
582 ctx->result = make_key_ref(key, ctx->possessed); in keyring_search_iterator()
587 return ctx->skipped_ret; in keyring_search_iterator()
595 static int search_keyring(struct key *keyring, struct keyring_search_context *ctx) in search_keyring() argument
597 if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_DIRECT) { in search_keyring()
602 &ctx->index_key); in search_keyring()
603 return object ? ctx->iterator(object, ctx) : 0; in search_keyring()
605 return assoc_array_iterate(&keyring->keys, ctx->iterator, ctx); in search_keyring()
613 struct keyring_search_context *ctx) in search_nested_keyrings() argument
629 ctx->index_key.type->name, in search_nested_keyrings()
630 ctx->index_key.description); in search_nested_keyrings()
633 BUG_ON((ctx->flags & STATE_CHECKS) == 0 || in search_nested_keyrings()
634 (ctx->flags & STATE_CHECKS) == STATE_CHECKS); in search_nested_keyrings()
636 if (ctx->index_key.description) in search_nested_keyrings()
637 ctx->index_key.desc_len = strlen(ctx->index_key.description); in search_nested_keyrings()
642 if (ctx->match_data.lookup_type == KEYRING_SEARCH_LOOKUP_ITERATE || in search_nested_keyrings()
643 keyring_compare_object(keyring, &ctx->index_key)) { in search_nested_keyrings()
644 ctx->skipped_ret = 2; in search_nested_keyrings()
645 switch (ctx->iterator(keyring_key_to_ptr(keyring), ctx)) { in search_nested_keyrings()
655 ctx->skipped_ret = 0; in search_nested_keyrings()
667 if (search_keyring(keyring, ctx)) in search_nested_keyrings()
735 if (ctx->flags & KEYRING_SEARCH_DETECT_TOO_DEEP) { in search_nested_keyrings()
736 ctx->result = ERR_PTR(-ELOOP); in search_nested_keyrings()
743 if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) && in search_nested_keyrings()
744 key_task_permission(make_key_ref(key, ctx->possessed), in search_nested_keyrings()
745 ctx->cred, KEY_NEED_SEARCH) < 0) in search_nested_keyrings()
806 key = key_ref_to_ptr(ctx->result); in search_nested_keyrings()
808 if (!(ctx->flags & KEYRING_SEARCH_NO_UPDATE_TIME)) { in search_nested_keyrings()
809 key->last_used_at = ctx->now.tv_sec; in search_nested_keyrings()
810 keyring->last_used_at = ctx->now.tv_sec; in search_nested_keyrings()
812 stack[--sp].keyring->last_used_at = ctx->now.tv_sec; in search_nested_keyrings()
851 struct keyring_search_context *ctx) in keyring_search_aux() argument
856 ctx->iterator = keyring_search_iterator; in keyring_search_aux()
857 ctx->possessed = is_key_possessed(keyring_ref); in keyring_search_aux()
858 ctx->result = ERR_PTR(-EAGAIN); in keyring_search_aux()
866 if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM)) { in keyring_search_aux()
867 err = key_task_permission(keyring_ref, ctx->cred, KEY_NEED_SEARCH); in keyring_search_aux()
873 ctx->now = current_kernel_time(); in keyring_search_aux()
874 if (search_nested_keyrings(keyring, ctx)) in keyring_search_aux()
875 __key_get(key_ref_to_ptr(ctx->result)); in keyring_search_aux()
877 return ctx->result; in keyring_search_aux()
893 struct keyring_search_context ctx = { in keyring_search() local
906 ret = type->match_preparse(&ctx.match_data); in keyring_search()
911 key = keyring_search_aux(keyring, &ctx); in keyring_search()
914 type->match_free(&ctx.match_data); in keyring_search()
1028 struct keyring_search_context *ctx = iterator_data; in keyring_detect_cycle_iterator() local
1035 if (key != ctx->match_data.raw_data) in keyring_detect_cycle_iterator()
1038 ctx->result = ERR_PTR(-EDEADLK); in keyring_detect_cycle_iterator()
1051 struct keyring_search_context ctx = { in keyring_detect_cycle() local
1063 search_nested_keyrings(B, &ctx); in keyring_detect_cycle()
1065 return PTR_ERR(ctx.result) == -EAGAIN ? 0 : PTR_ERR(ctx.result); in keyring_detect_cycle()