CAN message gets corrupt inside a FreeRTOS task

Caching issues are coupled with DMA powered drivers. When everything is done with the CPU there is no problem. Is DMA used in the driver ?
However, instead of disabling data cache yopu can also use the cache managment functions to flush/invalidate data buffers.
I think when defining e.g. uint8_t can0_tx_fifo and you want to put it into a specific MPU region you’ve to use a dedicated section ( GCC: __attribute__((<section>)) ) corresponding this MPU region.
Your current can0_rx/tx_fifo are linked into compiler default bss section.