Skip to content

Conversation

@mirko
Copy link

@mirko mirko commented Oct 28, 2021

Before, each copy from SPI transaction buf to destination buf was overwriting
all previously copied data, so always only the last $bytesPerChunk bytes were
stored.
Fix by shifting pointer within destination buf to actually append newly read
data instead of overwriting.

Eric Poulsen and others added 2 commits February 21, 2020 08:25
*/*spi.h

Support for odd bit lengths in SPI, per discussion at micropython#5225
Before, each copy from SPI transaction buf to destination buf was overwriting
all previously copied data, so always only the last $bytesPerChunk bytes were
stored.
Fix by shifting pointer within destination buf to actually append newly read
data instead of overwriting.
@MrSurly
Copy link
Owner

MrSurly commented Oct 29, 2021

You might want to submit this to upstream MP repository ...

@mirko
Copy link
Author

mirko commented Oct 30, 2021

Thing is, upstream changed a lot (well, mainly ports/esp32/machine_hw_spi.c). So I wanted to get this PR working on for which version it was originally developed against, and then getting it rebased onto upstream/master.

However due to the changes upstream meanwhile, my attempts of rebasing failed so far due to lacking some understanding of why certain things were done the way they are.
I was kinda hoping that I might be able to motivate you somehow to do such a rebase of this PR(?)

MrSurly pushed a commit that referenced this pull request Oct 30, 2021
asan considers that memcmp(p, q, N) is permitted to access N bytes at each
of p and q, even for values of p and q that have a difference earlier.
Accessing additional values is frequently done in practice, reading 4 or
more bytes from each input at a time for efficiency, so when completing
"non_exist<TAB>" in the repl, this causes a diagnostic:

    ==16938==ERROR: AddressSanitizer: global-buffer-overflow on
    address 0x555555cd8dc8 at pc 0x7ffff726457b bp 0x7fffffffda20 sp 0x7fff
    READ of size 9 at 0x555555cd8dc8 thread T0
        #0 0x7ffff726457a  (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xb857a)
        #1 0x555555b0e82a in mp_repl_autocomplete ../../py/repl.c:301
        #2 0x555555c89585 in readline_process_char ../../lib/mp-readline/re
        micropython#3 0x555555c8ac6e in readline ../../lib/mp-readline/readline.c:513
        micropython#4 0x555555b8dcbd in do_repl /home/jepler/src/micropython/ports/uni
        micropython#5 0x555555b90859 in main_ /home/jepler/src/micropython/ports/unix/
        micropython#6 0x555555b90a3a in main /home/jepler/src/micropython/ports/unix/m
        micropython#7 0x7ffff619a09a in __libc_start_main ../csu/libc-start.c:308
        micropython#8 0x55555595fd69 in _start (/home/jepler/src/micropython/ports/uni

    0x555555cd8dc8 is located 0 bytes to the right of global variable
    'import_str' defined in '../../py/repl.c:285:23' (0x555555cd8dc0) of
    size 8
      'import_str' is ascii string 'import '

Signed-off-by: Jeff Epler <jepler@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants