Commit Graph
5 Commits
Author SHA1 Message Date
sonika.rathi eaa6c262aa fix(wear_levelling): fix codespell issue in host test 2026-07-16 09:43:03 +02:00
yi chen becf7bd766 fix(wear_levelling): guard WL_Flash::write()/read() against size==0 underflow
WL_Flash::write() and WL_Flash::read() computed:

    uint32_t count = (size - 1) / this->cfg.wl_page_size;

`size` is `size_t` (unsigned). Neither the public wl_write()/wl_read() API
(wear_levelling.cpp), nor the newer wl_bdl_write()/wl_bdl_read() block-device
path (wl_blockdev.cpp), reject size == 0 before calling into WL_Flash, and
wear_levelling.h does not document size == 0 as invalid (a 0-byte
write/read is a reasonable no-op, mirroring POSIX write()/read() with
count == 0).

When size == 0, `size - 1` wraps around to SIZE_MAX, so `count` becomes an
enormous page count instead of 0. The functions then loop that many times,
reading (write()) or writing (read()) `wl_page_size` bytes per iteration
through the flash partition, immediately walking past the caller-supplied
buffer on the very first iteration:

  - write(): out-of-bounds *read* from the caller's `src` buffer.
  - read():  out-of-bounds *write* into the caller's `dest` buffer -- the
             more severe case, since it corrupts caller memory with flash
             content instead of merely over-reading.

Verified with a standalone reproduction that compiles the unmodified
WL_Flash.cpp against a mock Flash_Access partition: calling
`wl.write(0, an_8_byte_buffer, 0)` with no other change immediately
segfaults (confirmed count == 0xFFFFFFFF for wl_page_size == 4096); with
this fix applied the same call returns ESP_OK without touching memory
outside the buffer, and normal non-zero-size read/write is unaffected.

Add an early `size == 0` return (mirroring the existing `!initialized`
guard) to both functions, and a host_test regression case exercising
wl_write()/wl_read() with size == 0 through the public API.

Disclosure: this fix was prepared with AI assistance (Claude) and reviewed
by me before submission.

Signed-off-by: yi chen <94xhn1@gmail.com>
2026-07-14 12:23:40 +02:00
Ivan Grokhotkov ae3da4a383 ci(wear_levelling): upgrade to Catch2 as a component 2023-11-29 12:38:47 +01:00
Sonika Rathi 4585ff806a Revamp variable names and update code documentation for wear levelling component
wear levelling code cleanup
2023-06-21 10:34:24 +02:00
radek.tandler 0402874d3c host_test: wl migrated to Cmake and linux emulation of esp_partition
- build system changed to CMake
 - host tests changed to use partition api on linux instead of mocked code
 - extended wl flash host tests to cover power off recovery code
2023-04-11 16:16:53 +02:00