Lines Matching refs:sfd
731 static int mptcp_put_subflow_data(struct mptcp_subflow_data *sfd, in mptcp_put_subflow_data() argument
736 u32 copylen = min_t(u32, sfd->size_subflow_data, sizeof(*sfd)); in mptcp_put_subflow_data()
739 copied += sfd->size_subflow_data; in mptcp_put_subflow_data()
746 if (copy_to_user(optval, sfd, copylen)) in mptcp_put_subflow_data()
752 static int mptcp_get_subflow_data(struct mptcp_subflow_data *sfd, in mptcp_get_subflow_data() argument
763 BUILD_BUG_ON(sizeof(*sfd) != MIN_INFO_OPTLEN_SIZE); in mptcp_get_subflow_data()
768 memset(sfd, 0, sizeof(*sfd)); in mptcp_get_subflow_data()
770 copylen = min_t(unsigned int, len, sizeof(*sfd)); in mptcp_get_subflow_data()
771 if (copy_from_user(sfd, optval, copylen)) in mptcp_get_subflow_data()
775 if (sfd->size_subflow_data > INT_MAX || in mptcp_get_subflow_data()
776 sfd->size_user > INT_MAX) in mptcp_get_subflow_data()
779 if (sfd->size_subflow_data < MIN_INFO_OPTLEN_SIZE || in mptcp_get_subflow_data()
780 sfd->size_subflow_data > len) in mptcp_get_subflow_data()
783 if (sfd->num_subflows || sfd->size_kernel) in mptcp_get_subflow_data()
786 return len - sfd->size_subflow_data; in mptcp_get_subflow_data()
795 struct mptcp_subflow_data sfd; in mptcp_getsockopt_tcpinfo() local
799 len = mptcp_get_subflow_data(&sfd, optval, optlen); in mptcp_getsockopt_tcpinfo()
803 sfd.size_kernel = sizeof(struct tcp_info); in mptcp_getsockopt_tcpinfo()
804 sfd.size_user = min_t(unsigned int, sfd.size_user, in mptcp_getsockopt_tcpinfo()
807 infoptr = optval + sfd.size_subflow_data; in mptcp_getsockopt_tcpinfo()
816 if (len && len >= sfd.size_user) { in mptcp_getsockopt_tcpinfo()
821 if (copy_to_user(infoptr, &info, sfd.size_user)) { in mptcp_getsockopt_tcpinfo()
826 infoptr += sfd.size_user; in mptcp_getsockopt_tcpinfo()
827 copied += sfd.size_user; in mptcp_getsockopt_tcpinfo()
828 len -= sfd.size_user; in mptcp_getsockopt_tcpinfo()
834 sfd.num_subflows = sfcount; in mptcp_getsockopt_tcpinfo()
836 if (mptcp_put_subflow_data(&sfd, optval, copied, optlen)) in mptcp_getsockopt_tcpinfo()
887 struct mptcp_subflow_data sfd; in mptcp_getsockopt_subflow_addrs() local
891 len = mptcp_get_subflow_data(&sfd, optval, optlen); in mptcp_getsockopt_subflow_addrs()
895 sfd.size_kernel = sizeof(struct mptcp_subflow_addrs); in mptcp_getsockopt_subflow_addrs()
896 sfd.size_user = min_t(unsigned int, sfd.size_user, in mptcp_getsockopt_subflow_addrs()
899 addrptr = optval + sfd.size_subflow_data; in mptcp_getsockopt_subflow_addrs()
908 if (len && len >= sfd.size_user) { in mptcp_getsockopt_subflow_addrs()
913 if (copy_to_user(addrptr, &a, sfd.size_user)) { in mptcp_getsockopt_subflow_addrs()
918 addrptr += sfd.size_user; in mptcp_getsockopt_subflow_addrs()
919 copied += sfd.size_user; in mptcp_getsockopt_subflow_addrs()
920 len -= sfd.size_user; in mptcp_getsockopt_subflow_addrs()
926 sfd.num_subflows = sfcount; in mptcp_getsockopt_subflow_addrs()
928 if (mptcp_put_subflow_data(&sfd, optval, copied, optlen)) in mptcp_getsockopt_subflow_addrs()