>> - connection->original.hip_tuple = malloc(sizeof(struct >> hip_tuple)); >> - memset(connection->original.hip_tuple, 0, sizeof(struct hip_tuple)); >> - connection->original.hip_tuple->tuple = &connection->original; >> - connection->original.hip_tuple->data = malloc(sizeof(struct >> hip_data)); >> - memset(connection->original.hip_tuple->data, 0, sizeof(struct >> hip_data)); >> - memcpy(&connection->original.hip_tuple->data->src_hit, &data->src_hit, >> sizeof(struct in6_addr)); >> - memcpy(&connection->original.hip_tuple->data->dst_hit, &data->dst_hit, >> sizeof(struct in6_addr)); >> - connection->original.hip_tuple->data->src_hi = NULL; >> - connection->original.hip_tuple->data->verify = NULL; >> + connection->original.hip_tuple = malloc(sizeof(struct >> hip_tuple)); >> + connection->original.hip_tuple->tuple = &connection->original; >> + connection->original.hip_tuple->data = calloc(1, sizeof(struct >> hip_data)); >> + connection->original.hip_tuple->data->src_hit = data->src_hit; >> + connection->original.hip_tuple->data->dst_hit = data->dst_hit; > > AFAICT connection->original.hip_tuple is no longer zeroed. What am I > missing? Your observation is correct, but zeroing connection->original.hip_tuple seems superfluous as struct hip_tuple has exactly two members: tuple and data. Both members are set by the subsequent code so it appeared unnecessary to me to set them to 0 before setting them to some other value. Stefan