Reduce memmoves in memory BIOs.
authorjsing <jsing@openbsd.org>
Sat, 19 Feb 2022 15:59:12 +0000 (15:59 +0000)
committerjsing <jsing@openbsd.org>
Sat, 19 Feb 2022 15:59:12 +0000 (15:59 +0000)
commitde0d09aa848ad6b56aed09a9085cc0bcbd84f155
treecc06b8831a82ad84fe5d9294e8a13817ff9b648e
parenta0b616e6b5193512de57cd012e8490ed34210402
Reduce memmoves in memory BIOs.

Currently, a read/write memory BIO pulls up the data via memmove() on each
read. This becomes very expensive when a lot of small reads are performed,
especially if there is a reasonable amount of data stored in the memory
BIO.

Instead, store a read offset into the buffer and only perform a memmove()
to pull up the data on a write, if we have read more than 4096 bytes. This
way we only perform memmove() when the space saving will potentially be of
benefit, while avoiding frequent memmove() in the case of small interleaved
reads and writes.

Should address oss-fuzz #19881.

ok inoguchi@ tb@
lib/libcrypto/bio/bss_mem.c