Lines Matching refs:fh

1955 static void dump_fh(struct rpmb_file_handle *fh)  in dump_fh()  argument
1957 DMSG("fh->filename=%s", fh->filename); in dump_fh()
1958 DMSG("fh->rpmb_fat_address=%u", fh->rpmb_fat_address); in dump_fh()
1959 DMSG("fh->fat_entry.start_address=%u", fh->fat_entry.start_address); in dump_fh()
1960 DMSG("fh->fat_entry.data_size=%u", fh->fat_entry.data_size); in dump_fh()
1963 static void dump_fh(struct rpmb_file_handle *fh __unused) in dump_fh()
2016 struct rpmb_file_handle *fh = NULL; in alloc_file_handle() local
2018 fh = calloc(1, sizeof(struct rpmb_file_handle)); in alloc_file_handle()
2019 if (!fh) in alloc_file_handle()
2023 create_filename(fh->filename, sizeof(fh->filename), po, in alloc_file_handle()
2026 return fh; in alloc_file_handle()
2032 static TEE_Result write_fat_entry(struct rpmb_file_handle *fh) in write_fat_entry() argument
2037 if (fh->rpmb_fat_address < sizeof(struct rpmb_fs_partition)) { in write_fat_entry()
2042 if (fh->rpmb_fat_address % sizeof(struct rpmb_fat_entry) != 0) { in write_fat_entry()
2047 res = tee_rpmb_write(fh->rpmb_fat_address, (uint8_t *)&fh->fat_entry, in write_fat_entry()
2054 res = fat_entry_dir_update(&fh->fat_entry, in write_fat_entry()
2055 fh->rpmb_fat_address); in write_fat_entry()
2070 struct rpmb_file_handle *fh = NULL; in rpmb_fs_setup() local
2142 fh = alloc_file_handle(NULL, false); in rpmb_fs_setup()
2143 if (!fh) { in rpmb_fs_setup()
2147 fh->fat_entry.flags = FILE_IS_LAST_ENTRY; in rpmb_fs_setup()
2148 fh->rpmb_fat_address = partition_data->fat_start_address; in rpmb_fs_setup()
2151 res = write_fat_entry(fh); in rpmb_fs_setup()
2176 free(fh); in rpmb_fs_setup()
2201 static TEE_Result read_fat(struct rpmb_file_handle *fh, tee_mm_pool_t *p) in read_fat() argument
2211 DMSG("fat_address %d", fh->rpmb_fat_address); in read_fat()
2232 if ((!strcmp(fh->filename, fe->filename)) && in read_fat()
2235 fh->rpmb_fat_address = fat_address; in read_fat()
2236 memcpy(&fh->fat_entry, fe, sizeof(*fe)); in read_fat()
2255 fh->rpmb_fat_address == 0) { in read_fat()
2256 fh->rpmb_fat_address = fat_address; in read_fat()
2257 memcpy(&fh->fat_entry, fe, in read_fat()
2262 fh->rpmb_fat_address == fat_address) { in read_fat()
2315 if (!fh->rpmb_fat_address) in read_fat()
2338 static TEE_Result rpmb_fs_open_internal(struct rpmb_file_handle *fh, in rpmb_fs_open_internal() argument
2351 fh->uuid = uuid; in rpmb_fs_open_internal()
2366 res = read_fat(fh, &p); in rpmb_fs_open_internal()
2371 res = read_fat(fh, NULL); in rpmb_fs_open_internal()
2381 if ((fh->fat_entry.flags & FILE_IS_ACTIVE) == 0) { in rpmb_fs_open_internal()
2382 memset(&fh->fat_entry, 0, in rpmb_fs_open_internal()
2384 memcpy(fh->fat_entry.filename, fh->filename, in rpmb_fs_open_internal()
2385 strlen(fh->filename)); in rpmb_fs_open_internal()
2387 fh->fat_entry.flags = FILE_IS_ACTIVE; in rpmb_fs_open_internal()
2389 res = generate_fek(&fh->fat_entry, uuid); in rpmb_fs_open_internal()
2393 (void *)fh->fat_entry.fek); in rpmb_fs_open_internal()
2394 DHEXDUMP(fh->fat_entry.fek, sizeof(fh->fat_entry.fek)); in rpmb_fs_open_internal()
2396 res = write_fat_entry(fh); in rpmb_fs_open_internal()
2410 struct rpmb_file_handle *fh = (struct rpmb_file_handle *)*tfh; in rpmb_fs_close() local
2412 free(fh); in rpmb_fs_close()
2420 struct rpmb_file_handle *fh = (struct rpmb_file_handle *)tfh; in rpmb_fs_read() local
2431 dump_fh(fh); in rpmb_fs_read()
2433 res = read_fat(fh, NULL); in rpmb_fs_read()
2437 if (pos >= fh->fat_entry.data_size) { in rpmb_fs_read()
2442 size = MIN(size, fh->fat_entry.data_size - pos); in rpmb_fs_read()
2445 res = tee_rpmb_read(fh->fat_entry.start_address + pos, in rpmb_fs_read()
2446 buf_core, size, fh->fat_entry.fek, in rpmb_fs_read()
2447 fh->uuid); in rpmb_fs_read()
2457 res = tee_rpmb_read(fh->fat_entry.start_address + pos, in rpmb_fs_read()
2458 buf_user, size, fh->fat_entry.fek, in rpmb_fs_read()
2459 fh->uuid); in rpmb_fs_read()
2472 static TEE_Result update_write_helper(struct rpmb_file_handle *fh, in update_write_helper() argument
2477 uintptr_t old_fat = fh->fat_entry.start_address; in update_write_helper()
2478 size_t old_size = fh->fat_entry.data_size; in update_write_helper()
2503 rd_size, fh->fat_entry.fek, in update_write_helper()
2504 fh->uuid); in update_write_helper()
2532 fh->fat_entry.fek, fh->uuid); in update_write_helper()
2544 static TEE_Result rpmb_fs_write_primitive(struct rpmb_file_handle *fh, in rpmb_fs_write_primitive() argument
2563 dump_fh(fh); in rpmb_fs_write_primitive()
2577 res = read_fat(fh, &p); in rpmb_fs_write_primitive()
2581 if (fh->fat_entry.flags & FILE_IS_LAST_ENTRY) in rpmb_fs_write_primitive()
2588 if (ADD_OVERFLOW(fh->fat_entry.start_address, pos, &start_addr)) { in rpmb_fs_write_primitive()
2593 if (end <= fh->fat_entry.data_size && in rpmb_fs_write_primitive()
2598 size, fh->fat_entry.fek, fh->uuid); in rpmb_fs_write_primitive()
2604 size_t new_size = MAX(end, fh->fat_entry.data_size); in rpmb_fs_write_primitive()
2617 res = update_write_helper(fh, pos, buf, size, in rpmb_fs_write_primitive()
2620 fh->fat_entry.data_size = new_size; in rpmb_fs_write_primitive()
2621 fh->fat_entry.start_address = new_fat_entry; in rpmb_fs_write_primitive()
2623 res = write_fat_entry(fh); in rpmb_fs_write_primitive()
2667 static TEE_Result rpmb_fs_remove_internal(struct rpmb_file_handle *fh) in rpmb_fs_remove_internal() argument
2671 res = read_fat(fh, NULL); in rpmb_fs_remove_internal()
2676 memset(&fh->fat_entry, 0, sizeof(struct rpmb_fat_entry)); in rpmb_fs_remove_internal()
2677 return write_fat_entry(fh); in rpmb_fs_remove_internal()
2683 struct rpmb_file_handle *fh = alloc_file_handle(po, po->temporary); in rpmb_fs_remove() local
2685 if (!fh) in rpmb_fs_remove()
2690 res = rpmb_fs_remove_internal(fh); in rpmb_fs_remove()
2694 free(fh); in rpmb_fs_remove()
2774 struct rpmb_file_handle *fh = (struct rpmb_file_handle *)tfh; in rpmb_fs_truncate() local
2792 res = read_fat(fh, NULL); in rpmb_fs_truncate()
2796 if (newsize > fh->fat_entry.data_size) { in rpmb_fs_truncate()
2809 res = read_fat(fh, &p); in rpmb_fs_truncate()
2820 if (fh->fat_entry.data_size) { in rpmb_fs_truncate()
2821 res = tee_rpmb_read(fh->fat_entry.start_address, in rpmb_fs_truncate()
2822 newbuf, fh->fat_entry.data_size, in rpmb_fs_truncate()
2823 fh->fat_entry.fek, fh->uuid); in rpmb_fs_truncate()
2830 newsize, fh->fat_entry.fek, fh->uuid); in rpmb_fs_truncate()
2836 newaddr = fh->fat_entry.start_address; in rpmb_fs_truncate()
2840 fh->fat_entry.data_size = newsize; in rpmb_fs_truncate()
2841 fh->fat_entry.start_address = newaddr; in rpmb_fs_truncate()
2842 res = write_fat_entry(fh); in rpmb_fs_truncate()
3023 struct rpmb_file_handle *fh = alloc_file_handle(po, po->temporary); in rpmb_fs_open() local
3025 if (!fh) in rpmb_fs_open()
3030 res = rpmb_fs_open_internal(fh, &po->uuid, false); in rpmb_fs_open()
3032 *size = fh->fat_entry.data_size; in rpmb_fs_open()
3037 free(fh); in rpmb_fs_open()
3039 *ret_fh = (struct tee_file_handle *)fh; in rpmb_fs_open()
3053 struct rpmb_file_handle *fh = alloc_file_handle(po, po->temporary); in rpmb_fs_create() local
3058 if (!fh) in rpmb_fs_create()
3062 res = rpmb_fs_open_internal(fh, &po->uuid, true); in rpmb_fs_create()
3067 res = rpmb_fs_write_primitive(fh, pos, head, head_size); in rpmb_fs_create()
3074 res = rpmb_fs_write_primitive(fh, pos, attr, attr_size); in rpmb_fs_create()
3082 res = rpmb_fs_write_primitive(fh, pos, data_core, in rpmb_fs_create()
3094 res = rpmb_fs_write_primitive(fh, pos, data_user, in rpmb_fs_create()
3115 create_filename(fh->filename, sizeof(fh->filename), po, false); in rpmb_fs_create()
3120 rpmb_fs_remove_internal(fh); in rpmb_fs_create()
3121 free(fh); in rpmb_fs_create()
3123 *ret_fh = (struct tee_file_handle *)fh; in rpmb_fs_create()
3148 struct rpmb_file_handle *fh = calloc(1, sizeof(*fh)); in tee_rpmb_fs_raw_open() local
3151 if (!fh) in tee_rpmb_fs_raw_open()
3154 snprintf(fh->filename, sizeof(fh->filename), "/%s", fname); in tee_rpmb_fs_raw_open()
3158 res = rpmb_fs_open_internal(fh, &uuid, create); in tee_rpmb_fs_raw_open()
3164 rpmb_fs_remove_internal(fh); in tee_rpmb_fs_raw_open()
3165 free(fh); in tee_rpmb_fs_raw_open()
3167 *ret_fh = (struct tee_file_handle *)fh; in tee_rpmb_fs_raw_open()