Considering the wear-leveling layer in the SSD firmware, the only possible reason for a bad block to appear is for it to return a read error.
How it is possible:
- A buggy SSD firmware. It happens more than not.
- Very bad data retention, combined with insufficient error-correction data.
- The SSD being a clone of a HDD that had a bad sector mark at the moment of cloning and the cloning is done at block device level and not at a filesystem level.
The last option is rather good, but usually hard to confirm.
The other two mean that the data stored in the disk is at risk and (probably) already corrupted. Depending on the data importance, the reaction may vary between "I don't care, the longer I wait the cheaper is the replacement" and "Backup immediately, transfer the data to another disk".
I am yet to see an SSD to report a bad sector. SSDs get read-only when they exhaust their spare blocks. SSDs sometimes die for good because of firmware bugs or other controller problems.
But bad sectors? Really?
One cannot get a bad block while writing - in contrast with the traditional HDD, the block gets its physical place at the moment it is written. If there happens to be a bad block, the physical write is just repeated elsewhere and the bad block is handled invisibly (it does not get into the spare pool anymore). It is reading that can reveal a block that doesn't compute to its checksum. And even then, a subsequent write to the same LBA address is as good as any other write. The OS has to be absolutely unaware of the existence of SSDs in order to mark the block as bad on a filesystem level.
On the other hand, a read error from an SSD is really a bad thing.
The data is written on the flash media with a lot of error-correcting overhead. Few flipped bits in a 512-byte block are not a big deal because the error-correcting code fixes them transparently.
A read error means that the error-correcting code was unable to rebuild the original data. This amounts to 1% or 2% of the bits flipped. There may still be free spare blocks, but if the data retention of a particular block is this bad, one should not really expect any good.