Назначение указателя структуры вызывает замораживание ядра
У меня есть структура в ядре Linux, как показано ниже:
struct st_fetch_point {
struct sk_buff *end_pkt ;
struct sk_buff *start_pkt ;
struct sk_buff *current_pkt ;
struct st_fetch_point *next_fortp ;
struct st_fetch_point *next_consec ;
};
У меня есть четыре указателя на определенную структуру, как показано ниже:
struct mptcp_tcp_sock {
struct st_fetch_point *start_fetch_point ;
struct st_fetch_point *last_fetch_point;
struct st_fetch_point *current_fetch_point;
struct st_fetch_point *first_fetch_point ;
struct tcp_sock *tp;
.......................
.......................
};
struct tcp_sock {
struct mptcp_tcp_sock *mptcp;
............................
............................
};
Я просто делаю эту операцию:
first_fetch_point = kmalloc ((sizeof(struct st_fetch_point)), GFP_ATOMIC);
first_fetch_point->start_pkt = skb; //skb value is a pointer to some memory address
first_fetch_point->current_pkt = skb;
first_fetch_point->end_pkt = skb2;
Затем, когда я выполнил следующую строку:
tp->mptcp->current_fetch_point = first_fetch_point ; // tp->mptcp->current_fetch_point = NULL before this point
Ядро зависает. Что-то не так с тем, как я назначаю эти указатели? Я работаю на платформе Ubuntu и действительно исправляю, что может привести к зависанию ядра в этой точке.