sprofile: various correctness fixes.

This commit is contained in:
Michael Scire 2021-10-29 17:38:44 -07:00
parent 2a0b99d9f9
commit 4e92687cab
6 changed files with 24 additions and 4 deletions

View file

@ -89,9 +89,8 @@ namespace ams::fs {
Result DeleteSystemSaveData(SaveDataSpaceId space_id, SystemSaveDataId id, UserId user_id) { Result DeleteSystemSaveData(SaveDataSpaceId space_id, SystemSaveDataId id, UserId user_id) {
const auto attribute = SaveDataAttribute::Make(ncm::InvalidProgramId, SaveDataType::System, user_id, id); const auto attribute = SaveDataAttribute::Make(ncm::InvalidProgramId, SaveDataType::System, user_id, id);
/* TODO: Libnx binding for DeleteSaveDataFileSystemBySaveDataAttribute */ static_assert(sizeof(attribute) == sizeof(::FsSaveDataAttribute));
AMS_UNUSED(space_id, attribute); return fsDeleteSaveDataFileSystemBySaveDataAttribute(static_cast<::FsSaveDataSpaceId>(space_id), reinterpret_cast<const ::FsSaveDataAttribute *>(std::addressof(attribute)));
AMS_ABORT();
} }
Result GetSaveDataFlags(u32 *out, SaveDataId id) { Result GetSaveDataFlags(u32 *out, SaveDataId id) {

View file

@ -26,6 +26,10 @@ namespace ams::sprofile::srv {
ProfileManager *m_manager; ProfileManager *m_manager;
public: public:
ProfileImporterImpl(ProfileManager *manager) : m_manager(manager) { /* ... */ } ProfileImporterImpl(ProfileManager *manager) : m_manager(manager) { /* ... */ }
~ProfileImporterImpl() {
m_manager->CloseProfileImporter();
}
public: public:
Result ImportProfile(const sprofile::srv::ProfileDataForImportData &import); Result ImportProfile(const sprofile::srv::ProfileDataForImportData &import);
Result Commit(); Result Commit();

View file

@ -151,6 +151,16 @@ namespace ams::sprofile::srv {
return ResultSuccess(); return ResultSuccess();
} }
void ProfileManager::CloseProfileImporter() {
/* Acquire locks. */
std::scoped_lock lk1(m_profile_importer_mutex);
std::scoped_lock lk2(m_general_mutex);
std::scoped_lock lk3(m_fs_mutex);
/* Close our importer. */
m_profile_importer = util::nullopt;
}
Result ProfileManager::ImportProfile(const sprofile::srv::ProfileDataForImportData &import) { Result ProfileManager::ImportProfile(const sprofile::srv::ProfileDataForImportData &import) {
/* Acquire locks. */ /* Acquire locks. */
std::scoped_lock lk1(m_profile_importer_mutex); std::scoped_lock lk1(m_profile_importer_mutex);
@ -165,6 +175,8 @@ namespace ams::sprofile::srv {
/* Check that the metadata we're importing has a valid hash. */ /* Check that the metadata we're importing has a valid hash. */
{ {
crypto::Md5Generator md5; crypto::Md5Generator md5;
md5.Initialize();
md5.Update(std::addressof(import.header), sizeof(import.header)); md5.Update(std::addressof(import.header), sizeof(import.header));
md5.Update(std::addressof(import.data), sizeof(import.data) - sizeof(import.data.entries[0]) * (util::size(import.data.entries) - std::min<size_t>(import.data.num_entries, util::size(import.data.entries)))); md5.Update(std::addressof(import.data), sizeof(import.data) - sizeof(import.data.entries[0]) * (util::size(import.data.entries) - std::min<size_t>(import.data.num_entries, util::size(import.data.entries))));
@ -258,6 +270,8 @@ namespace ams::sprofile::srv {
/* Check that the metadata we're importing has a valid hash. */ /* Check that the metadata we're importing has a valid hash. */
{ {
crypto::Md5Generator md5; crypto::Md5Generator md5;
md5.Initialize();
md5.Update(std::addressof(import.header), sizeof(import.header)); md5.Update(std::addressof(import.header), sizeof(import.header));
md5.Update(std::addressof(import.metadata), sizeof(import.metadata)); md5.Update(std::addressof(import.metadata), sizeof(import.metadata));
md5.Update(std::addressof(import.profile_urls), sizeof(import.profile_urls[0]) * std::min<size_t>(import.metadata.num_entries, util::size(import.metadata.entries))); md5.Update(std::addressof(import.profile_urls), sizeof(import.profile_urls[0]) * std::min<size_t>(import.metadata.num_entries, util::size(import.metadata.entries)));

View file

@ -50,6 +50,8 @@ namespace ams::sprofile::srv {
Result ResetSaveData(); Result ResetSaveData();
Result OpenProfileImporter(); Result OpenProfileImporter();
void CloseProfileImporter();
Result ImportProfile(const sprofile::srv::ProfileDataForImportData &data); Result ImportProfile(const sprofile::srv::ProfileDataForImportData &data);
Result Commit(); Result Commit();
Result ImportMetadata(const sprofile::srv::ProfileMetadataForImportMetadata &data); Result ImportMetadata(const sprofile::srv::ProfileMetadataForImportMetadata &data);

View file

@ -74,6 +74,7 @@ namespace ams::sprofile::srv {
return ResultSuccess(); return ResultSuccess();
} }
Result ServiceForBgAgent::IsUpdateNeeded(sf::Out<bool> out, Identifier revision_key) { Result ServiceForBgAgent::IsUpdateNeeded(sf::Out<bool> out, Identifier revision_key) {
/* Load primary metadata. */ /* Load primary metadata. */
bool loaded_metadata = true; bool loaded_metadata = true;

View file

@ -149,7 +149,7 @@ namespace ams::crypto::impl {
/* Copy in any leftover data. */ /* Copy in any leftover data. */
if (const auto left = size % BlockSize; left > 0) { if (const auto left = size % BlockSize; left > 0) {
std::memcpy(m_y, cur_block, size); std::memcpy(m_y, cur_block, left);
} }
} }