Arm provides multiple helpers to clean & invalidate the cache
for a given region. This is, for instance, used when allocating
guest memory to ensure any writes (such as the ones during scrubbing)
have reached memory before handing over the page to a guest.
Unfortunately, the arithmetics in the helpers can overflow and would
then result to skip the cache cleaning/invalidation. Therefore there
is no guarantee when all the writes will reach the memory.
This undefined behavior was meant to be addressed by XSA-437, but the
approach was not sufficient.
Arm proporciona múltiples ayudas para limpiar e invalidar el caché de una región determinada. Esto se utiliza, por ejemplo, al asignar memoria de invitado para garantizar que cualquier escritura (como las que se realizan durante la limpieza) haya alcanzado la memoria antes de entregar la página a un invitado. Desafortunadamente, la aritmética en los asistentes puede desbordarse y entonces se omitiría la limpieza/invalidación de la caché. Por lo tanto, no hay garantía de cuándo todas las escrituras llegarán a la memoria. Este comportamiento indefinido debía ser abordado por XSA-437, pero el enfoque no fue suficiente.