[ovs-dev] [PATCH] util: create a copy of program_name

Lori Jakab lojakab at cisco.com
Fri Jul 4 06:06:14 UTC 2014


On 7/4/14, 12:51 AM, Ansis Atteka wrote:
> On Thu, Jul 3, 2014 at 12:57 PM, Ben Pfaff <blp at nicira.com> wrote:
>> On Sat, Jun 28, 2014 at 02:03:15PM -0700, Ansis Atteka wrote:
>>> From: Ansis <ansisatteka at gmail.com>
>>>
>>> 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 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 at nicira.com>
>> I like this regardless of the bug fix because it makes behavior more
>> consistent on Windows and Unix (program_name is now malloc'd in both
>> cases).
>>
>> I would remove the 'if (program_name)' test around the free call,
>> since free(NULL) is a no-op anyway.
>>
>> Acked-by: Ben Pfaff <blp at nicira.com>
> Thanks. I removed the "if" statement and pushed this to master and branch-2.3.

It looks like with removing the "if" statement the free() call was moved 
out of the "#ifdef _WIN32" section, which causes a warning (and the 
build to fail when I have --enable-Werror) on Linux, with both Clang 
3.4.2 and GCC 4.8.3.

-Lori



More information about the dev mailing list