1
0
Fork 0
mirror of https://github.com/CTCaer/hekate.git synced 2024-11-26 11:42:09 +00:00

fss: Disallow Mariko boot on Atmosphere< 0.17.0

Trying to boot on lower Atmosphere versions can have serious implications.
This commit is contained in:
CTCaer 2020-12-02 22:03:20 +02:00
parent d287d40208
commit d4d6730c20

View file

@ -36,6 +36,7 @@ extern bool is_ipl_updated(void *buf, char *path, bool force);
// FSS0 Magic and Meta header offset. // FSS0 Magic and Meta header offset.
#define FSS0_MAGIC 0x30535346 #define FSS0_MAGIC 0x30535346
#define FSS0_META_OFFSET 0x4 #define FSS0_META_OFFSET 0x4
#define FSS0_VERSION_0_17_0 0x110000
// FSS0 Content Types. // FSS0 Content Types.
#define CNT_TYPE_FSP 0 #define CNT_TYPE_FSP 0
@ -148,12 +149,25 @@ int parse_fss(launch_ctxt_t *ctxt, const char *path, fss0_sept_t *sept_ctxt)
// Check if valid FSS0 and parse it. // Check if valid FSS0 and parse it.
if (fss_meta->magic == FSS0_MAGIC) if (fss_meta->magic == FSS0_MAGIC)
{ {
bool mariko_not_supported = false;
if (h_cfg.t210b01 && (fss_meta->version < FSS0_VERSION_0_17_0))
{
gfx_con.mute = false;
mariko_not_supported = true;
}
gfx_printf("Found FSS0, Atmosphere %d.%d.%d-%08x\n" gfx_printf("Found FSS0, Atmosphere %d.%d.%d-%08x\n"
"Max HOS supported: %d.%d.%d\n" "Max HOS supported: %d.%d.%d\n"
"Unpacking and loading components.. ", "Unpacking and loading components.. ",
fss_meta->version >> 24, (fss_meta->version >> 16) & 0xFF, (fss_meta->version >> 8) & 0xFF, fss_meta->git_rev, fss_meta->version >> 24, (fss_meta->version >> 16) & 0xFF, (fss_meta->version >> 8) & 0xFF, fss_meta->git_rev,
fss_meta->hos_ver >> 24, (fss_meta->hos_ver >> 16) & 0xFF, (fss_meta->hos_ver >> 8) & 0xFF); fss_meta->hos_ver >> 24, (fss_meta->hos_ver >> 16) & 0xFF, (fss_meta->hos_ver >> 8) & 0xFF);
if (mariko_not_supported)
{
EPRINTF("Mariko not supported on < 0.17.0!");
goto fail;
}
if (!sept_ctxt) if (!sept_ctxt)
{ {
ctxt->atmosphere = true; ctxt->atmosphere = true;
@ -255,6 +269,7 @@ out:
return (!sept_ctxt ? 1 : sept_used); return (!sept_ctxt ? 1 : sept_used);
} }
fail:
f_close(&fp); f_close(&fp);
free(fss); free(fss);