[fs] Fix integrity check validation for new updates #395

Merged
crueter merged 16 commits from improve-integrity-check into master 2025-09-12 16:02:13 +02:00
2 changed files with 5 additions and 5 deletions
Showing only changes of commit d110d88d56 - Show all commits

View file

@ -85,12 +85,12 @@ NCA::NCA(VirtualFile file_, const NCA* base_nca)
for (s32 i = 0; i < fs_count; i++) {
NcaFsHeaderReader header_reader;
const Result rc = fs.OpenStorage(&filesystems[i], &header_reader, i);
if (R_FAILED(rc)) {
/*if (R_FAILED(rc)) {
LOG_ERROR(Loader, "File reader errored out during read of section {}: {:#x}", i,
rc.GetInnerValue());
status = Loader::ResultStatus::ErrorBadNCAHeader;
return;
}
}*/
if (header_reader.GetFsType() == NcaFsHeader::FsType::RomFs) {
files.push_back(filesystems[i]);

View file

@ -1051,7 +1051,7 @@ Result NcaFileSystemDriver::CreatePatchMetaStorage(
ASSERT(out_aes_ctr_ex_meta != nullptr);
ASSERT(out_indirect_meta != nullptr);
ASSERT(base_storage != nullptr);
ASSERT(patch_info.HasAesCtrExTable());
MaranBr marked this conversation as resolved

What's this for?

What's this for?

These two asserts are not needed at this point in the code.

These two asserts are not needed at this point in the code.
//ASSERT(patch_info.HasAesCtrExTable());
ASSERT(patch_info.HasIndirectTable());
ASSERT(Common::IsAligned<s64>(patch_info.aes_ctr_ex_size, NcaHeader::XtsBlockSize));
@ -1334,8 +1334,8 @@ Result NcaFileSystemDriver::CreateIntegrityVerificationStorageImpl(
R_UNLESS(last_layer_info_offset + layer_info.size <= layer_info_offset,
ResultRomNcaInvalidIntegrityLayerInfoOffset);
}
storage_info.SetDataStorage(std::make_shared<OffsetVfsFile>(
std::move(base_storage), layer_info.size, last_layer_info_offset));
storage_info[level_hash_info.max_layers - 1] = std::make_shared<OffsetVfsFile>(
MaranBr marked this conversation as resolved

Seems interesting, what's in SetDataStorage that caused issues?

Seems interesting, what's in SetDataStorage that caused issues?

This is something I will look into further when I have more time. It's safe for now.

This is something I will look into further when I have more time. It's safe for now.
std::move(base_storage), layer_info.size, last_layer_info_offset);
// Make the integrity romfs storage.
auto integrity_storage = std::make_shared<IntegrityRomFsStorage>();