Fix all the bugs

- Mem leaks
- Stack corruption
- Div by 0
- Double frees
This commit is contained in:
Kostas Missos 2018-08-23 04:37:02 +03:00
parent 6a554eec6c
commit 382f727be3
8 changed files with 31 additions and 16 deletions

View file

@ -213,7 +213,7 @@ void _config_autoboot_list()
}
else
{
EPRINTF("Could not find or open 'hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
EPRINTF("Could not open 'bootloader/hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
goto out;
}
}
@ -335,7 +335,7 @@ void config_autoboot()
}
else
{
EPRINTF("Could not find or open 'hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
EPRINTF("Could not open 'bootloader/hekate_ipl.ini'.\nMake sure it exists in SD Card!.");
goto out;
}
}

View file

@ -152,7 +152,7 @@ int ini_parse(link_t *dst, char *ini_path, bool is_dir)
csec->name = NULL;
csec->type = INI_NEWLINE;
}
else if (csec->type == INI_CHOICE) //Extract key/value.
else if (csec && csec->type == INI_CHOICE) //Extract key/value.
{
u32 i;
for (i = 0; i < lblen && lbuf[i] != '\n' && lbuf[i] != '='; i++)
@ -181,7 +181,7 @@ int ini_parse(link_t *dst, char *ini_path, bool is_dir)
void ini_free(link_t *dst)
{
if (dst == NULL)
if (!dst->prev || !dst->next)
return;
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, dst, link)
@ -196,10 +196,11 @@ void ini_free(link_t *dst)
}
}
free(ini_sec->name);
free(ini_sec);
//TODO: Free section structs.
//free(ini_sec);
}
dst = NULL;
list_init(dst);
}
ini_sec_t *ini_clone_section(ini_sec_t *cfg)

View file

@ -568,6 +568,7 @@ void print_mmc_info()
card_type = storage.ext_csd.card_type;
u8 card_type_support[96];
u8 pos_type = 0;
card_type_support[0] = 0;
if (card_type & EXT_CSD_CARD_TYPE_HS_26)
{
memcpy(card_type_support, "HS26", 4);
@ -1196,7 +1197,6 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part)
{
EPRINTF("\nPress any key and try again...\n");
free(buf);
return 0;
}
else
@ -1451,7 +1451,6 @@ int restore_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part
{
EPRINTF("\nPress any key and try again...\n");
free(buf);
return 0;
}
else
@ -1831,7 +1830,11 @@ void launch_tools(u8 type)
free(filelist);
}
else
{
free(ments);
goto out;
}
if (file_sec)
{
@ -1918,7 +1921,7 @@ void ini_list_launcher()
else
EPRINTF("No ini configurations found.");
free(ments);
//ini_free(&ini_list_sections); // This breaks hos_launch config parsing.
ini_free(&ini_list_sections);
}
else
EPRINTF("Could not find any ini\nin bootloader/ini folder!");
@ -2026,7 +2029,7 @@ void launch_firmware()
ini_free(&ini_sections);
}
else
EPRINTF("Could not find or open 'hekate_ipl.ini'.\nMake sure it exists in SD Card!");
EPRINTF("Could not open 'bootloader/hekate_ipl.ini'.\nMake sure it exists in SD Card!");
}
if (!cfg_sec)
@ -2047,11 +2050,11 @@ void launch_firmware()
if (payload_path)
{
ini_free_section(cfg_sec);
//if (launch_payload(payload_path, false))
//{
if (launch_payload(payload_path, false))
{
EPRINTF("Failed to launch payload.");
free(payload_path);
//}
}
}
else if (!hos_launch(cfg_sec))
EPRINTF("Failed to launch firmware.");
@ -2260,7 +2263,6 @@ void auto_launch_firmware()
BOOTLOGO = (void *)malloc(0x4000);
blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, BOOTLOGO, SZ_BOOTLOGO);
gfx_set_rect_grey(&gfx_ctxt, BOOTLOGO, X_BOOTLOGO, Y_BOOTLOGO, 326, 544);
free(BOOTLOGO);
}
free(BOOTLOGO);

View file

@ -105,6 +105,9 @@ static int _se_execute(u32 op, void *dst, u32 dst_size, const void *src, u32 src
static int _se_execute_one_block(u32 op, void *dst, u32 dst_size, const void *src, u32 src_size)
{
if (!src || !dst)
return 0;
u8 *block = (u8 *)malloc(0x10);
memset(block, 0, 0x10);

View file

@ -336,7 +336,8 @@ static int _clock_sdmmc_config_clock_source_inner(u32 *pout, u32 id, u32 val)
divisor = 2;
break;
default:
return 0;
*pout = 24728;
divisor = 31;
}
_clock_sdmmc_table[2 * id] = val;

View file

@ -129,7 +129,7 @@ int i2c_send_byte(u32 idx, u32 x, u32 y, u8 b)
u8 i2c_recv_byte(u32 idx, u32 x, u32 y)
{
u8 tmp;
u8 tmp = 0;
i2c_recv_buf_small(&tmp, 1, idx, x, y);
return tmp;
}

View file

@ -1085,7 +1085,11 @@ int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 id, u32
u8 *buf = (u8 *)malloc(512);
if (!_sd_storage_get_scr(storage, buf))
{
free(buf);
return 0;
}
//gfx_hexdump(&gfx_con, 0, storage->raw_scr, 8);
DPRINTF("[SD] got scr\n");

View file

@ -53,7 +53,11 @@ char *dirlist(char *directory)
f_closedir(&dir);
}
else
{
free(temp);
free(dir_entries);
return NULL;
}
for (i = 0; i < k - 1 ; i++)
{