You need to use different IV for every message you encrypt.
Thus rather than the process:
- encrypt plaintext
- reverse the ciphertext
- continue encrypting (now from finish to start)
You need to generate IV each time. I.e.:
- generate IV
- encrypt the plaintext using the IV
- store/send the ciphertext and the materials required to recreate IV
The easiest way choice is to generate random IVs. This will of course require more storage space (ciphertext + 16 bytes).
Some other schemes which deterministically generate IV are allowed. See NIST SP800-38A for recommendations on how CBC mode IV can be generated.
How to use CBC without expanding block
Linux's dm-crypt uses CBC-ESSIV mode, which generates IV on the fly without need for expansion and thus allows to use CBC mode, without requiring more space than the size of plaintext (assuming plaintext size is multiple of AES block size). However, this mode requires significant amount of processing to calculate IV.
(There are also some other ways to use CBC or build mode based on CBC, which does not need to store IV). Common for all such modes and mode variants is: you need to be very careful with such mode to avoid IV reuse does not happen unexpectedly.
For example, one notable situation where IV reuse occurs is when CBC-ESSIV stores the same value to the same block. In some security models this is considered acceptable.