On Wed Nov 11, 2020 at 3:22 PM PST, Andrii Nakryiko wrote: > On Wed, Nov 11, 2020 at 2:46 PM Daniel Xu <dxu@xxxxxxxxx> wrote: > > > > 6ae08ae3dea2 ("bpf: Add probe_read_{user, kernel} and probe_read_{user, > > kernel}_str helpers") introduced a subtle bug where > > bpf_probe_read_user_str() would potentially copy a few extra bytes after > > the NUL terminator. > > > > This issue is particularly nefarious when strings are used as map keys, > > as seemingly identical strings can occupy multiple entries in a map. > > > > This patchset fixes the issue and introduces a selftest to prevent > > future regressions. > > > > v4 -> v5: > > * don't read potentially uninitialized memory > > I think the bigger problem was that it could overwrite unintended > memory. E.g., in BPF program, if you had something like: > > char my_buf[8 + 3]; > char my_precious_data[5] = {1, 2, 3, 4, 5}; How does that happen? The while (max >= sizeof(unsigned long)) { /* copy 4 bytes */ max -= sizeof(unsigned long) } /* copy byte at a time */ where `max` is the user supplied length should prevent that kind of corruption, right? [...]