[XAM/Settings] Check if provided size doesn't exceed maximal setting size
This commit is contained in:
@@ -385,9 +385,19 @@ dword_result_t XamUserWriteProfileSettings_entry(
|
|||||||
switch (setting_type) {
|
switch (setting_type) {
|
||||||
case UserProfile::Setting::Type::CONTENT:
|
case UserProfile::Setting::Type::CONTENT:
|
||||||
case UserProfile::Setting::Type::BINARY: {
|
case UserProfile::Setting::Type::BINARY: {
|
||||||
|
UserProfile::Setting::Key setting_key;
|
||||||
|
setting_key.value = static_cast<uint32_t>(setting.setting_id);
|
||||||
|
|
||||||
uint8_t* binary_ptr =
|
uint8_t* binary_ptr =
|
||||||
kernel_state()->memory()->TranslateVirtual(setting.data.binary.ptr);
|
kernel_state()->memory()->TranslateVirtual(setting.data.binary.ptr);
|
||||||
|
|
||||||
size_t binary_size = setting.data.binary.size;
|
size_t binary_size = setting.data.binary.size;
|
||||||
|
if (setting_key.size < binary_size) {
|
||||||
|
XELOGW(
|
||||||
|
"XamUserWriteProfileSettings: binary size > key size. Shrinking "
|
||||||
|
"binary size!");
|
||||||
|
binary_size = setting_key.size;
|
||||||
|
}
|
||||||
std::vector<uint8_t> bytes;
|
std::vector<uint8_t> bytes;
|
||||||
if (setting.data.binary.ptr) {
|
if (setting.data.binary.ptr) {
|
||||||
// Copy provided data
|
// Copy provided data
|
||||||
|
|||||||
Reference in New Issue
Block a user