Browse Source

Prevent stack overflow when flashing px4io

Large local variable causing stack overflow when attempting to flash
IO!!!
sbg
Jean Cyr 11 years ago
parent
commit
8c6745d53f
  1. 18
      src/drivers/px4io/px4io_uploader.cpp

18
src/drivers/px4io/px4io_uploader.cpp

@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <assert.h>
@ -413,11 +414,17 @@ static int read_with_retry(int fd, void *buf, size_t n) @@ -413,11 +414,17 @@ static int read_with_retry(int fd, void *buf, size_t n)
int
PX4IO_Uploader::program(size_t fw_size)
{
uint8_t file_buf[PROG_MULTI_MAX];
uint8_t *file_buf;
ssize_t count;
int ret;
size_t sent = 0;
file_buf = (uint8_t *)malloc(PROG_MULTI_MAX);
if (!file_buf) {
log("Can't allocate program buffer");
return -ENOMEM;
}
log("programming %u bytes...", (unsigned)fw_size);
ret = lseek(_fw_fd, 0, SEEK_SET);
@ -438,8 +445,10 @@ PX4IO_Uploader::program(size_t fw_size) @@ -438,8 +445,10 @@ PX4IO_Uploader::program(size_t fw_size)
(int)errno);
}
if (count == 0)
if (count == 0) {
free(file_buf);
return OK;
}
sent += count;
@ -455,9 +464,12 @@ PX4IO_Uploader::program(size_t fw_size) @@ -455,9 +464,12 @@ PX4IO_Uploader::program(size_t fw_size)
ret = get_sync(1000);
if (ret != OK)
if (ret != OK) {
free(file_buf);
return ret;
}
}
free(file_buf);
return OK;
}

Loading…
Cancel
Save