diff options
author | Tom Rini <trini@konsulko.com> | 2022-02-03 12:12:49 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-02-03 12:12:49 -0500 |
commit | b3650c9265efac00f5be5390ea4b4b18f1270a47 (patch) | |
tree | 86ff5fbee12f43f7d700d130c92009aef12fc185 /common/spl/spl_ymodem.c | |
parent | 006fddde01da7e8b3c7cad4a35f3245edc894ab4 (diff) | |
parent | d502210a9ce3eda828cba8e30f237a4e29a7d797 (diff) | |
download | u-boot-WIP/03Feb2022.zip u-boot-WIP/03Feb2022.tar.gz u-boot-WIP/03Feb2022.tar.bz2 |
Merge branch '2022-02-03-assorted-fixes'WIP/03Feb2022
- Update CI image to have libgnutls available.
- Assorted ARM and SPL bugfixe
Diffstat (limited to 'common/spl/spl_ymodem.c')
-rw-r--r-- | common/spl/spl_ymodem.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 047df74..fdd5261 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -42,6 +42,7 @@ static ulong ymodem_read_fit(struct spl_load_info *load, ulong offset, int res, err, buf_offset; struct ymodem_fit_info *info = load->priv; char *buf = info->buf; + ulong copy_size = size; while (info->image_read < offset) { res = xyzModem_stream_read(buf, BUF_SIZE, &err); @@ -57,8 +58,14 @@ static ulong ymodem_read_fit(struct spl_load_info *load, ulong offset, buf_offset = (info->image_read % BUF_SIZE); else buf_offset = BUF_SIZE; + + if (res > copy_size) { + memcpy(addr, &buf[buf_offset - res], copy_size); + goto done; + } memcpy(addr, &buf[buf_offset - res], res); addr = addr + res; + copy_size -= res; } while (info->image_read < offset + size) { @@ -66,11 +73,17 @@ static ulong ymodem_read_fit(struct spl_load_info *load, ulong offset, if (res <= 0) break; - memcpy(addr, buf, res); info->image_read += res; + if (res > copy_size) { + memcpy(addr, buf, copy_size); + goto done; + } + memcpy(addr, buf, res); addr += res; + copy_size -= res; } +done: return size; } |