[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-530?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12765651#action_12765651
 ] 

Patrick Hunt commented on ZOOKEEPER-530:
----------------------------------------

Isabel, is this ready for review? Please click the "submit patch" link if so. 

Also, is there some test we can add for this? Or we just need to run the 
existing tests on IPv6?


> Memory corruption: Zookeeper c client IPv6 implementation does not honor 
> struct sockaddr_in6 size
> -------------------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-530
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-530
>             Project: Zookeeper
>          Issue Type: Bug
>          Components: c client
>    Affects Versions: 3.2.0, 3.2.1
>            Reporter: Isabel Drost
>            Assignee: Isabel Drost
>             Fix For: 3.3.0
>
>         Attachments: ZOOKEEPER-530.patch
>
>
> I tried to run zookeeper c-client on a machine with IPv6 enabled. When 
> connecting to the IPv6 address a connect(...) gave a "Address family not 
> supported by protocol" error. The reason was, that a few lines earlier, the 
> socket was opened with PF_INET instead of PF_INET6. Changing that the 
> following way:
> {code}
>            if (zh->addrs[zh->connect_index].sa_family == AF_INET) {
>               zh->fd = socket(PF_INET, SOCK_STREAM, 0);
>             } else {
>               zh->fd = socket(PF_INET6, SOCK_STREAM, 0);
>             }
> {code}
> turned the error message into "Invalid argument". 
> When printing out sizeof(struct sockaddr), sizeof(struct sockaddr_in) and 
> sizeof(struct sockaddr_in6) I got sockaddr: 16, sockaddr_in: 16 and 
> sockaddr_in6: 28. 
> So in the code calling 
> {code}
>            connect(zh->fd, &zh->addrs[zh->connect_index], sizeof(struct 
> sockaddr_in));
> {code}
> the parameter address_len is too small.
> Same applies to how IPv6 addresses are handled in the function 
> getaddrs(zhandle_t *zh).
> (Big Thanks+kiss to Thilo Fromm for helping me debug this.)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to