如何使用socketoptions将结构从用户空间发送到内核?

时间:2019-06-25 13:21:36

标签: c pointers tcp structure mptcp

对于一个我想让数据从用户空间到达内核的项目,我已经为字符串和整数创建了新的套接字选项,但是我陷入了结构难题。您如何将结构从用户空间发送到内核?

我尝试使用copy_from_user,但是我认为使用此函数的方式有问题。因为我认为copy_from_user应该有效,所以我对吗?

我正在尝试从用户空间发送到内核的结构:

struct mptcp_socket_info {
         __u8 threshold_s1;
         __u8 threshold_s2;
}

内核代码:

CASE: MPTCP_SOCKET_INFO: {
         if (optlen < 1)
                return EINVAL;

         lock_sock(sk);
         copy_from_user(tcp_sk(mptcp_meta_sk(sk))->mpcb->socket_info, optval, sizeof(struct mptcp_socket_info));
         release_sock(sk);
         return 0;
         }

用户空间中的代码

        int sockfd, portno, n;
        struct sockaddr_in serv_addr;
        struct hostent *server;
        struct mptcp_socket_info socket_info;

        socket_info.threshold_s1 = 100;
        socket_info.threshold_s2 = 50;

-----
-----

        setsockopt(sockfd, SOL_TCP, MPTCP_SOCKET_INFO, &socket_info, sizeof(socket_info));

当我运行这段代码时,内核崩溃,并且它说当我尝试在socketopt中设置值时崩溃。

0 个答案:

没有答案