Lines Matching refs:node

84 	struct tee_fs_htree_node_image node;  member
102 struct htree_node *node);
141 struct tee_fs_htree_node_image *node) in rpc_read_node() argument
144 node, sizeof(*node)); in rpc_read_node()
172 const struct tee_fs_htree_node_image *node) in rpc_write_node() argument
175 node, sizeof(*node)); in rpc_write_node()
179 struct htree_node *node) in traverse_post_order() argument
188 if (!node) in traverse_post_order()
191 res = traverse_post_order(targ, node->child[0]); in traverse_post_order()
195 res = traverse_post_order(targ, node->child[1]); in traverse_post_order()
199 return targ->cb(targ, node); in traverse_post_order()
220 struct htree_node *node = &ht->root; in find_closest_node() local
237 child = node->child[((node_id >> bit_idx) & 1)]; in find_closest_node()
239 return node; in find_closest_node()
240 node = child; in find_closest_node()
243 return node; in find_closest_node()
248 struct htree_node *node = find_closest_node(ht, node_id); in find_node() local
250 if (node && node->id == node_id) in find_node()
251 return node; in find_node()
258 struct htree_node *node; in get_node() local
262 node = find_closest_node(ht, node_id); in get_node()
263 if (!node) in get_node()
265 if (node->id == node_id) in get_node()
279 for (n = node->id + 1; n <= node_id; n++) { in get_node()
280 node = find_closest_node(ht, n); in get_node()
281 if (node->id == n) in get_node()
284 assert((n >> 1) == node->id); in get_node()
285 assert(!node->child[n & 1]); in get_node()
291 nc->parent = node; in get_node()
292 node->child[n & 1] = nc; in get_node()
293 node = nc; in get_node()
296 if (node->id > ht->imeta.max_node_id) in get_node()
297 ht->imeta.max_node_id = node->id; in get_node()
300 *node_ret = node; in get_node()
329 res = rpc_read_node(ht, 1, idx, &ht->root.node); in init_head_from_data()
333 if (!memcmp(ht->root.node.hash, hash, in init_head_from_data()
334 sizeof(ht->root.node.hash))) { in init_head_from_data()
357 res = rpc_read_node(ht, 1, idx, &ht->root.node); in init_head_from_data()
376 struct htree_node *node; in init_tree_from_data() local
382 node = find_node(ht, node_id >> 1); in init_tree_from_data()
383 if (!node) in init_tree_from_data()
385 committed_version = !!(node->node.flags & in init_tree_from_data()
396 nc->node = node_image; in init_tree_from_data()
403 static TEE_Result calc_node_hash(struct htree_node *node, in calc_node_hash() argument
408 uint8_t *ndata = (uint8_t *)&node->node + sizeof(node->node.hash); in calc_node_hash()
409 size_t nsize = sizeof(node->node) - sizeof(node->node.hash); in calc_node_hash()
425 if (node->child[0]) { in calc_node_hash()
426 res = crypto_hash_update(ctx, node->child[0]->node.hash, in calc_node_hash()
427 sizeof(node->child[0]->node.hash)); in calc_node_hash()
432 if (node->child[1]) { in calc_node_hash()
433 res = crypto_hash_update(ctx, node->child[1]->node.hash, in calc_node_hash()
434 sizeof(node->child[1]->node.hash)); in calc_node_hash()
492 res = crypto_authenc_update_aad(ctx, mode, ht->root.node.hash, in authenc_init()
582 struct htree_node *node) in verify_node() argument
588 if (node->parent) in verify_node()
589 res = calc_node_hash(node, NULL, ctx, digest); in verify_node()
591 res = calc_node_hash(node, &targ->ht->imeta.meta, ctx, digest); in verify_node()
593 consttime_memcmp(digest, node->node.hash, sizeof(digest))) in verify_node()
627 ht->root.node.hash); in init_root_node()
738 struct htree_node *node) in free_node() argument
740 if (node->parent) in free_node()
741 free(node); in free_node()
755 struct htree_node *node) in htree_sync_node_to_storage() argument
766 assert(node->dirty >= node->block_updated); in htree_sync_node_to_storage()
768 if (!node->dirty) in htree_sync_node_to_storage()
771 if (node->parent) { in htree_sync_node_to_storage()
772 uint32_t f = HTREE_NODE_COMMITTED_CHILD(node->id & 1); in htree_sync_node_to_storage()
774 node->parent->dirty = true; in htree_sync_node_to_storage()
775 node->parent->node.flags ^= f; in htree_sync_node_to_storage()
776 vers = !!(node->parent->node.flags & f); in htree_sync_node_to_storage()
786 res = calc_node_hash(node, meta, targ->arg, node->node.hash); in htree_sync_node_to_storage()
790 node->dirty = false; in htree_sync_node_to_storage()
791 node->block_updated = false; in htree_sync_node_to_storage()
793 return rpc_write_node(targ->ht, node->id, vers, &node->node); in htree_sync_node_to_storage()
843 memcpy(hash, ht->root.node.hash, sizeof(ht->root.node.hash)); in tee_fs_htree_sync_to_storage()
854 size_t block_num, struct htree_node **node) in get_block_node() argument
861 *node = nd; in get_block_node()
872 struct htree_node *node = NULL; in tee_fs_htree_write_block() local
880 res = get_block_node(ht, true, block_num, &node); in tee_fs_htree_write_block()
884 if (!node->block_updated) in tee_fs_htree_write_block()
885 node->node.flags ^= HTREE_NODE_COMMITTED_BLOCK; in tee_fs_htree_write_block()
887 block_vers = !!(node->node.flags & HTREE_NODE_COMMITTED_BLOCK); in tee_fs_htree_write_block()
894 res = authenc_init(&ctx, TEE_MODE_ENCRYPT, ht, &node->node, in tee_fs_htree_write_block()
898 res = authenc_encrypt_final(ctx, node->node.tag, block, in tee_fs_htree_write_block()
907 node->block_updated = true; in tee_fs_htree_write_block()
908 node->dirty = true; in tee_fs_htree_write_block()
922 struct htree_node *node; in tee_fs_htree_read_block() local
931 res = get_block_node(ht, false, block_num, &node); in tee_fs_htree_read_block()
935 block_vers = !!(node->node.flags & HTREE_NODE_COMMITTED_BLOCK); in tee_fs_htree_read_block()
950 res = authenc_init(&ctx, TEE_MODE_DECRYPT, ht, &node->node, in tee_fs_htree_read_block()
955 res = authenc_decrypt_final(ctx, node->node.tag, enc_block, in tee_fs_htree_read_block()
967 struct htree_node *node; in tee_fs_htree_truncate() local
973 node = find_closest_node(ht, ht->imeta.max_node_id); in tee_fs_htree_truncate()
974 assert(node && node->id == ht->imeta.max_node_id); in tee_fs_htree_truncate()
975 assert(!node->child[0] && !node->child[1]); in tee_fs_htree_truncate()
976 assert(node->parent); in tee_fs_htree_truncate()
977 assert(node->parent->child[node->id & 1] == node); in tee_fs_htree_truncate()
978 node->parent->child[node->id & 1] = NULL; in tee_fs_htree_truncate()
979 free(node); in tee_fs_htree_truncate()