Lines Matching refs:node

83 	struct tee_fs_htree_node_image node;  member
101 struct htree_node *node);
140 struct tee_fs_htree_node_image *node) in rpc_read_node() argument
143 node, sizeof(*node)); in rpc_read_node()
171 const struct tee_fs_htree_node_image *node) in rpc_write_node() argument
174 node, sizeof(*node)); in rpc_write_node()
178 struct htree_node *node) in traverse_post_order() argument
187 if (!node) in traverse_post_order()
190 res = traverse_post_order(targ, node->child[0]); in traverse_post_order()
194 res = traverse_post_order(targ, node->child[1]); in traverse_post_order()
198 return targ->cb(targ, node); in traverse_post_order()
219 struct htree_node *node = &ht->root; in find_closest_node() local
236 child = node->child[((node_id >> bit_idx) & 1)]; in find_closest_node()
238 return node; in find_closest_node()
239 node = child; in find_closest_node()
242 return node; in find_closest_node()
247 struct htree_node *node = find_closest_node(ht, node_id); in find_node() local
249 if (node && node->id == node_id) in find_node()
250 return node; in find_node()
257 struct htree_node *node; in get_node() local
261 node = find_closest_node(ht, node_id); in get_node()
262 if (!node) in get_node()
264 if (node->id == node_id) in get_node()
278 for (n = node->id + 1; n <= node_id; n++) { in get_node()
279 node = find_closest_node(ht, n); in get_node()
280 if (node->id == n) in get_node()
283 assert((n >> 1) == node->id); in get_node()
284 assert(!node->child[n & 1]); in get_node()
290 nc->parent = node; in get_node()
291 node->child[n & 1] = nc; in get_node()
292 node = nc; in get_node()
295 if (node->id > ht->imeta.max_node_id) in get_node()
296 ht->imeta.max_node_id = node->id; in get_node()
299 *node_ret = node; in get_node()
328 res = rpc_read_node(ht, 1, idx, &ht->root.node); in init_head_from_data()
332 if (!memcmp(ht->root.node.hash, hash, in init_head_from_data()
333 sizeof(ht->root.node.hash))) { in init_head_from_data()
356 res = rpc_read_node(ht, 1, idx, &ht->root.node); in init_head_from_data()
372 struct htree_node *node; in init_tree_from_data() local
378 node = find_node(ht, node_id >> 1); in init_tree_from_data()
379 if (!node) in init_tree_from_data()
381 committed_version = !!(node->node.flags & in init_tree_from_data()
392 nc->node = node_image; in init_tree_from_data()
399 static TEE_Result calc_node_hash(struct htree_node *node, in calc_node_hash() argument
404 uint8_t *ndata = (uint8_t *)&node->node + sizeof(node->node.hash); in calc_node_hash()
405 size_t nsize = sizeof(node->node) - sizeof(node->node.hash); in calc_node_hash()
421 if (node->child[0]) { in calc_node_hash()
422 res = crypto_hash_update(ctx, node->child[0]->node.hash, in calc_node_hash()
423 sizeof(node->child[0]->node.hash)); in calc_node_hash()
428 if (node->child[1]) { in calc_node_hash()
429 res = crypto_hash_update(ctx, node->child[1]->node.hash, in calc_node_hash()
430 sizeof(node->child[1]->node.hash)); in calc_node_hash()
473 res = crypto_authenc_update_aad(ctx, mode, ht->root.node.hash, in authenc_init()
563 struct htree_node *node) in verify_node() argument
569 if (node->parent) in verify_node()
570 res = calc_node_hash(node, NULL, ctx, digest); in verify_node()
572 res = calc_node_hash(node, &targ->ht->imeta.meta, ctx, digest); in verify_node()
574 consttime_memcmp(digest, node->node.hash, sizeof(digest))) in verify_node()
608 ht->root.node.hash); in init_root_node()
684 struct htree_node *node) in free_node() argument
686 if (node->parent) in free_node()
687 free(node); in free_node()
701 struct htree_node *node) in htree_sync_node_to_storage() argument
712 assert(node->dirty >= node->block_updated); in htree_sync_node_to_storage()
714 if (!node->dirty) in htree_sync_node_to_storage()
717 if (node->parent) { in htree_sync_node_to_storage()
718 uint32_t f = HTREE_NODE_COMMITTED_CHILD(node->id & 1); in htree_sync_node_to_storage()
720 node->parent->dirty = true; in htree_sync_node_to_storage()
721 node->parent->node.flags ^= f; in htree_sync_node_to_storage()
722 vers = !!(node->parent->node.flags & f); in htree_sync_node_to_storage()
732 res = calc_node_hash(node, meta, targ->arg, node->node.hash); in htree_sync_node_to_storage()
736 node->dirty = false; in htree_sync_node_to_storage()
737 node->block_updated = false; in htree_sync_node_to_storage()
739 return rpc_write_node(targ->ht, node->id, vers, &node->node); in htree_sync_node_to_storage()
789 memcpy(hash, ht->root.node.hash, sizeof(ht->root.node.hash)); in tee_fs_htree_sync_to_storage()
798 size_t block_num, struct htree_node **node) in get_block_node() argument
805 *node = nd; in get_block_node()
816 struct htree_node *node = NULL; in tee_fs_htree_write_block() local
824 res = get_block_node(ht, true, block_num, &node); in tee_fs_htree_write_block()
828 if (!node->block_updated) in tee_fs_htree_write_block()
829 node->node.flags ^= HTREE_NODE_COMMITTED_BLOCK; in tee_fs_htree_write_block()
831 block_vers = !!(node->node.flags & HTREE_NODE_COMMITTED_BLOCK); in tee_fs_htree_write_block()
838 res = authenc_init(&ctx, TEE_MODE_ENCRYPT, ht, &node->node, in tee_fs_htree_write_block()
842 res = authenc_encrypt_final(ctx, node->node.tag, block, in tee_fs_htree_write_block()
851 node->block_updated = true; in tee_fs_htree_write_block()
852 node->dirty = true; in tee_fs_htree_write_block()
866 struct htree_node *node; in tee_fs_htree_read_block() local
875 res = get_block_node(ht, false, block_num, &node); in tee_fs_htree_read_block()
879 block_vers = !!(node->node.flags & HTREE_NODE_COMMITTED_BLOCK); in tee_fs_htree_read_block()
894 res = authenc_init(&ctx, TEE_MODE_DECRYPT, ht, &node->node, in tee_fs_htree_read_block()
899 res = authenc_decrypt_final(ctx, node->node.tag, enc_block, in tee_fs_htree_read_block()
911 struct htree_node *node; in tee_fs_htree_truncate() local
917 node = find_closest_node(ht, ht->imeta.max_node_id); in tee_fs_htree_truncate()
918 assert(node && node->id == ht->imeta.max_node_id); in tee_fs_htree_truncate()
919 assert(!node->child[0] && !node->child[1]); in tee_fs_htree_truncate()
920 assert(node->parent); in tee_fs_htree_truncate()
921 assert(node->parent->child[node->id & 1] == node); in tee_fs_htree_truncate()
922 node->parent->child[node->id & 1] = NULL; in tee_fs_htree_truncate()
923 free(node); in tee_fs_htree_truncate()