Lines Matching refs:sfd
966 static int mptcp_put_subflow_data(struct mptcp_subflow_data *sfd,
971 u32 copylen = min_t(u32, sfd->size_subflow_data, sizeof(*sfd));
974 copied += sfd->size_subflow_data;
981 if (copy_to_user(optval, sfd, copylen))
987 static int mptcp_get_subflow_data(struct mptcp_subflow_data *sfd,
999 BUILD_BUG_ON(sizeof(*sfd) != MIN_INFO_OPTLEN_SIZE);
1004 memset(sfd, 0, sizeof(*sfd));
1006 copylen = min_t(unsigned int, len, sizeof(*sfd));
1007 if (copy_from_user(sfd, optval, copylen))
1011 if (sfd->size_subflow_data > INT_MAX ||
1012 sfd->size_user > INT_MAX)
1015 if (sfd->size_subflow_data < MIN_INFO_OPTLEN_SIZE ||
1016 sfd->size_subflow_data > len)
1019 if (sfd->num_subflows || sfd->size_kernel)
1022 return len - sfd->size_subflow_data;
1031 struct mptcp_subflow_data sfd;
1035 len = mptcp_get_subflow_data(&sfd, optval, optlen);
1039 sfd.size_kernel = sizeof(struct tcp_info);
1040 sfd.size_user = min_t(unsigned int, sfd.size_user,
1043 infoptr = optval + sfd.size_subflow_data;
1052 if (len && len >= sfd.size_user) {
1057 if (copy_to_user(infoptr, &info, sfd.size_user)) {
1062 infoptr += sfd.size_user;
1063 copied += sfd.size_user;
1064 len -= sfd.size_user;
1070 sfd.num_subflows = sfcount;
1072 if (mptcp_put_subflow_data(&sfd, optval, copied, optlen))
1123 struct mptcp_subflow_data sfd;
1127 len = mptcp_get_subflow_data(&sfd, optval, optlen);
1131 sfd.size_kernel = sizeof(struct mptcp_subflow_addrs);
1132 sfd.size_user = min_t(unsigned int, sfd.size_user,
1135 addrptr = optval + sfd.size_subflow_data;
1144 if (len && len >= sfd.size_user) {
1149 if (copy_to_user(addrptr, &a, sfd.size_user)) {
1154 addrptr += sfd.size_user;
1155 copied += sfd.size_user;
1156 len -= sfd.size_user;
1162 sfd.num_subflows = sfcount;
1164 if (mptcp_put_subflow_data(&sfd, optval, copied, optlen))