Hi,
I checked your code and the problem is most probably in function printf. Calling this function has huge overhead and during the printing message via UART, CAN messages get lost except the first one you receive and the last one, which stays in SMB.
There are few ways, how to solve this problem.
The simplest one is to configure individual masking and initialize 10 message buffers.
Second way is to create buffer in RAM memory and send data from this buffer outside the FlexCAN interrupt.
Regards,
Martin