mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-08-19 17:53:29 +02:00
wc_ecc_ctx_new_ex records the caller's heap hint in the context and then calls wc_ecc_ctx_reset, which goes through ecc_ctx_init. That function opens by clearing the whole context and only restores the algorithm choices, the protocol role and the RNG, so the heap hint was lost on every context the _ex variant produced, and on every later call to the public reset. The context was then freed with a null hint, so it went to the default allocator rather than the heap it came from, and the temporary buffers that wc_ecc_encrypt_ex and wc_ecc_decrypt take from the same hint went to the default allocator too. A default build hides this because XMALLOC discards the hint, but with static memory the block belongs to the caller's pool and handing it to the system allocator is a free of memory that was never allocated there. Save the hint before ecc_ctx_init and restore it afterwards. Doing it in the reset covers both the constructor and the public reset. The other callers of ecc_ctx_init pass an uninitialized context on the stack, so the hint must not be read there. Add a regression test that creates a context from a static heap and requires the heap to be whole again once the context is freed. Fixes F-7082.