diff options
| author | jvoisin | 2024-10-10 15:50:40 +0200 |
|---|---|---|
| committer | jvoisin | 2024-10-10 15:50:40 +0200 |
| commit | e2cfd2879a15db00dfa9a42eeb1baaef6a930aff (patch) | |
| tree | 45c61bbdde9a510ba7125e00399781a98dc39cc5 /tests/test_strncpy_static_write.c | |
| parent | c3b48c6b0bf501802295c85b1cf54275d6b74883 (diff) | |
Fix a crash in strncpy/stpncpystrn
```
Core was generated by `scripts/mod/modpost -M -m -o Module.symvers -n -T modules.order vmlinux.o'.
Program terminated with signal SIGSEGV, Segmentation fault.
warning: 17 src/string/strlen.c: No such file or directory
(gdb) bt
```
> I think strncpy logic is broken: `__fh_size_t max_len_s = strlen(__s);` may try read past `size_t __n`.
> Create a buf without any trailing `\0`, do `strncpy(dest, buf, sizeof(buf));`, it should work, since `strncpy` will stop at `sizeof buf`
> but the current fority-headers implementation will do `strlen(buf)`, which will go boom when it is not terminated with \0
Reported-by: ncopa
Diffstat (limited to 'tests/test_strncpy_static_write.c')
| -rw-r--r-- | tests/test_strncpy_static_write.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/tests/test_strncpy_static_write.c b/tests/test_strncpy_static_write.c index e619288..29905ac 100644 --- a/tests/test_strncpy_static_write.c +++ b/tests/test_strncpy_static_write.c | |||
| @@ -4,11 +4,13 @@ | |||
| 4 | 4 | ||
| 5 | int main(int argc, char** argv) { | 5 | int main(int argc, char** argv) { |
| 6 | char buffer[8] = {0}; | 6 | char buffer[8] = {0}; |
| 7 | strncpy(buffer, "1234567", 5); | 7 | char src[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'}; |
| 8 | |||
| 9 | strncpy(buffer, src, 5); | ||
| 8 | puts(buffer); | 10 | puts(buffer); |
| 9 | 11 | ||
| 10 | CHK_FAIL_START | 12 | CHK_FAIL_START |
| 11 | strncpy(buffer, "1234567890", 10); | 13 | strncpy(buffer, src, 10); |
| 12 | CHK_FAIL_END | 14 | CHK_FAIL_END |
| 13 | 15 | ||
| 14 | puts(buffer); | 16 | puts(buffer); |
