°ÙÀÖ²©ADLab£ºLinuxÄÚºËCVE-2017-11176Îó²îÆÊÎöÓ븴ÏÖ

Ðû²¼Ê±¼ä 2019-01-04
Îó²îÅä¾°

LinuxÄÚºËÖеÄPOSIX ÐÂÎÅÐÐÁÐʵÏÖÖб£´æÒ»¸öUAFÎó²îCVE-2017-11176¡£ ¡£¡£¡£ ¡£¡£¹¥»÷Õß¿ÉÒÔʹÓøÃÎó²îµ¼Ö¾ܾøÐ§ÀÍ»òÖ´ÐÐí§Òâ´úÂë¡£ ¡£¡£¡£ ¡£¡£±¾ÎĽ«´ÓÎó²î³ÉÒò¡¢²¹¶¡ÆÊÎöÒÔ¼°Îó²î¸´Ïֵȶà¸ö½Ç¶È¶Ô¸ÃÎó²î¾ÙÐÐÏêϸÆÊÎö¡£ ¡£¡£¡£ ¡£¡£

Îó²îÆÊÎö


PosixÐÂÎÅÐÐÁÐÔÊÐíÒì²½ÊÂÎñ֪ͨ£¬£¬£¬£¬£¬µ±ÍùÒ»¸ö¿ÕÐÐÁа²ÅÅÒ»¸öÐÂÎÅʱ£¬£¬£¬£¬£¬PosixÐÂÎÅÐÐÁÐÔÊÐí±¬·¢Ò»¸öÐźŻòÆô¶¯Ò»¸öÏ̡߳£ ¡£¡£¡£ ¡£¡£ÕâÖÖÒì²½ÊÂÎñ֪ͨŲÓÃmq_notifyº¯ÊýʵÏÖ£¬£¬£¬£¬£¬mq_notifyΪָ¶¨ÐÐÁн¨Éè»òɾ³ýÒ첽֪ͨ¡£ ¡£¡£¡£ ¡£¡£ÓÉÓÚmq_notifyº¯ÊýÔÚ½øÈëretryÁ÷³ÌʱûÓн«sockÖ¸ÕëÉèÖÃΪNULL£¬£¬£¬£¬£¬¿ÉÄܵ¼ÖÂUAFÎó²î¡£ ¡£¡£¡£ ¡£¡£


´Ó²¹¶¡´úÂë¿ÉÖª£¬£¬£¬£¬£¬½«sockÉèÖÃΪNULL¼´¿É¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


½ÓÏÂÀ´¿´¿´Îó²îÒòÓÉ£¬£¬£¬£¬£¬ÕâÀïÒÔ4.1.0°æ±¾Ô´ÂëΪÀý¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÔÚmq_notifyº¯ÊýÖУ¬£¬£¬£¬£¬ u_notificationÊÇ´ÓÓû§²ã´«½øÀ´µÄ£¬£¬£¬£¬£¬1193ÐÐÅжÏu_notificationÊÇ·ñΪ¿Õ£¬£¬£¬£¬£¬ÈôÊǷǿգ¬£¬£¬£¬£¬Í¨¹ýcopy_from_user½«u_notificationÖеÄÊý¾Ý¿½±´µ½notificationÖУ¬£¬£¬£¬£¬ÕâÀォÊý¾Ý´ÓÓû§²ã¿½±´µ½ÁËÄں˲㡣 ¡£¡£¡£ ¡£¡£ÈôÊÇ¿½±´Ê§°Ü£¬£¬£¬£¬£¬Ö±½ÓÍ˳ö¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


½ÓÏÂÀ´£¬£¬£¬£¬£¬ncºÍsock»®·ÖÖÿա£ ¡£¡£¡£ ¡£¡£ÐÐ1203£¬£¬£¬£¬£¬ÈôÊÇu_notification²»Îª¿Õ£¬£¬£¬£¬£¬Ê×ÏÈÒÀ´ÎÅжÏnotification.sigev_notify±ØÐèΪSIGEV_NONE»òSIGEV_SIGNAL»òSIGEV_THREAD¡£ ¡£¡£¡£ ¡£¡£ÈôÊÇnotification.sigev_notifyΪSIGEV_SIGNAL£¬£¬£¬£¬£¬¾ÍÅжϸÃÐźÅÊÇ·ñÕýµ±¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ1212£¬£¬£¬£¬£¬ÈôÊÇnotification.sigev_notifyΪSIGEV_THREAD£¬£¬£¬£¬£¬½øÈëÒªº¦´úÂë¿é¡£ ¡£¡£¡£ ¡£¡£ÐÐ1216£¬£¬£¬£¬£¬Í¨¹ýalloc_skb½¨ÉèÒ»¸önotify_skb£¬£¬£¬£¬£¬ÓÃÓÚÎüÊÕÊý¾Ý¡£ ¡£¡£¡£ ¡£¡£ÐÐ1221£¬£¬£¬£¬£¬Í¨¹ýcopy_from_user½«notification.sigev_value.sival_ptrÖ¸ÏòµÄÊý¾Ý¿½±´µ½nc->dataÖС£ ¡£¡£¡£ ¡£¡£ÕâÀï±ØÐèÀֳɣ¬£¬£¬£¬£¬²»È»Ö±½ÓÍ˳ö£»£»£»£»£»ÐÐ1229£¬£¬£¬£¬£¬Å²ÓÃskb_putÉèÖÃÐÂÎÅÊý¾ÝÍ·²¿¡£ ¡£¡£¡£ ¡£¡£ÐÐ1231µ½ÐÐ1248ÊÇretryÑ­»·Ìå¡£ ¡£¡£¡£ ¡£¡£ÐÐ1232£¬£¬£¬£¬£¬Å²ÓÃfdgetº¯Êý»ñÈ¡ÎļþÐÎò·û¡£ ¡£¡£¡£ ¡£¡£ÐÐ1237£¬£¬£¬£¬£¬Å²ÓÃnetlink_getsockbyfilpº¯Êýͨ¹ýÎļþÐÎò·û»ñÈ¡netlink_sock£¬£¬£¬£¬£¬Ïêϸ¿´Ò»ÏÂnetlink_getsockbyfilpº¯Êý¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ŲÓÃfile_inodeͨ¹ýfilpÕÒµ½¶ÔÓ¦µÄinode½Úµã£¬£¬£¬£¬£¬È»ºóͨ¹ýSOCK_Iº¯Êý´¦Öóͷ£inode½Úµã¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÕâÀïͨ¹ýºêcontainer_ofÔÚsocket_alloc½á¹¹ÌåÖÐÕÒ³ösocket³ÉÔ±¡£ ¡£¡£¡£ ¡£¡£ÕâÀïÚ¹ÊÍһϣ¬£¬£¬£¬£¬SOCKET_I·µ»ØÖµÊÇsocket½á¹¹Ìå¡£ ¡£¡£¡£ ¡£¡£×Åʵsock½á¹¹ÌåÖеÚÒ»¸ö³ÉÔ±sock_commonÒ²ÊÇsocketÀàÐÍ£¬£¬£¬£¬£¬ÊÇÒ»¸öÃÔÄã°æsocket¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÏÂÃæ¿´Ò»ÏÂsock_common½á¹¹Ìå¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ1609£¬£¬£¬£¬£¬»ñÈ¡µ½sockºó£¬£¬£¬£¬£¬È»ºóÅжÏsock->sk_familyÊÇ·ñ¼´ÊÇAF_NETLINK¡£ ¡£¡£¡£ ¡£¡£ÐÐ1613£¬£¬£¬£¬£¬½Ó×ÅŲÓÃsock_holdÔöÌíÒýÓüÆÊý¡£ ¡£¡£¡£ ¡£¡£sock_holdº¯ÊýÈçÏ£º


welcome-°ÙÀÖ²©


ÕâÀïatomic_inc¾ÙÐÐsk_refcnt¼Ó1¡£ ¡£¡£¡£ ¡£¡£netlink_getsockbyfilpº¯Êý·µ»Øsock£¬£¬£¬£¬£¬ÕâʱsockµÄÒýÓüÆÊý¼Ó1¡£ ¡£¡£¡£ ¡£¡£½ÓÏÂÀ´£¬£¬£¬£¬£¬ÐÐ1246£¬£¬£¬£¬£¬Å²ÓÃnetlink_attachskb¡£ ¡£¡£¡£ ¡£¡£ÕâÊǸöÒªº¦º¯Êý£¬£¬£¬£¬£¬¸Ãº¯Êý¹¦Ð§Êǽ«skb°ó¶¨µ½netlink socketÉÏ£¬£¬£¬£¬£¬ÏêϸҪº¦´úÂëÈçÏ£º


welcome-°ÙÀÖ²©


ÐÐ1683£¬£¬£¬£¬£¬Å²ÓÃsock_putïÔÌ­ÒýÓüÆÊýÒ»´Î£¬£¬£¬£¬£¬×îºóreturn 1£¬£¬£¬£¬£¬º¯Êý·µ»Ø£¬£¬£¬£¬£¬Ö±½Ógotoµ½retry±êÇ©µØ·½¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÕâÀïÐÐ1237ºÍÐÐ1246£¬£¬£¬£¬£¬ÕâÁ½´¦Å²ÓÃÕýºÃ¾ÙÐÐÁËÒýÓüÆÊýµÖÏû¡£ ¡£¡£¡£ ¡£¡£ÐÐ1247µÄifÓï¾äÖв¢Ã»Óн«sockÖÿÕ£¬£¬£¬£¬£¬ÔÙ¿´ÐÐ1233£¬£¬£¬£¬£¬ÈôÊÇf.fileΪ¿Õ£¬£¬£¬£¬£¬ÄǾÍÖ±½Ógotoµ½out±êÇ©¡£ ¡£¡£¡£ ¡£¡£out±êÇ©´úÂëÈçÏ£º


welcome-°ÙÀÖ²©


ÐÐ1306£¬£¬£¬£¬£¬ÅжÏsockÊÇ·ñΪ¿Õ£¬£¬£¬£¬£¬ÈôÊDz»Îª¿Õ£¬£¬£¬£¬£¬Å²ÓÃnetlink_detachskbº¯Êý¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÊÍ·Åskb£¬£¬£¬£¬£¬²¢ïÔÌ­skÒýÓüÆÊý£¬£¬£¬£¬£¬¾ÙÐÐÊÍ·Å¡£ ¡£¡£¡£ ¡£¡£ ÄÇô¾ÍÓÐÎÊÌâÁË£¬£¬£¬£¬£¬ÈôÊÇÎÒÃǽ¨ÉèAÏ̼߳á³Önetlink_attachskb·µ»Ø1£¬£¬£¬£¬£¬²¢Öظ´retryÂß¼­£¬£¬£¬£¬£¬Õâ¸öʱ¼äsockµÄÒýÓüÆÊýÊǼá³ÖƽºâµÄ£¬£¬£¬£¬£¬Ò»¼ÓÒ»¼õ£¬£¬£¬£¬£¬¿ÉÊÇsock²¢²»ÊÇΪ¿Õ¡£ ¡£¡£¡£ ¡£¡£Í¬Ê±ÔÙ½¨ÉèBÏß³ÌÈ¥¹Ø±Õnetlink socket¶ÔÓ¦µÄÎļþÐÎò·û¡£ ¡£¡£¡£ ¡£¡£ÓÉÓÚBÏ̹߳رÕÁËnetlink socketµÄÎļþÐÎò·û£¬£¬£¬£¬£¬ÄÇAÏß³ÌÔÚretryÂß¼­ÖУ¬£¬£¬£¬£¬ÐÐ1232£¬£¬£¬£¬£¬Å²ÓÃfdgetʱ»áʧ°Ü£¬£¬£¬£¬£¬È»ºóÖ±½Ógotoµ½out±êÇ©£¬£¬£¬£¬£¬¾ÙÐÐÊÍ·Å£¬£¬£¬£¬£¬¾ÙÐÐÁ˶þ´ÎÊÍ·Å£¬£¬£¬£¬£¬µ¼ÖÂÎó²î¡£ ¡£¡£¡£ ¡£¡£Õâ¸öÎó²îÊÇÊôÓÚÌõ¼þ¾ºÕùÐ͵Ķþ´ÎÊÍ·ÅÎó²î£¬£¬£¬£¬£¬Ö»ÔÚÒ»¸öÏß³ÌÖУ¬£¬£¬£¬£¬ÊÇÎÞ·¨´¥·¢Îó²î¡£ ¡£¡£¡£ ¡£¡£


Õâ¸öÎó²îÔ­Àí½ÏÁ¿¼òÆÓ£¬£¬£¬£¬£¬¿ÉÊÇÔõÑù´¥·¢Õâ¸öÎó²îÕվɽÏÁ¿ÖØ´ó¡£ ¡£¡£¡£ ¡£¡£Ê×ÏÈ£¬£¬£¬£¬£¬ÔõÑùÈÃnetlink_attachskb·µ»Ø1£¬£¬£¬£¬£¬´Ó¶øË³Ëì½øÈëretryÂß¼­¡£ ¡£¡£¡£ ¡£¡£Ôٴλؿ´netlink_attachskbµÄʵÏÖ¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ1657£¬£¬£¬£¬£¬Í¨¹ýnlk_skº¯Êýͨ¹ýsk»ñÈ¡netlink_sock¡£ ¡£¡£¡£ ¡£¡£ÕâÀïµÄnlk_skÈçÏ¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ͨ¹ýŲÓúêcontainer_of»ñÈ¡netlink_sock¡£ ¡£¡£¡£ ¡£¡£netlink_sock½á¹¹ÌåÈçÏ£º


welcome-°ÙÀÖ²©


netlink_sock½á¹¹ÌåµÚÒ»¸ö³ÉÔ±ÊÇsockÀàÐÍ£¬£¬£¬£¬£¬¶øsock½á¹¹ÌåµÄµÚÒ»¸ö³ÉÔ±ÊÇsocket¡£ ¡£¡£¡£ ¡£¡£ÐÐ1660£¬£¬£¬£¬£¬µÚÒ»¸öifÅжϱØÐèµÃ½øÈë¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


!netlink_skb_is_mmaped(skb)¿Ï¶¨·µ»Øtrue£¬£¬£¬£¬£¬Òªº¦ÊÇsk->sk_rmem_alloc>sk->sk_rcvbuf || test_bit(NETLINK_CONGESTED, &nlk->state)Ч¹û±ØÐèÊÇtrue¡£ ¡£¡£¡£ ¡£¡£


ÕâÀïͨ¹ýÉèÖÃsk->sk_rmem_allocµÄ¾ÞÏ¸ÈÆ¹ýcheck¸üΪÀû±ã£¬£¬£¬£¬£¬´úÂëÈçÏ¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÈôÊÇifÅжÏÇ·ºà¹ý£¬£¬£¬£¬£¬½Ó×ÅŲÓÃnetlink_skb_set_owner_rº¯Êý£¬£¬£¬£¬£¬ÈçÏÂËùʾ¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ878£¬£¬£¬£¬£¬Å²Óúêatomic_add£¬£¬£¬£¬£¬¸ÃºêÖ´ÐÐÔ­×Ó¼Ó²Ù×÷¡£ ¡£¡£¡£ ¡£¡£ÕâÐдúÂëµÄ¼ÄÒåÊÇ£ºÔÚsk->sk_rmem_allocµÄ»ù´¡ÉϼÓÉÏskb->truesize¡£ ¡£¡£¡£ ¡£¡£µÈͬÓÚsk->sk_rmem_alloc += skb->truesize¡£ ¡£¡£¡£ ¡£¡£¼ÈÈ»¸Ãº¯ÊýÀïÕâÐдúÂë¿ÉÒÔÖ±½ÓÔöÌísk->sk_rmem_allocµÄ¾Þϸ£¬£¬£¬£¬£¬ÄÇô¿É²»¿ÉÒÔ¶à´ÎŲÓÃnetlink_skb_set_owner_rº¯ÊýÔöÌísk->rmem_allocµÄÖµ£¿£¿£¿ÀíÂÛÉÏÊÇÍêÈ«¿ÉÒԵ쬣¬£¬£¬£¬¿´¿´ÔõÑù´ÓÓû§²ãµÖ´ïÕâ¸öº¯Êý¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ͨ¹ýunderstand¹¤¾ß¿ÉÒÔ¿ìËÙÕÒµ½netlink_skb_set_owner_rµÄŲÓÃÁ´£ºnetlink_sendmsg->netlink_unicast->netlink_attachskb->netlink_skb_set_owner_r¡£ ¡£¡£¡£ ¡£¡£


ÔõÑù˳ËìµÄͨ¹ýº¯ÊýŲÓ÷¾¶£¿£¿£¿ÕâÀïÐèÒªÆÊÎöÔõÑù´Ónetlink_sendmsgµÖ´ïnetlink_skb_set_owner_r¡£ ¡£¡£¡£ ¡£¡£netlink_sendmsgº¯ÊýʵÏÖÈçÏ¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ2285£¬£¬£¬£¬£¬Ê×ÏÈÅжÏmsg->msg_flag²»¿ÉΪMSG_OOB£¬£¬£¬£¬£¬¼ÌÐøÍùÏ¿´¡£ ¡£¡£¡£ ¡£¡£

welcome-°ÙÀÖ²©


ÐÐ2292£¬£¬£¬£¬£¬ÅжÏmsg->msg_namelenµÄ³¤¶È£¬£¬£¬£¬£¬ÕâÀï±ØÐ費Ϊ¿Õ£¬£¬£¬£¬£¬ËäȻҲ²»»áΪ¿Õ¡£ ¡£¡£¡£ ¡£¡£½øÈëifºó£¬£¬£¬£¬£¬ÅжÏaddr->nl_familyÊÇ·ñ¼´ÊÇAF_NETLINK¡£ ¡£¡£¡£ ¡£¡£ÐÐ2299£¬£¬£¬£¬£¬ÅжÏdst_group»òdst_portid²»Îª¿Õ£¬£¬£¬£¬£¬dst_groupÌåÏֶಥģʽ£¬£¬£¬£¬£¬dst_portidÀ´×ÔÓÚaddr->nl_pid£¬£¬£¬£¬£¬Òò´Ë°ü¹Üdst_portid²»Îª¿Õ½ÏÁ¿ÈÝÒס£ ¡£¡£¡£ ¡£¡£½ÓÏÂÀ´£º


welcome-°ÙÀÖ²©


ÐÐ2320£¬£¬£¬£¬£¬ÅжÏÁËmsg->msg_iter.iov->iov_base²»¿ÉΪ¿Õ¡£ ¡£¡£¡£ ¡£¡£²¢ÇÒlen²»¿ÉÒÔ´óÓÚsk->sk_sndbuf-32¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


×ÅʵÕû¸öº¯ÊýÖУ¬£¬£¬£¬£¬Óû§²ã¿É¿ØµÄÖ»ÓÐÕâô¶à¡£ ¡£¡£¡£ ¡£¡£Ö±½Ó¿´netlink_unicastµÄŲÓᣠ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


netlink_unicastº¯ÊýʵÏÖÈçÏ£º


welcome-°ÙÀÖ²©


Õû¸öº¯ÊýÖУ¬£¬£¬£¬£¬Óû§ÄÜ¿ØÖƵÄδ¼¸¡£ ¡£¡£¡£ ¡£¡£ÐÐ1783£¬£¬£¬£¬£¬ÉèÖÃÁËtimeo£¬£¬£¬£¬£¬ÕâÀïÒª°ü¹ÜnonblockΪmsg->msg_flags&MSG_DONTWAIT£¬£¬£¬£¬£¬ÕâÑùÏ̲߳Ų»»á±»block¡£ ¡£¡£¡£ ¡£¡£ÐÐ1790£¬£¬£¬£¬£¬ÅжÏskÊÇ·ñΪÄں˰æµÄsk£¬£¬£¬£¬£¬ÔÚÓû§²ã½¨ÉèsocketʱӦʹÓÃNETLINK_USERSOCK¡£ ¡£¡£¡£ ¡£¡£ÐÐ1793£¬£¬£¬£¬£¬ÅжÏÊÇ·ñÓÐsk_filter£¬£¬£¬£¬£¬ÕâÀï°ü¹Ü²»½øÈë¸ÃifÓï¾ä£¬£¬£¬£¬£¬²»ÒªÉèÖùýÂËÆ÷¡£ ¡£¡£¡£ ¡£¡£ÐÐ1800£¬£¬£¬£¬£¬Ö±½ÓŲÓÃnetlink_attachskb£¬£¬£¬£¬£¬Àֳɵִïnetlink_skb_set_owner_rº¯Êý¡£ ¡£¡£¡£ ¡£¡£ÕâËãÊÇͨ¹ýŲÓÃnetlink_sendmsgÀ´ÔöÌísk->sk_rmem_allocµÄÀú³Ì¡£ ¡£¡£¡£ ¡£¡£×ÅʵÎÒÃDz»µ«¿ÉÒÔÔöÌísk->sk_rmem_alloc£¬£¬£¬£¬£¬»¹¿ÉÒÔ¼õСsk->sk_rcvbuf¡£ ¡£¡£¡£ ¡£¡£


ÄÇôÔõÑù¼õСsk->sk_rcvbuf£¿£¿£¿ÔÚsetsockoptº¯ÊýÖУ¬£¬£¬£¬£¬ÕÒµ½sock_setsockoptº¯ÊýÖжÔsk->sk_rcvbufµÄ²Ù×÷¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ773£¬£¬£¬£¬£¬sk->sk_rcvbufÈ¡val*2ºÍSOCK_MIN_RCVBUFÖ®¼äµÄ×î´óÖµ¡£ ¡£¡£¡£ ¡£¡£ÐÐ755£¬£¬£¬£¬£¬valÈ¡valºÍsysctl_rmem_maxÖ®¼äµÄ×îСֵ¡£ ¡£¡£¡£ ¡£¡£ÐÐ749£¬£¬£¬£¬£¬Õâ¸öcaseΪSO_RCVBUF¡£ ¡£¡£¡£ ¡£¡£¼ÌÐøÍùÉÏ¿´¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ693£¬£¬£¬£¬£¬Òª°ü¹Üoptlen²»Ð¡ÓÚsizeof(int)¡£ ¡£¡£¡£ ¡£¡£ÐÐ696£¬£¬£¬£¬£¬½«optval¸³Öµµ½valÖУ¬£¬£¬£¬£¬ÕâÀïoptvalÊÇÓû§¿É¿ØµÄ¡£ ¡£¡£¡£ ¡£¡£ÐÐ703£¬£¬£¬£¬£¬switch·Ö·¢optname£¬£¬£¬£¬£¬ÒÔÊÇÒª°ü¹ÜoptnameΪSO_RCVBUF¡£ ¡£¡£¡£ ¡£¡£ÕâÑù¾Í¿ÉÒÔ°ü¹Ü˳ËìµÖ´ïÐÞ¸Äsk->rcvbufµÄ´úÂë´¦¡£ ¡£¡£¡£ ¡£¡£

µ½ÕâÀ£¬£¬£¬£¬ÎÒÃÇͨ¹ýÁ½ÖÖ·½·¨¾ÙÐÐÈÆ¹ýnetlink_attachskbº¯ÊýÖеĵÚÒ»¸öcheck¡£ ¡£¡£¡£ ¡£¡£


£¨1£©Í¨¹ýnetlink_sendmsgÔöÌísk->sk_rmem_allocµÄÖµ.

£¨2£©Í¨¹ýsock_setsockopt¾¡¿ÉÄܵؼõСsk->rcvbufµÄÖµ¡£ ¡£¡£¡£ ¡£¡£


½øÈëifÓï¾äºó£¬£¬£¬£¬£¬¿´ÈçÏ´úÂ룺


welcome-°ÙÀÖ²©


Õâ¶Î´úÂë»áÈÃÄ¿½ñÏ߳̽øÈëÆÚ´ý״̬£¬£¬£¬£¬£¬Ö±½Óblock¡£ ¡£¡£¡£ ¡£¡£ÈôÊDz»Ïë½øÈëÆÚ´ý״̬£¬£¬£¬£¬£¬Ö»ÓÐÉèÖÃsock_flagΪSOCK_DEAD¡£ ¡£¡£¡£ ¡£¡£¿ÉÊÇÈôÊǰÑsock_flagÉèÖóÉSOCK_DEAD£¬£¬£¬£¬£¬ÄǺóÃæÒ²Ã»ÓÐÐëÒª¾ÙÐУ¬£¬£¬£¬£¬Òò´ËÕâÀïÊDZض¨Òª½øÈëÆÚ´ý״̬µÄ¡£ ¡£¡£¡£ ¡£¡£Ò»ÖÖÇÉÃîµÄÒªÁìÊÇÖ±½ÓŲÓÃwake_up_interruptibleÇ¿ÐнÐÐÑÏ̡߳£ ¡£¡£¡£ ¡£¡£ÄÇÔõÑùŲÓÃwake_up_interruptibleÄØ£¿£¿£¿º¯ÊýŲÓÃÁ´ºÜÊǼò¶Ì£ºnetlink_setsockopt->wake_up_interruptible¡£ ¡£¡£¡£ ¡£¡£


ÔÚNetlink_setsockoptº¯ÊýÖУº


welcome-°ÙÀÖ²©


ÐÐ2182£¬£¬£¬£¬£¬Å²ÓÃwake_up_interruptible½ÐÐÑÏ̡߳£ ¡£¡£¡£ ¡£¡£ÐÐ2178£¬£¬£¬£¬£¬caseΪNETLINK_NO_ENOBUFS¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÐÐ2131£¬£¬£¬£¬£¬ÅжÏlevel±ØÐèΪSOL_NETLINK£¬£¬£¬£¬£¬ÐÐ2134£¬£¬£¬£¬£¬ÅжÏoptname²»¿ÉΪNETLINK_RX_RINGºÍNETLINK_TX_RING£¬£¬£¬£¬£¬Í¬Ê±°ü¹Üoptlen´óÓÚ¼´ÊÇsizeof(int)¡£ ¡£¡£¡£ ¡£¡£ÐÐ2139£¬£¬£¬£¬£¬switch·Ö·¢optname£¬£¬£¬£¬£¬ÕâÀïÒª°ü¹ÜoptnameΪNETLINK_NO_ENOBUFS¡£ ¡£¡£¡£ ¡£¡£µ½ÕâÀ£¬£¬£¬£¬»ù±¾ÉϾͿÉÒÔ°ü¹Ünetlink_attachskb·µ»Ø1¡£ ¡£¡£¡£ ¡£¡£


°ü¹Ü½øÈëretryÑ­»·ºó£¬£¬£¬£¬£¬Õâ¸öʱ¼äsockÒѾ­²»Îª¿Õ¡£ ¡£¡£¡£ ¡£¡£½ÓÏÂÀ´ÒªÊ¹retryÑ­»·ÖÐÍÉ»¯£¬£¬£¬£¬£¬Ö±½ÓÌø×ªµ½out£¬£¬£¬£¬£¬´úÂëÈçÏ£º


welcome-°ÙÀÖ²©


ÐÐ1232£¬£¬£¬£¬£¬Í¨¹ýfdget»ñÈ¡notification.sigev_signoµÄfd¡£ ¡£¡£¡£ ¡£¡£Notification.sigev_signoÊÇÓû§Ì¬´«½øÀ´µÄ£¬£¬£¬£¬£¬Òò´ËÍêÈ«¿ÉÒÔÔÚÓû§²ãÖ±½ÓcloseÕâ¸ösocket¡£ ¡£¡£¡£ ¡£¡£ÔÚÓû§²ãcloseÕâ¸ösocketºó£¬£¬£¬£¬£¬ÐÐ1233£¬£¬£¬£¬£¬½øÈëifÂß¼­£¬£¬£¬£¬£¬È»ºóÌøµ½out±êÇ©¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


Õâ¸öʱ¼äsockÊǷǿյÄ£¬£¬£¬£¬£¬ifÅжÏÎªÕæ£¬£¬£¬£¬£¬½øÈënetlink_destachskb£¬£¬£¬£¬£¬½ÓמÍÊÇfreeÍ߽⡣ ¡£¡£¡£ ¡£¡£


Îó²î¸´ÏÖ


¹ØÓÚUAFÀàÐ͵ÄÎó²î£¬£¬£¬£¬£¬Í¨ÓÃÒªÁì¾ÍÊÇʹÓöÑÅçÉäռλ¡£ ¡£¡£¡£ ¡£¡£±¾´ÎÎó²îÖб»¶à´ÎÊͷŵŤ¾ßÊÇnetlink_sock¹¤¾ß¡£ ¡£¡£¡£ ¡£¡£netlink_sock¹¤¾ß¾ÞϸΪ0x3f0×Ö½Ú£¬£¬£¬£¬£¬¼´ÊÇ1008byte¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ƾ֤Äں˹¤¾ßÄÚ´æ·ÖÅɹæÔò£¬£¬£¬£¬£¬ netlink_sock¹¤¾ßÓ¦¸Ã´Ókmalloc-1024Õâ¸ö»º´æÖоÙÐзÖÅÉ¡£ ¡£¡£¡£ ¡£¡£
slab·ÖÅÉÆ÷ÔÚ·ÖÅɹ¤¾ßʱ£¬£¬£¬£¬£¬×ñÊØºó½øÏȳöµÄ¹æÔò¡£ ¡£¡£¡£ ¡£¡£ÏÂÃæÊÇslab·ÖÅÉÆ÷ÊÍϰà¾ßµÄÀú³Ì¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÒªÊͷŵŤ¾ßobjp·ÅÔÚÁËac->entry[]µÄ×îºó¡£ ¡£¡£¡£ ¡£¡£ÏÂÃæÊÇslab·ÖÅÉÆ÷·ÖÅɹ¤¾ßµÄÀú³Ì£º


welcome-°ÙÀÖ²©


·ÖÅɹ¤¾ßÖ±½Ó´Óac->entry[]×îºóµ¯³öÒ»¸ö¹¤¾ß¡£ ¡£¡£¡£ ¡£¡£


ÒÔÊÇÒ»¸ö¸Õ¸Õ±»ÊͷŵŤ¾ßÊÇÅÅÔÚÁ´±íÄ©¶Î£¬£¬£¬£¬£¬ÈôÊÇ´ËʱǡÐÒ¿÷ͳһ»º´æÖоÙÐй¤¾ß·ÖÅÉ£¬£¬£¬£¬£¬ÄǸոÕÊͷŵŤ¾ß¾Í»á±»ÖØÐ·ÖÅɳöÈ¥£¬£¬£¬£¬£¬Õâ¾Í·ºÆðÁ½¸öÖ¸ÕëÖ¸Ïòͳһ¿éÄÚ´æµØµã¡£ ¡£¡£¡£ ¡£¡£ÒªÏë°ü¹ÜÉêÇëµÄÄÚ´æÕýºÃÂäÔÚÎó²î¹¤¾ßµÄÄÚ´æÎ»ÖÃÖУ¬£¬£¬£¬£¬ÐèÒªÕÆÎÕס¼¸µã£º


¶ÑÅ繤¾ßʹÓõÄÄں˻º´æÓ¦¸ÃºÍÎó²î¹¤¾ßÄÚ±£´æÍ³Ò»¸ö»º´æÖС£ ¡£¡£¡£ ¡£¡£¼´¾Þϸ±ØÐèÂäÔÚͳһ¸ökmalloc-XÖС£ ¡£¡£¡£ ¡£¡£


ac×Ô¼ºÊÇarray_chche½á¹¹Ì壬£¬£¬£¬£¬¸Ã½á¹¹ÌåÊÇÍâµØ¸ßËÙ»º´æ£¬£¬£¬£¬£¬Ã¿¸öCPU¶ÔÓ¦Ò»¸ö£¬£¬£¬£¬£¬ÒÔÊÇ»¹Òª°ü¹Ü¶ÑÅçÉêÇëµÄ¹¤¾ßºÍÎó²î¹¤¾ßÔÚͳһ¸öCPUÍâµØ¸ßËÙ»º´æÖС£ ¡£¡£¡£ ¡£¡£


ÈôÊǶÑÅçÉêÇëµÄ¹¤¾ßÖ»ÊǶÌÔÝפÁô£¬£¬£¬£¬£¬µ±¸Ãº¯Êý·µ»ØÊ±½«ÉêÇëµÄ¹¤¾ß¾ÙÐÐÁËÊÍ·Å£¬£¬£¬£¬£¬µ¼ÖÂÎÞ·¨×¼È·Õ¼Î»¡£ ¡£¡£¡£ ¡£¡£ÒÔÊÇÒªÄܰü¹ÜÉêÇëµÄ¹¤¾ß²»±»ÊÍ·Å£¬£¬£¬£¬£¬ÖÁÉÙ°ü¹ÜÔÚʹÓÃÎó²î¹¤¾ßʱ²»±»ÊÍ·Å£¬£¬£¬£¬£¬ÕâÀïÒª½ÓÄÉפÁôʽÄÚ´æÕ¼Î»£¬£¬£¬£¬£¬¿ÉÒÔ½ÓÄÉÈÃijЩϵͳŲÓÃÀú³ÌÛÕ±Õ¡£ ¡£¡£¡£ ¡£¡£


slab»º´æË鯬»¯ÎÊÌ⣬£¬£¬£¬£¬ÕâÀïҪռλµÄ¹¤¾ß¾ÞϸΪ1008£¬£¬£¬£¬£¬¹¤¾ß³ß´ç½ÏÁ¿´ó£¬£¬£¬£¬£¬Õ¼ÓÐËÄ·ÖÖ®Ò»Ò³£¬£¬£¬£¬£¬½ÏÁ¿ÕûÆë£¬£¬£¬£¬£¬Ó¦¸ÃûÓÐË鯬»¯ÎÊÌâ¡£ ¡£¡£¡£ ¡£¡£


ÄÇôÔõÑùÅж϶ÑÅçÊÇ·ñÀÖ³ÉÄØ£¿£¿£¿


ͨÓÃÇéÐÎÏ£¬£¬£¬£¬£¬ÔÚ¾ÙÐжÑÅçʱ¼ä£¬£¬£¬£¬£¬½á¹¹¶ÑÅ繤¾ßʱ£¬£¬£¬£¬£¬ÓÐÐëÒªÔÚ¶ÔÓ¦Îó²î¹¤¾ßµÄÒ»Ð©ÌØÊâ³ÉÔ±ÓòµÄÄÚ´æÆ«ÒÆ´¦ÉèÖÃmagic value£¬£¬£¬£¬£¬È»ºó¿ÉÒÔ½ÓÄÉϵͳŲÓÃÈ¥»ñÈ¡Îó²î¹¤¾ßÖÐÏà¹ØÊý¾Ý¾ÙÐÐÅжϡ£ ¡£¡£¡£ ¡£¡£netlink_sock½á¹¹Ì弸¸öÒªº¦µÄ³ÉÔ±ÈçÏ¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


½ÓÄÉgetsocknameϵͳŲÓûñÈ¡Êý¾Ý£¬£¬£¬£¬£¬getsockname»áŲÓÃnetlink_getname¡£ ¡£¡£¡£ ¡£¡£Ïêϸ¿´Ò»ÏÂnetlink_getnameº¯Êý£º


welcome-°ÙÀÖ²©


´úÂë1576ÐУ¬£¬£¬£¬£¬½«netlink_sock¹¤¾ßÖеÄportid¸´ÖƸønladdr->nl_pid¡£ ¡£¡£¡£ ¡£¡£´úÂë1577ÐУ¬£¬£¬£¬£¬ÈôÊÇnlk->groupΪ0£¬£¬£¬£¬£¬½«nladdr->nl_groups¸³ÖµÎªNULL£¬£¬£¬£¬£¬ÕâÀï×èÖ¹½âÒýÓÃnlk->groupsÖ¸Õ룬£¬£¬£¬£¬Ö±½Ó¿ÉÒÔÔڽṹ¶ÑÅ繤¾ßʱ½«groupsÓòÌîÁã¡£ ¡£¡£¡£ ¡£¡£¶ønladdrÊÇ´Óaddrת»»¹ýÀ´µÄ£¬£¬£¬£¬£¬addr¾ÍÊÇ´ÓÓû§²ã´«ÈëµÄ»º³åÇø¡£ ¡£¡£¡£ ¡£¡£


¶ÑÅçÀÖ³ÉÈçÏ£º


welcome-°ÙÀÖ²©


ͨ³£ÇéÐÎÊÇÁýÕֽṹÌåÖеĺ¯ÊýÖ¸Õë»òÕß°üÀ¨º¯ÊýÖ¸ÕëµÄ½á¹¹Ìå³ÉÔ±£¬£¬£¬£¬£¬ÕâÊÓÇéÐζø¶¨¡£ ¡£¡£¡£ ¡£¡£ÕâÀïÑ¡ÔñÁýÕÖwaitÆÚ´ýÐÐÁС£ ¡£¡£¡£ ¡£¡£netlink_sock½á¹¹ÌåÈçÏ£º


welcome-°ÙÀÖ²©


wait_queue_haed_t½á¹¹ÌåÈçÏ£º


welcome-°ÙÀÖ²©


task_list³ÉÔ±ÊÇÒ»¸öË«ÏòÑ­»·Á´±íÍ·£¬£¬£¬£¬£¬task_listÖÐÁ´½ÓµÄÿһ¸ö³ÉÔ±¶¼ÊÇÐèÒª´¦Öóͷ£µÄÆÚ´ýÀý³ÌÔªËØ¡£ ¡£¡£¡£ ¡£¡£ÄǸÃÔõÑùʹÓÃÕâ¸ö³ÉÔ±£¿£¿£¿¿´ÈçÏ´úÂë¡£ ¡£¡£¡£ ¡£¡£


welcome-°ÙÀÖ²©


ÕâÊÇnetlink_setsockoptº¯ÊýÖеĴúÂëÆ¬¶Ï£¬£¬£¬£¬£¬Ç°Ãæ»Ö¸´Ï̸߳´ÉúÆÊÎö¹ý£¬£¬£¬£¬£¬ÕâÀォ»áŲÓÃnetlink_sock¹¤¾ßÖÐµÄÆÚ´ýÀý³Ì£¬£¬£¬£¬£¬Ö±½ÓʹÓòÎÊýnlk->wait¡£ ¡£¡£¡£ ¡£¡£¼ÌÐøÉîÈëÆÊÎö£º


welcome-°ÙÀÖ²©


ŲÓÃ__wake_up_commonº¯Êý£º


welcome-°ÙÀÖ²©


´úÂë70ÐУ¬£¬£¬£¬£¬ºêlist_for_each_entry_safe±éÀúq->task_listÖеijÉÔ±£¬£¬£¬£¬£¬·µ»Øµ½curr¡£ ¡£¡£¡£ ¡£¡£´úÂë68ÐУ¬£¬£¬£¬£¬currΪwait_queue_tÖ¸Õ룬£¬£¬£¬£¬ËµÃ÷q->task_listÁ´±íÖдæµÄÊÇwait_queue_tÀàÐ͵ÄÔªËØ£¬£¬£¬£¬£¬wait_queue_t½á¹¹ÌåÈçÏ£º


welcome-°ÙÀÖ²©


wait_queue_t½á¹¹ÌåÖÐÓÐÒ»¸öº¯ÊýÖ¸Õëfunc¡£ ¡£¡£¡£ ¡£¡£ÔÙ¿´__wake_up_commonº¯ÊýÖУ¬£¬£¬£¬£¬´úÂë73ÐУ¬£¬£¬£¬£¬Ö±½ÓÖ´ÐÐcurr>funcº¯Êý£¬£¬£¬£¬£¬¿ÉÒÔͨ¹ý½á¹¹__wait_queueµÄfunc²ÎÊý¿ØÖÆRIP¡£ ¡£¡£¡£ ¡£¡£ÔٻعýÍ·¿´list_for_each_entry_safeºê£º


welcome-°ÙÀÖ²©


posÊÇ__wait_queueÔªËØ£¬£¬£¬£¬£¬´úÂë62ÐУ¬£¬£¬£¬£¬¶Ôpos->member.next¾ÙÐÐÏàʶÒýÓ㬣¬£¬£¬£¬ÕâÀïµÄpos->member¾ÍÊÇ__wait_queueÖеÄtask_list¡£ ¡£¡£¡£ ¡£¡£__wait_queueÖеÄtask_listÒ²ÊÇÒ»¸öÁ´±íÍ·£¬£¬£¬£¬£¬ÐèÒªÖ¸ÏòÒ»¸ölist_head£¬£¬£¬£¬£¬ÒÔÊÇ»¹±ØÐèÒª½á¹¹Ò»¸ö¼ÙµÄlist_headÒÔ±ãÓڸúê¾ÙÐнâÒýÓᣠ¡£¡£¡£ ¡£¡£²âÊÔÈçÏ£º


welcome-°ÙÀÖ²©


½ÓÏÂÀ´¾ÍÊÇͨ¹ýROPÁ´ÈƹýSMEPÖ´ÐÐÌáȨ´úÂë¡£ ¡£¡£¡£ ¡£¡£ÀÖ³ÉÌáȨºóÈçÏÂËùʾ£º

welcome-°ÙÀÖ²©