flash/stm32l4x: free write_algorithm work area if no space left for the buffer
authorTarek BOCHKATI <tarek.bouchkati@gmail.com>
Sun, 29 Aug 2021 15:02:58 +0000 (16:02 +0100)
committerOleksij Rempel <linux@rempel-privat.de>
Mon, 30 Aug 2021 07:52:26 +0000 (07:52 +0000)
If the remaining memory for the buffer is less than 256 bytes,
the memory allocated for the write algorithm in the target is not freed.

Fixes: ba131f30a079 (Flash driver for STM32G0xx and STM32G4xx)
Change-Id: Ic649f6c39799d76725b0c69ff3a009a3f510e17f
Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6486
Tested-by: jenkins
Reviewed-by: Oleksij Rempel <linux@rempel-privat.de>
src/flash/nor/stm32l4x.c

index b8635fe75ccd60de828e35757f5b5d82acc10e87..3c055616f5c1cd1a92475b7295a07a8b4a1e3683 100644 (file)
@@ -1353,6 +1353,7 @@ static int stm32l4_write_block(struct flash_bank *bank, const uint8_t *buffer,
        buffer_size = target_get_working_area_avail(target) & ~(2 * sizeof(uint32_t) - 1);
        if (buffer_size < 256) {
                LOG_WARNING("large enough working area not available, can't do block memory writes");
+               target_free_working_area(target, write_algorithm);
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
        } else if (buffer_size > 16384) {
                /* probably won't benefit from more than 16k ... */