make rtnetlink use netlink_check_skb
Subsystems (2)
PATCH 4/4 make rtnetlink use netlink_check_skb
The modification required to make rtnetlink.c use netlink_check_skb
--
Pablo
oops, forgot to attach the patch
Quoted 5 lines · Pablo Neira
The modification required to make
rtnetlink.cusenetlink_check_skbSignature · 1 line
Pablo
===== net/core/rtnetlink.c 1.33 vs edited =====
net/core/rtnetlink.c +1 -36
@@ -570,41 +570,6 @@return -1 ; } -/* -* Process one packet of messages. -* Malformed skbs with wrong lengths of messages are discarded silently. -*/ - -static inline int rtnetlink_rcv_skb (struct sk_buff *skb) -{ -int err; -struct nlmsghdr * nlh; - -while (skb->len >=NLMSG_SPACE (0 )) { -u32 rlen; - - nlh = (struct nlmsghdr *)skb->data; -if (nlh->nlmsg_len <sizeof (*nlh) || skb->len < nlh->nlmsg_len) -return 0 ; - rlen =NLMSG_ALIGN (nlh->nlmsg_len); -if (rlen > skb->len) - rlen = skb->len; -if (rtnetlink_rcv_msg (skb, nlh, &err)) { -/* Not error, but we must interrupt processing here: -* Note, that in this case we do not pull message -* from skb, it will be processed later. -*/ -if (err ==0 ) -return -1 ; -netlink_ack (skb, nlh, err); - }else if (nlh->nlmsg_flags&NLM_F_ACK ) -netlink_ack (skb, nlh,0 ); -skb_pull (skb, rlen); - } - -return 0 ; -} -/* * rtnetlink input queue processing routine: * - try to acquire shared lock. If it is failed, defer processing.
@@ -622,7 +587,7 @@return ;while ((skb =skb_dequeue (&sk->sk_receive_queue)) !=NULL ) { -if (rtnetlink_rcv_skb (skb)) { +if (netlink_process_skb (skb, rtnetlink_rcv_msg)) {if (skb->len)skb_queue_head (&sk->sk_receive_queue, skb);