对于一个我想让数据从用户空间到达内核的项目,我已经为字符串和整数创建了新的套接字选项,但是我陷入了结构难题。您如何将结构从用户空间发送到内核?
我尝试使用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中设置值时崩溃。