11.0.0-33: Difference between revisions
Line 30: | Line 30: | ||
====ARM11-kernel==== | ====ARM11-kernel==== | ||
57 functions were updated, at least 48 of these are the actual functions used for handling SVCs. The lone function updated with v10.4 was updated with this version again. | |||
3 new functions used for validation with memory management were added (kernelpanic() on failure). This is a new security feature for the kernel heaps. By adding a MAC to the kernel heap [[Memory_Management#MemoryBlockHeader|memchunkhdr]] they can detect when it is modified by an outside DMA device. | |||
The function which initializes a memalloc heap had a major update (used for FCRAM memregions and the SlabHeap container). It is unknown precisely what this does, but presumably it generates a random MAC key based on svcGetSystemTick. | |||
The | The MAC itself is custom based on xor-rot-sub, and is calculated as follows (pseudo-code): | ||
u32* crypto_state = (u32*) r4; // Safe kernel memory. | |||
u32* data_ptr = (u32*) lr; // Unsafe FCRAM pointer. | |||
r0 = crypto_state[16/4] // Load "key". | |||
r1 = crypto_state[20/4] | |||
r2 = crypto_state[28/4] | |||
r3 = crypto_state[24/4] | |||
for(size_t i=0; i<2; i++) { | |||
for(size_t j=0; j<5; j++) { | |||
r0 -= data_ptr[j] + (r1 >>> 3) | |||
r1 -= (r3 >>> (r2 & 0xf + 3)) ^ (r2 >>> (r0 & 0xf + 13)) | |||
r3 -= (r2 >>> r0) * r1 | |||
r2 -= (r0 >>> r1) * r3 | |||
} | |||
} | |||
// Verify MAC. | |||
if(data_ptr[5] != (r0 ^ r1)) { | |||
kernel_panic() | |||
} | |||
However, it's unknown how much the svcGetSystemTick() output really varies if anything(?) for each hard-boot during initialization of the heaps. | |||
6 memory management functions were updated to use the above new functions, these func-calls replaced the validation code previously used in these functions in some cases. These were also updated for the above heap security implementation. One function had a validation func-call added where previously there wasn't any validation done in the beginning of the function for previous versions. | 6 memory management functions were updated to use the above new functions, these func-calls replaced the validation code previously used in these functions in some cases. These were also updated for the above heap security implementation. One function had a validation func-call added where previously there wasn't any validation done in the beginning of the function for previous versions. |