if (had_comm_param) {
struct comm_addr_storage *addrst = &ctx->comm_addr_storage;
if (comm->src_addr) {
- memcpy(&addrst->src_addr.ip, comm->src_addr,
- kr_sockaddr_len(comm->src_addr));
+ int len = kr_sockaddr_len(comm->src_addr);
+ kr_require(len > 0 && len <= sizeof(union kr_sockaddr));
+ memcpy(&addrst->src_addr, comm->src_addr, len);
ctx->comm_storage.src_addr = &addrst->src_addr.ip;
}
if (comm->comm_addr) {
- memcpy(&addrst->comm_addr.ip, comm->comm_addr,
- kr_sockaddr_len(comm->comm_addr));
+ int len = kr_sockaddr_len(comm->comm_addr);
+ kr_require(len > 0 && len <= sizeof(union kr_sockaddr));
+ memcpy(&addrst->comm_addr, comm->comm_addr, len);
ctx->comm_storage.comm_addr = &addrst->comm_addr.ip;
}
if (comm->dst_addr) {
- memcpy(&addrst->dst_addr.ip, comm->dst_addr,
- kr_sockaddr_len(comm->dst_addr));
+ int len = kr_sockaddr_len(comm->dst_addr);
+ kr_require(len > 0 && len <= sizeof(union kr_sockaddr));
+ memcpy(&addrst->dst_addr, comm->dst_addr, len);
ctx->comm_storage.dst_addr = &addrst->dst_addr.ip;
}
ctx->comm = &ctx->comm_storage;