----- Original Message ----- > Hi Dave, > > I met stack smashing detection by glibc at read_string() > then this patch is proposal. > > *** stack smashing detected ***: crash terminated > ======= Backtrace: ========= > /lib/libc.so.6(__fortify_fail+0x4c)[0xfe12380] > /lib/libc.so.6(__fortify_fail+0x0)[0xfe12334] > ./crash[0x10147bf0] > ./crash(display_sys_stats+0xcf8)[0x1011cd74] > ./crash(main_loop+0x300)[0x10068960] > ./crash(current_interp_command_loop+0x48)[0x1021ac2c] > ./crash[0x1021bcc4] > ./crash(catch_errors+0x84)[0x1021a0c4] > ./crash[0x1021d37c] > ./crash(catch_errors+0x84)[0x1021a0c4] > ./crash(gdb_main+0x58)[0x1021d3e8] > ./crash(gdb_main_entry+0x6c)[0x1021d490] > ./crash(gdb_main_loop+0x3b4)[0x10130e5c] > ./crash(main+0x38c0)[0x10068650] > /lib/libc.so.6(+0x1f568)[0xfd36568] > /lib/libc.so.6(+0x1f728)[0xfd36728] > > An failed vmalloc() including non terminated with NULLCHAR is root cause, > but I think it is better to keep other utilities without killed. This patch changes the return value of read_string() in a situation where the requested number of bytes does not include a NULL terminator. Note that the function is described like this: /* * Try to read a string of non-NULL characters from a memory location, * returning the number of characters read. */ int read_string(ulong kvaddr, char *buf, int maxlen) { The "maxlen" parameter is there to handle case where the requested memory read does not contain a NULL character. And there may be other callers that use the function to read until a NULL *or* until the maxlen is reached. That being said, there may be a bug in there somewhere, or it could be written differently, but I don't want to change the function's behavior (return value). You mention: > an failed vmalloc() including non terminated with NULLCHAR > is the root cause". Can you elaborate on what you mean by that? I want to be able to reproduce this, but I cannot. Thanks, Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility