My bit rates notes from evaluation of the CH340C. A few notable exceptions to the 3M/N rule are 2.0M, 1.2M and 923k (~115.2 *. You have to ask for exactly 921,600 to get closest to it.
Is this from Windows?
A glance at the Linux driver suggests the chip has much higher resolution, like PL2303.
The latter supports pretty much any rate below 6M with 2% granularity or so. I have successfully used it to push data at oddball bitrates like 1.66M into an MCU running at unusual clock.
As for corruption, it's probably not corruption but simple loss of a few bytes here and there, but your program reports errors because it isn't sophisticated enough to detect loss.
For starters, use two adapters, preferably connected to different USB controllers (not just ports, usually two ports are connected to each 1.1 host controller).
If it doesn't help, enable hardware flow control. This will give you lossless transmission even in loopback, but at lower throughput.
For reliable high speed UART, flow control is a must unless you are absolutely sure that your receiver has sufficient buffering and low enough latency not to lose bytes.