From d687b53249f4c2ec23a2be922760d169fbb9095e Mon Sep 17 00:00:00 2001 From: CTCaer Date: Wed, 27 Mar 2024 09:00:53 +0200 Subject: [PATCH] bdk: heap: add zalloc and utilize it --- bdk/libs/compr/lz4.c | 2 +- bdk/mem/heap.c | 9 ++++++++- bdk/mem/heap.h | 3 ++- bdk/sec/se.c | 8 ++++---- bdk/storage/emmc.c | 6 +++--- bdk/utils/dirlist.c | 6 +++--- bdk/utils/ini.c | 6 +++--- bdk/utils/util.c | 2 +- 8 files changed, 25 insertions(+), 17 deletions(-) diff --git a/bdk/libs/compr/lz4.c b/bdk/libs/compr/lz4.c index 4f6f425..689c4d1 100644 --- a/bdk/libs/compr/lz4.c +++ b/bdk/libs/compr/lz4.c @@ -107,7 +107,7 @@ **************************************/ #include /* malloc, calloc, free */ #define ALLOC(s) malloc(s) -#define ALLOC_AND_ZERO(s) calloc(1,s) +#define ALLOC_AND_ZERO(s) zalloc(s) #define FREEMEM free #include /* memset, memcpy */ #define MEM_INIT memset diff --git a/bdk/mem/heap.c b/bdk/mem/heap.c index 9c5b406..ad70729 100644 --- a/bdk/mem/heap.c +++ b/bdk/mem/heap.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018-2020 CTCaer + * Copyright (c) 2018-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -159,6 +159,13 @@ void *calloc(u32 num, u32 size) return res; } +void *zalloc(u32 size) +{ + void *res = (void *)_heap_alloc(size); + memset(res, 0, ALIGN(size, sizeof(hnode_t))); // Clear the aligned size. + return res; +} + void free(void *buf) { if (buf >= _heap.start) diff --git a/bdk/mem/heap.h b/bdk/mem/heap.h index 9150104..c898ee0 100644 --- a/bdk/mem/heap.h +++ b/bdk/mem/heap.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018-2020 CTCaer + * Copyright (c) 2018-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -48,6 +48,7 @@ void heap_init(void *base); void heap_set(heap_t *heap); void *malloc(u32 size); void *calloc(u32 num, u32 size); +void *zalloc(u32 size); void free(void *buf); void heap_monitor(heap_monitor_t *mon, bool print_node_stats); diff --git a/bdk/sec/se.c b/bdk/sec/se.c index c0f5406..b6a2841 100644 --- a/bdk/sec/se.c +++ b/bdk/sec/se.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018-2022 CTCaer + * Copyright (c) 2018-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -182,7 +182,7 @@ static int _se_execute_one_block(u32 op, void *dst, u32 dst_size, const void *sr if (!src || !dst) return 0; - u8 *block = (u8 *)calloc(1, SE_AES_BLOCK_SIZE); + u8 *block = (u8 *)zalloc(SE_AES_BLOCK_SIZE); SE(SE_CRYPTO_BLOCK_COUNT_REG) = 1 - 1; @@ -657,8 +657,8 @@ void se_get_aes_keys(u8 *buf, u8 *keys, u32 keysize) int se_aes_cmac_128(u32 ks, void *dst, const void *src, u32 src_size) { int res = 0; - u8 *key = (u8 *)calloc(1, SE_KEY_128_SIZE); - u8 *last_block = (u8 *)calloc(1, SE_AES_BLOCK_SIZE); + u8 *key = (u8 *)zalloc(SE_KEY_128_SIZE); + u8 *last_block = (u8 *)zalloc(SE_AES_BLOCK_SIZE); se_aes_iv_clear(ks); se_aes_iv_updated_clear(ks); diff --git a/bdk/storage/emmc.c b/bdk/storage/emmc.c index 5412fb5..b1ab03d 100644 --- a/bdk/storage/emmc.c +++ b/bdk/storage/emmc.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2019-2022 CTCaer + * Copyright (c) 2019-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -135,7 +135,7 @@ int emmc_set_partition(u32 partition) { return sdmmc_storage_set_mmc_partition(& void emmc_gpt_parse(link_t *gpt) { - gpt_t *gpt_buf = (gpt_t *)calloc(GPT_NUM_BLOCKS, EMMC_BLOCKSIZE); + gpt_t *gpt_buf = (gpt_t *)zalloc(GPT_NUM_BLOCKS * EMMC_BLOCKSIZE); #ifdef BDK_EMUMMC_ENABLE emummc_storage_read(GPT_FIRST_LBA, GPT_NUM_BLOCKS, gpt_buf); @@ -149,7 +149,7 @@ void emmc_gpt_parse(link_t *gpt) for (u32 i = 0; i < gpt_buf->header.num_part_ents; i++) { - emmc_part_t *part = (emmc_part_t *)calloc(sizeof(emmc_part_t), 1); + emmc_part_t *part = (emmc_part_t *)zalloc(sizeof(emmc_part_t)); if (gpt_buf->entries[i].lba_start < gpt_buf->header.first_use_lba) continue; diff --git a/bdk/utils/dirlist.c b/bdk/utils/dirlist.c index 3b09d1d..5197c01 100644 --- a/bdk/utils/dirlist.c +++ b/bdk/utils/dirlist.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 CTCaer + * Copyright (c) 2018-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -30,8 +30,8 @@ char *dirlist(const char *directory, const char *pattern, bool includeHiddenFile DIR dir; FILINFO fno; - char *dir_entries = (char *)calloc(MAX_ENTRIES, 256); - char *temp = (char *)calloc(1, 256); + char *dir_entries = (char *)zalloc(MAX_ENTRIES * 256); + char *temp = (char *)zalloc(256); if (!pattern && !f_opendir(&dir, directory)) { diff --git a/bdk/utils/ini.c b/bdk/utils/ini.c index 7e13ff3..104b261 100644 --- a/bdk/utils/ini.c +++ b/bdk/utils/ini.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2018 naehrwert - * Copyright (c) 2018-2022 CTCaer + * Copyright (c) 2018-2024 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -41,7 +41,7 @@ ini_sec_t *_ini_create_section(link_t *dst, ini_sec_t *csec, char *name, u8 type // Calculate total allocation size. u32 len = name ? strlen(name) + 1 : 0; - char *buf = calloc(sizeof(ini_sec_t) + len, 1); + char *buf = zalloc(sizeof(ini_sec_t) + len); csec = (ini_sec_t *)buf; csec->name = strcpy_ns(buf + sizeof(ini_sec_t), name); @@ -144,7 +144,7 @@ int ini_parse(link_t *dst, char *ini_path, bool is_dir) // Calculate total allocation size. u32 klen = strlen(&lbuf[0]) + 1; u32 vlen = strlen(&lbuf[i + 1]) + 1; - char *buf = calloc(sizeof(ini_kv_t) + klen + vlen, 1); + char *buf = zalloc(sizeof(ini_kv_t) + klen + vlen); ini_kv_t *kv = (ini_kv_t *)buf; buf += sizeof(ini_kv_t); diff --git a/bdk/utils/util.c b/bdk/utils/util.c index 630fbf2..0f97971 100644 --- a/bdk/utils/util.c +++ b/bdk/utils/util.c @@ -211,7 +211,7 @@ u32 crc32_calc(u32 crc, const u8 *buf, u32 len) // Calculate CRC table. if (!table) { - table = calloc(256, sizeof(u32)); + table = zalloc(256 * sizeof(u32)); for (u32 i = 0; i < 256; i++) { u32 rem = i;