On 9 September 2016 at 14:05, Ben Pfaff <b...@ovn.org> wrote:
> On Fri, Sep 09, 2016 at 01:47:01PM -0700, Joe Stringer wrote:
>> On 19 July 2016 at 20:08, Ben Pfaff <b...@ovn.org> wrote:
>> > On Tue, Jul 19, 2016 at 05:05:51PM -0300, Thadeu Lima de Souza Cascardo 
>> > wrote:
>> >> FreeBSD returns a socklen of sockaddr_storage when doing an accept on an 
>> >> unix
>> >> STREAM socket. The current code will assume it means a sun_path larger 
>> >> than 0.
>> >>
>> >> That breaks some tests like the one below which don't expect to find 
>> >> "unix::" on
>> >> the logs.
>> >>
>> >> As a Linux abstract address would not have a more useful name either, it's
>> >> better to check that sun_path starts with a non-zero byte and return 0 
>> >> length in
>> >> case it doesn't.
>> >>
>> >> 402: ovs-ofctl replace-flows with --bundle      FAILED (ovs-ofctl.at:2928)
>> >> 2016-07-08T12:44:30.068Z|00020|vconn|DBG|unix:: sent (Success): 
>> >> OFPT_HELLO (OF1.6) (xid=0x1):
>> >>
>> >> Signed-off-by: Thadeu Lima de Souza Cascardo <casca...@redhat.com>
>> >
>> > Applied, thanks!
>>
>> For what it's worth, this introduces a warning on my Linux x86_64
>> machine with valgrind:
>>
>> ==18725== Conditional jump or move depends on uninitialised value(s)
>> ==18725==    at 0x45BF65: get_unix_name_len (socket-util-unix.c:392)
>> ==18725==    by 0x45C842: punix_accept (stream-unix.c:113)
>> ==18725==    by 0x46897B: pfd_accept (stream-fd.c:263)
>> ==18725==    by 0x44CF6F: pstream_accept (stream.c:557)
>> ==18725==    by 0x44FE6C: unixctl_server_run (unixctl.c:385)
>> ==18725==    by 0x4081AC: main_loop (ovsdb-server.c:182)
>> ==18725==    by 0x406432: main (ovsdb-server.c:429)
>
> Does this help?
>
> diff --git a/lib/socket-util-unix.c b/lib/socket-util-unix.c
> index 5d4b88c..a7a7e03 100644
> --- a/lib/socket-util-unix.c
> +++ b/lib/socket-util-unix.c
> @@ -389,7 +389,7 @@ error:
>  int
>  get_unix_name_len(const struct sockaddr_un *sun, socklen_t sun_len)
>  {
> -    return (sun_len >= offsetof(struct sockaddr_un, sun_path) &&
> +    return (sun_len > offsetof(struct sockaddr_un, sun_path) &&
>              sun->sun_path[0] != 0
>              ? sun_len - offsetof(struct sockaddr_un, sun_path)
>              : 0);

Yup, I don't see the valgrind warning with this change applied.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to