On Mon, Feb 18, 2019 at 4:52 PM Jann Horn <[email protected]> wrote: > AFAICS the byte_at_a_time loop exits when max==0 is reached, and then > if `res >= count` (in other words, if we've copied as many bytes as > requested, haven't encountered a null byte so far, and haven't reached > the end of the address space), we return `res`, which is the same as > `count`. Are you sure?
Oh, whew, there is only 1 arch-specific implementation of this. I thought you meant there was multiple implementations. So, generally speaking, I'd love to split all strncpy* uses into strscpy_zero() (when expecting to do str->str copies), and some new function, named like mempadstr() or str2mem() that copies a str to a __nonstring char array, with trailing padding, if there is space. Then there is no more mixing the two cases and botching things. -- Kees Cook

