mirror of
https://github.com/openvswitch/ovs
synced 2025-09-02 15:25:22 +00:00
util: create a copy of program_name
Commit 8a9562 ("dpif-netdev: Add DPDK netdev.") reversed sequence in which set_program_name() and proctitle_init() functions are called. This introduced a regression where program_name and argv_start would point to exactly the same memory (previously both of these pointers were pointing to different memory locations because proctitle_init() would have beforehand created a copy of argv[0] for the succeeding set_program_name() call). This regression on my system caused ovs-vswitchd monitoring process to show up without process name: ... 00:00:00 : monitoring pid 26308 (healthy) Ps output was lacking process name because following code was using overlapping memory for source and target buffer:. proctitle_set(const char *format, ...) { ... n = snprintf(argv_start, argv_size, "%s: ", program_name); Overall C99 and POSIX standards state that behavior is undefined if source and target buffers overlap. Signed-Off-By: Ansis Atteka <aatteka@nicira.com> Acked-By: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -454,15 +454,14 @@ void
|
||||
set_program_name__(const char *argv0, const char *version, const char *date,
|
||||
const char *time)
|
||||
{
|
||||
free(program_name);
|
||||
|
||||
#ifdef _WIN32
|
||||
char *basename;
|
||||
size_t max_len = strlen(argv0) + 1;
|
||||
|
||||
SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX);
|
||||
|
||||
if (program_name) {
|
||||
free(program_name);
|
||||
}
|
||||
basename = xmalloc(max_len);
|
||||
_splitpath_s(argv0, NULL, 0, NULL, 0, basename, max_len, NULL, 0);
|
||||
assert_single_threaded();
|
||||
@@ -470,7 +469,7 @@ set_program_name__(const char *argv0, const char *version, const char *date,
|
||||
#else
|
||||
const char *slash = strrchr(argv0, '/');
|
||||
assert_single_threaded();
|
||||
program_name = slash ? slash + 1 : argv0;
|
||||
program_name = xstrdup(slash ? slash + 1 : argv0);
|
||||
#endif
|
||||
|
||||
free(program_version);
|
||||
|
Reference in New Issue
Block a user