¿·¢k8ADLab£ºLinuxÄÚºËCVE-2017-11176Îó²îÆÊÎöÓ븴ÏÖ
Ðû²¼Ê±¼ä 2019-01-04LinuxÄÚºËÖеÄPOSIX ÐÂÎÅÐÐÁÐʵÏÖÖб£´æÒ»¸öUAFÎó²îCVE-2017-11176¡£¡£¡£¡£¡£¡£¹¥»÷Õß¿ÉÒÔʹÓøÃÎó²îµ¼Ö¾ܾøÐ§ÀÍ»òÖ´ÐÐí§Òâ´úÂë¡£¡£¡£¡£¡£¡£±¾ÎĽ«´ÓÎó²î³ÉÒò¡¢²¹¶¡ÆÊÎöÒÔ¼°Îó²î¸´Ïֵȶà¸ö½Ç¶È¶Ô¸ÃÎó²î¾ÙÐÐÏêϸÆÊÎö¡£¡£¡£¡£¡£¡£
Îó²îÆÊÎö
PosixÐÂÎÅÐÐÁÐÔÊÐíÒì²½ÊÂÎñ֪ͨ£¬£¬£¬£¬£¬£¬£¬µ±ÍùÒ»¸ö¿ÕÐÐÁа²ÅÅÒ»¸öÐÂÎÅʱ£¬£¬£¬£¬£¬£¬£¬PosixÐÂÎÅÐÐÁÐÔÊÐí±¬·¢Ò»¸öÐźŻòÆô¶¯Ò»¸öÏ̡߳£¡£¡£¡£¡£¡£ÕâÖÖÒì²½ÊÂÎñ֪ͨŲÓÃmq_notifyº¯ÊýʵÏÖ£¬£¬£¬£¬£¬£¬£¬mq_notifyΪָ¶¨ÐÐÁн¨Éè»òɾ³ýÒ첽֪ͨ¡£¡£¡£¡£¡£¡£ÓÉÓÚmq_notifyº¯ÊýÔÚ½øÈëretryÁ÷³ÌʱûÓн«sockÖ¸ÕëÉèÖÃΪNULL£¬£¬£¬£¬£¬£¬£¬¿ÉÄܵ¼ÖÂUAFÎó²î¡£¡£¡£¡£¡£¡£
½ÓÏÂÀ´¿´¿´Îó²îÒòÓÉ£¬£¬£¬£¬£¬£¬£¬ÕâÀïÒÔ4.1.0°æ±¾Ô´ÂëΪÀý¡£¡£¡£¡£¡£¡£
ÔÚmq_notifyº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬ u_notificationÊÇ´ÓÓû§²ã´«½øÀ´µÄ£¬£¬£¬£¬£¬£¬£¬1193ÐÐÅжÏu_notificationÊÇ·ñΪ¿Õ£¬£¬£¬£¬£¬£¬£¬ÈôÊǷǿգ¬£¬£¬£¬£¬£¬£¬Í¨¹ýcopy_from_user½«u_notificationÖеÄÊý¾Ý¿½±´µ½notificationÖУ¬£¬£¬£¬£¬£¬£¬ÕâÀォÊý¾Ý´ÓÓû§²ã¿½±´µ½ÁËÄں˲㡣¡£¡£¡£¡£¡£ÈôÊÇ¿½±´Ê§°Ü£¬£¬£¬£¬£¬£¬£¬Ö±½ÓÍ˳ö¡£¡£¡£¡£¡£¡£
½ÓÏÂÀ´£¬£¬£¬£¬£¬£¬£¬ncºÍsock»®·ÖÖÿա£¡£¡£¡£¡£¡£ÐÐ1203£¬£¬£¬£¬£¬£¬£¬ÈôÊÇu_notification²»Îª¿Õ£¬£¬£¬£¬£¬£¬£¬Ê×ÏÈÒÀ´ÎÅжÏnotification.sigev_notify±ØÐèΪSIGEV_NONE»òSIGEV_SIGNAL»òSIGEV_THREAD¡£¡£¡£¡£¡£¡£ÈôÊÇnotification.sigev_notifyΪSIGEV_SIGNAL£¬£¬£¬£¬£¬£¬£¬¾ÍÅжϸÃÐźÅÊÇ·ñÕýµ±¡£¡£¡£¡£¡£¡£
ÐÐ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º¯Êý¡£¡£¡£¡£¡£¡£
ŲÓÃfile_inodeͨ¹ýfilpÕÒµ½¶ÔÓ¦µÄinode½Úµã£¬£¬£¬£¬£¬£¬£¬È»ºóͨ¹ýSOCK_Iº¯Êý´¦Öóͷ£inode½Úµã¡£¡£¡£¡£¡£¡£
ÕâÀïͨ¹ýºêcontainer_ofÔÚsocket_alloc½á¹¹ÌåÖÐÕÒ³ösocket³ÉÔ±¡£¡£¡£¡£¡£¡£ÕâÀïÚ¹ÊÍһϣ¬£¬£¬£¬£¬£¬£¬SOCKET_I·µ»ØÖµÊÇsocket½á¹¹Ìå¡£¡£¡£¡£¡£¡£×Åʵsock½á¹¹ÌåÖеÚÒ»¸ö³ÉÔ±sock_commonÒ²ÊÇsocketÀàÐÍ£¬£¬£¬£¬£¬£¬£¬ÊÇÒ»¸öÃÔÄã°æsocket¡£¡£¡£¡£¡£¡£
ÏÂÃæ¿´Ò»ÏÂsock_common½á¹¹Ìå¡£¡£¡£¡£¡£¡£
ÐÐ1609£¬£¬£¬£¬£¬£¬£¬»ñÈ¡µ½sockºó£¬£¬£¬£¬£¬£¬£¬È»ºóÅжÏsock->sk_familyÊÇ·ñ¼´ÊÇAF_NETLINK¡£¡£¡£¡£¡£¡£ÐÐ1613£¬£¬£¬£¬£¬£¬£¬½Ó×ÅŲÓÃsock_holdÔöÌíÒýÓüÆÊý¡£¡£¡£¡£¡£¡£sock_holdº¯ÊýÈçÏ£º
ÕâÀïatomic_inc¾ÙÐÐsk_refcnt¼Ó1¡£¡£¡£¡£¡£¡£netlink_getsockbyfilpº¯Êý·µ»Øsock£¬£¬£¬£¬£¬£¬£¬ÕâʱsockµÄÒýÓüÆÊý¼Ó1¡£¡£¡£¡£¡£¡£½ÓÏÂÀ´£¬£¬£¬£¬£¬£¬£¬ÐÐ1246£¬£¬£¬£¬£¬£¬£¬Å²ÓÃnetlink_attachskb¡£¡£¡£¡£¡£¡£ÕâÊǸöÒªº¦º¯Êý£¬£¬£¬£¬£¬£¬£¬¸Ãº¯Êý¹¦Ð§Êǽ«skb°ó¶¨µ½netlink socketÉÏ£¬£¬£¬£¬£¬£¬£¬ÏêϸҪº¦´úÂëÈçÏ£º
ÐÐ1683£¬£¬£¬£¬£¬£¬£¬Å²ÓÃsock_putïÔÌÒýÓüÆÊýÒ»´Î£¬£¬£¬£¬£¬£¬£¬×îºóreturn 1£¬£¬£¬£¬£¬£¬£¬º¯Êý·µ»Ø£¬£¬£¬£¬£¬£¬£¬Ö±½Ógotoµ½retry±êÇ©µØ·½¡£¡£¡£¡£¡£¡£
ÕâÀïÐÐ1237ºÍÐÐ1246£¬£¬£¬£¬£¬£¬£¬ÕâÁ½´¦Å²ÓÃÕýºÃ¾ÙÐÐÁËÒýÓüÆÊýµÖÏû¡£¡£¡£¡£¡£¡£ÐÐ1247µÄifÓï¾äÖв¢Ã»Óн«sockÖÿգ¬£¬£¬£¬£¬£¬£¬ÔÙ¿´ÐÐ1233£¬£¬£¬£¬£¬£¬£¬ÈôÊÇf.fileΪ¿Õ£¬£¬£¬£¬£¬£¬£¬ÄǾÍÖ±½Ógotoµ½out±êÇ©¡£¡£¡£¡£¡£¡£out±êÇ©´úÂëÈçÏ£º
ÐÐ1306£¬£¬£¬£¬£¬£¬£¬ÅжÏsockÊÇ·ñΪ¿Õ£¬£¬£¬£¬£¬£¬£¬ÈôÊDz»Îª¿Õ£¬£¬£¬£¬£¬£¬£¬Å²ÓÃnetlink_detachskbº¯Êý¡£¡£¡£¡£¡£¡£
ÊÍ·Åskb£¬£¬£¬£¬£¬£¬£¬²¢ïÔÌskÒýÓüÆÊý£¬£¬£¬£¬£¬£¬£¬¾ÙÐÐÊÍ·Å¡£¡£¡£¡£¡£¡£ ÄÇô¾ÍÓÐÎÊÌâÁË£¬£¬£¬£¬£¬£¬£¬ÈôÊÇÎÒÃǽ¨ÉèAÏ̼߳á³Önetlink_attachskb·µ»Ø1£¬£¬£¬£¬£¬£¬£¬²¢Öظ´retryÂß¼£¬£¬£¬£¬£¬£¬£¬Õâ¸öʱ¼äsockµÄÒýÓüÆÊýÊǼá³ÖƽºâµÄ£¬£¬£¬£¬£¬£¬£¬Ò»¼ÓÒ»¼õ£¬£¬£¬£¬£¬£¬£¬¿ÉÊÇsock²¢²»ÊÇΪ¿Õ¡£¡£¡£¡£¡£¡£Í¬Ê±ÔÙ½¨ÉèBÏß³ÌÈ¥¹Ø±Õnetlink socket¶ÔÓ¦µÄÎļþÐÎò·û¡£¡£¡£¡£¡£¡£ÓÉÓÚBÏ̹߳رÕÁËnetlink socketµÄÎļþÐÎò·û£¬£¬£¬£¬£¬£¬£¬ÄÇAÏß³ÌÔÚretryÂß¼ÖУ¬£¬£¬£¬£¬£¬£¬ÐÐ1232£¬£¬£¬£¬£¬£¬£¬Å²ÓÃfdgetʱ»áʧ°Ü£¬£¬£¬£¬£¬£¬£¬È»ºóÖ±½Ógotoµ½out±êÇ©£¬£¬£¬£¬£¬£¬£¬¾ÙÐÐÊÍ·Å£¬£¬£¬£¬£¬£¬£¬¾ÙÐÐÁ˶þ´ÎÊÍ·Å£¬£¬£¬£¬£¬£¬£¬µ¼ÖÂÎó²î¡£¡£¡£¡£¡£¡£Õâ¸öÎó²îÊÇÊôÓÚÌõ¼þ¾ºÕùÐ͵Ķþ´ÎÊÍ·ÅÎó²î£¬£¬£¬£¬£¬£¬£¬Ö»ÔÚÒ»¸öÏß³ÌÖУ¬£¬£¬£¬£¬£¬£¬ÊÇÎÞ·¨´¥·¢Îó²î¡£¡£¡£¡£¡£¡£
ÐÐ1657£¬£¬£¬£¬£¬£¬£¬Í¨¹ýnlk_skº¯Êýͨ¹ýsk»ñÈ¡netlink_sock¡£¡£¡£¡£¡£¡£ÕâÀïµÄnlk_skÈçÏ¡£¡£¡£¡£¡£¡£
ͨ¹ýŲÓúêcontainer_of»ñÈ¡netlink_sock¡£¡£¡£¡£¡£¡£netlink_sock½á¹¹ÌåÈçÏ£º
netlink_sock½á¹¹ÌåµÚÒ»¸ö³ÉÔ±ÊÇsockÀàÐÍ£¬£¬£¬£¬£¬£¬£¬¶øsock½á¹¹ÌåµÄµÚÒ»¸ö³ÉÔ±ÊÇsocket¡£¡£¡£¡£¡£¡£ÐÐ1660£¬£¬£¬£¬£¬£¬£¬µÚÒ»¸öifÅжϱØÐèµÃ½øÈë¡£¡£¡£¡£¡£¡£
!netlink_skb_is_mmaped(skb)¿Ï¶¨·µ»Øtrue£¬£¬£¬£¬£¬£¬£¬Òªº¦ÊÇsk->sk_rmem_alloc>sk->sk_rcvbuf || test_bit(NETLINK_CONGESTED, &nlk->state)Ч¹û±ØÐèÊÇtrue¡£¡£¡£¡£¡£¡£
ÈôÊÇifÅжÏÇ·ºà¹ý£¬£¬£¬£¬£¬£¬£¬½Ó×ÅŲÓÃnetlink_skb_set_owner_rº¯Êý£¬£¬£¬£¬£¬£¬£¬ÈçÏÂËùʾ¡£¡£¡£¡£¡£¡£
ÐÐ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µÄÖµ£¿£¿£¿£¿£¿£¿£¿ÀíÂÛÉÏÊÇÍêÈ«¿ÉÒԵ쬣¬£¬£¬£¬£¬£¬¿´¿´ÔõÑù´ÓÓû§²ãµÖ´ïÕâ¸öº¯Êý¡£¡£¡£¡£¡£¡£
ͨ¹ýunderstand¹¤¾ß¿ÉÒÔ¿ìËÙÕÒµ½netlink_skb_set_owner_rµÄŲÓÃÁ´£ºnetlink_sendmsg->netlink_unicast->netlink_attachskb->netlink_skb_set_owner_r¡£¡£¡£¡£¡£¡£
ÐÐ2285£¬£¬£¬£¬£¬£¬£¬Ê×ÏÈÅжÏmsg->msg_flag²»¿ÉΪMSG_OOB£¬£¬£¬£¬£¬£¬£¬¼ÌÐøÍùÏ¿´¡£¡£¡£¡£¡£¡£
ÐÐ2292£¬£¬£¬£¬£¬£¬£¬ÅжÏmsg->msg_namelenµÄ³¤¶È£¬£¬£¬£¬£¬£¬£¬ÕâÀï±ØÐ費Ϊ¿Õ£¬£¬£¬£¬£¬£¬£¬ËäȻҲ²»»áΪ¿Õ¡£¡£¡£¡£¡£¡£½øÈëifºó£¬£¬£¬£¬£¬£¬£¬ÅжÏaddr->nl_familyÊÇ·ñ¼´ÊÇAF_NETLINK¡£¡£¡£¡£¡£¡£ÐÐ2299£¬£¬£¬£¬£¬£¬£¬ÅжÏdst_group»òdst_portid²»Îª¿Õ£¬£¬£¬£¬£¬£¬£¬dst_groupÌåÏֶಥģʽ£¬£¬£¬£¬£¬£¬£¬dst_portidÀ´×ÔÓÚaddr->nl_pid£¬£¬£¬£¬£¬£¬£¬Òò´Ë°ü¹Üdst_portid²»Îª¿Õ½ÏÁ¿ÈÝÒס£¡£¡£¡£¡£¡£½ÓÏÂÀ´£º
ÐÐ2320£¬£¬£¬£¬£¬£¬£¬ÅжÏÁËmsg->msg_iter.iov->iov_base²»¿ÉΪ¿Õ¡£¡£¡£¡£¡£¡£²¢ÇÒlen²»¿ÉÒÔ´óÓÚsk->sk_sndbuf-32¡£¡£¡£¡£¡£¡£
×ÅʵÕû¸öº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬Óû§²ã¿É¿ØµÄÖ»ÓÐÕâô¶à¡£¡£¡£¡£¡£¡£Ö±½Ó¿´netlink_unicastµÄŲÓᣡ£¡£¡£¡£¡£
netlink_unicastº¯ÊýʵÏÖÈçÏ£º
Õû¸öº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬Óû§ÄÜ¿ØÖƵÄδ¼¸¡£¡£¡£¡£¡£¡£ÐÐ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¡£¡£¡£¡£¡£¡£
ÐÐ773£¬£¬£¬£¬£¬£¬£¬sk->sk_rcvbufÈ¡val*2ºÍSOCK_MIN_RCVBUFÖ®¼äµÄ×î´óÖµ¡£¡£¡£¡£¡£¡£ÐÐ755£¬£¬£¬£¬£¬£¬£¬valÈ¡valºÍsysctl_rmem_maxÖ®¼äµÄ×îСֵ¡£¡£¡£¡£¡£¡£ÐÐ749£¬£¬£¬£¬£¬£¬£¬Õâ¸öcaseΪSO_RCVBUF¡£¡£¡£¡£¡£¡£¼ÌÐøÍùÉÏ¿´¡£¡£¡£¡£¡£¡£
ÐÐ693£¬£¬£¬£¬£¬£¬£¬Òª°ü¹Üoptlen²»Ð¡ÓÚsizeof(int)¡£¡£¡£¡£¡£¡£ÐÐ696£¬£¬£¬£¬£¬£¬£¬½«optval¸³Öµµ½valÖУ¬£¬£¬£¬£¬£¬£¬ÕâÀïoptvalÊÇÓû§¿É¿ØµÄ¡£¡£¡£¡£¡£¡£ÐÐ703£¬£¬£¬£¬£¬£¬£¬switch·Ö·¢optname£¬£¬£¬£¬£¬£¬£¬ÒÔÊÇÒª°ü¹ÜoptnameΪSO_RCVBUF¡£¡£¡£¡£¡£¡£ÕâÑù¾Í¿ÉÒÔ°ü¹Ü˳ËìµÖ´ïÐÞ¸Äsk->rcvbufµÄ´úÂë´¦¡£¡£¡£¡£¡£¡£
µ½ÕâÀ£¬£¬£¬£¬£¬£¬ÎÒÃÇͨ¹ýÁ½ÖÖ·½·¨¾ÙÐÐÈÆ¹ýnetlink_attachskbº¯ÊýÖеĵÚÒ»¸öcheck¡£¡£¡£¡£¡£¡£
£¨2£©Í¨¹ýsock_setsockopt¾¡¿ÉÄܵؼõСsk->rcvbufµÄÖµ¡£¡£¡£¡£¡£¡£
Õâ¶Î´úÂë»áÈÃÄ¿½ñÏ߳̽øÈëÆÚ´ý״̬£¬£¬£¬£¬£¬£¬£¬Ö±½Óblock¡£¡£¡£¡£¡£¡£ÈôÊDz»Ïë½øÈëÆÚ´ý״̬£¬£¬£¬£¬£¬£¬£¬Ö»ÓÐÉèÖÃsock_flagΪSOCK_DEAD¡£¡£¡£¡£¡£¡£¿ÉÊÇÈôÊǰÑsock_flagÉèÖóÉSOCK_DEAD£¬£¬£¬£¬£¬£¬£¬ÄǺóÃæÒ²Ã»ÓÐÐëÒª¾ÙÐУ¬£¬£¬£¬£¬£¬£¬Òò´ËÕâÀïÊDZض¨Òª½øÈëÆÚ´ý״̬µÄ¡£¡£¡£¡£¡£¡£Ò»ÖÖÇÉÃîµÄÒªÁìÊÇÖ±½ÓŲÓÃwake_up_interruptibleÇ¿ÐнÐÐÑÏ̡߳£¡£¡£¡£¡£¡£ÄÇÔõÑùŲÓÃwake_up_interruptibleÄØ£¿£¿£¿£¿£¿£¿£¿º¯ÊýŲÓÃÁ´ºÜÊǼò¶Ì£ºnetlink_setsockopt->wake_up_interruptible¡£¡£¡£¡£¡£¡£
ÐÐ2182£¬£¬£¬£¬£¬£¬£¬Å²ÓÃwake_up_interruptible½ÐÐÑÏ̡߳£¡£¡£¡£¡£¡£ÐÐ2178£¬£¬£¬£¬£¬£¬£¬caseΪNETLINK_NO_ENOBUFS¡£¡£¡£¡£¡£¡£
ÐÐ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¡£¡£¡£¡£¡£¡£
ÐÐ1232£¬£¬£¬£¬£¬£¬£¬Í¨¹ýfdget»ñÈ¡notification.sigev_signoµÄfd¡£¡£¡£¡£¡£¡£Notification.sigev_signoÊÇÓû§Ì¬´«½øÀ´µÄ£¬£¬£¬£¬£¬£¬£¬Òò´ËÍêÈ«¿ÉÒÔÔÚÓû§²ãÖ±½ÓcloseÕâ¸ösocket¡£¡£¡£¡£¡£¡£ÔÚÓû§²ãcloseÕâ¸ösocketºó£¬£¬£¬£¬£¬£¬£¬ÐÐ1233£¬£¬£¬£¬£¬£¬£¬½øÈëifÂß¼£¬£¬£¬£¬£¬£¬£¬È»ºóÌøµ½out±êÇ©¡£¡£¡£¡£¡£¡£
Õâ¸öʱ¼äsockÊǷǿյ쬣¬£¬£¬£¬£¬£¬ifÅжÏÎªÕæ£¬£¬£¬£¬£¬£¬£¬½øÈënetlink_destachskb£¬£¬£¬£¬£¬£¬£¬½ÓמÍÊÇfreeÍ߽⡣¡£¡£¡£¡£¡£
Îó²î¸´ÏÖ
ƾ֤Äں˹¤¾ßÄÚ´æ·ÖÅɹæÔò£¬£¬£¬£¬£¬£¬£¬ netlink_sock¹¤¾ßÓ¦¸Ã´Ókmalloc-1024Õâ¸ö»º´æÖоÙÐзÖÅÉ¡£¡£¡£¡£¡£¡£
slab·ÖÅÉÆ÷ÔÚ·ÖÅɹ¤¾ßʱ£¬£¬£¬£¬£¬£¬£¬×ñÊØºó½øÏȳöµÄ¹æÔò¡£¡£¡£¡£¡£¡£ÏÂÃæÊÇslab·ÖÅÉÆ÷ÊÍϰà¾ßµÄÀú³Ì¡£¡£¡£¡£¡£¡£
ÒªÊͷŵŤ¾ßobjp·ÅÔÚÁËac->entry[]µÄ×îºó¡£¡£¡£¡£¡£¡£ÏÂÃæÊÇslab·ÖÅÉÆ÷·ÖÅɹ¤¾ßµÄÀú³Ì£º
·ÖÅɹ¤¾ßÖ±½Ó´Óac->entry[]×îºóµ¯³öÒ»¸ö¹¤¾ß¡£¡£¡£¡£¡£¡£
ÒÔÊÇÒ»¸ö¸Õ¸Õ±»ÊͷŵŤ¾ßÊÇÅÅÔÚÁ´±íÄ©¶Î£¬£¬£¬£¬£¬£¬£¬ÈôÊÇ´ËʱǡÐÒ¿÷ͳһ»º´æÖоÙÐй¤¾ß·ÖÅÉ£¬£¬£¬£¬£¬£¬£¬ÄǸոÕÊͷŵŤ¾ß¾Í»á±»ÖØÐ·ÖÅɳöÈ¥£¬£¬£¬£¬£¬£¬£¬Õâ¾Í·ºÆðÁ½¸öÖ¸ÕëÖ¸Ïòͳһ¿éÄÚ´æµØµã¡£¡£¡£¡£¡£¡£ÒªÏë°ü¹ÜÉêÇëµÄÄÚ´æÕýºÃÂäÔÚÎó²î¹¤¾ßµÄÄÚ´æÎ»ÖÃÖУ¬£¬£¬£¬£¬£¬£¬ÐèÒªÕÆÎÕס¼¸µã£º
¶ÑÅ繤¾ßʹÓõÄÄں˻º´æÓ¦¸ÃºÍÎó²î¹¤¾ßÄÚ±£´æÍ³Ò»¸ö»º´æÖС£¡£¡£¡£¡£¡£¼´¾Þϸ±ØÐèÂäÔÚͳһ¸ökmalloc-XÖС£¡£¡£¡£¡£¡£
ac×Ô¼ºÊÇarray_chche½á¹¹Ì壬£¬£¬£¬£¬£¬£¬¸Ã½á¹¹ÌåÊÇÍâµØ¸ßËÙ»º´æ£¬£¬£¬£¬£¬£¬£¬Ã¿¸öCPU¶ÔÓ¦Ò»¸ö£¬£¬£¬£¬£¬£¬£¬ÒÔÊÇ»¹Òª°ü¹Ü¶ÑÅçÉêÇëµÄ¹¤¾ßºÍÎó²î¹¤¾ßÔÚͳһ¸öCPUÍâµØ¸ßËÙ»º´æÖС£¡£¡£¡£¡£¡£
ÈôÊǶÑÅçÉêÇëµÄ¹¤¾ßÖ»ÊǶÌÔÝפÁô£¬£¬£¬£¬£¬£¬£¬µ±¸Ãº¯Êý·µ»ØÊ±½«ÉêÇëµÄ¹¤¾ß¾ÙÐÐÁËÊÍ·Å£¬£¬£¬£¬£¬£¬£¬µ¼ÖÂÎÞ·¨×¼È·Õ¼Î»¡£¡£¡£¡£¡£¡£ÒÔÊÇÒªÄܰü¹ÜÉêÇëµÄ¹¤¾ß²»±»ÊÍ·Å£¬£¬£¬£¬£¬£¬£¬ÖÁÉÙ°ü¹ÜÔÚʹÓÃÎó²î¹¤¾ßʱ²»±»ÊÍ·Å£¬£¬£¬£¬£¬£¬£¬ÕâÀïÒª½ÓÄÉפÁôʽÄÚ´æÕ¼Î»£¬£¬£¬£¬£¬£¬£¬¿ÉÒÔ½ÓÄÉÈÃijЩϵͳŲÓÃÀú³ÌÛÕ±Õ¡£¡£¡£¡£¡£¡£
slab»º´æË鯬»¯ÎÊÌ⣬£¬£¬£¬£¬£¬£¬ÕâÀïҪռλµÄ¹¤¾ß¾ÞϸΪ1008£¬£¬£¬£¬£¬£¬£¬¹¤¾ß³ß´ç½ÏÁ¿´ó£¬£¬£¬£¬£¬£¬£¬Õ¼ÓÐËÄ·ÖÖ®Ò»Ò³£¬£¬£¬£¬£¬£¬£¬½ÏÁ¿ÕûÆë£¬£¬£¬£¬£¬£¬£¬Ó¦¸ÃûÓÐË鯬»¯ÎÊÌâ¡£¡£¡£¡£¡£¡£
ÄÇôÔõÑùÅж϶ÑÅçÊÇ·ñÀÖ³ÉÄØ£¿£¿£¿£¿£¿£¿£¿
½ÓÄÉgetsocknameϵͳŲÓûñÈ¡Êý¾Ý£¬£¬£¬£¬£¬£¬£¬getsockname»áŲÓÃnetlink_getname¡£¡£¡£¡£¡£¡£Ïêϸ¿´Ò»ÏÂnetlink_getnameº¯Êý£º
´úÂë1576ÐУ¬£¬£¬£¬£¬£¬£¬½«netlink_sock¹¤¾ßÖеÄportid¸´ÖƸønladdr->nl_pid¡£¡£¡£¡£¡£¡£´úÂë1577ÐУ¬£¬£¬£¬£¬£¬£¬ÈôÊÇnlk->groupΪ0£¬£¬£¬£¬£¬£¬£¬½«nladdr->nl_groups¸³ÖµÎªNULL£¬£¬£¬£¬£¬£¬£¬ÕâÀï×èÖ¹½âÒýÓÃnlk->groupsÖ¸Õ룬£¬£¬£¬£¬£¬£¬Ö±½Ó¿ÉÒÔÔڽṹ¶ÑÅ繤¾ßʱ½«groupsÓòÌîÁã¡£¡£¡£¡£¡£¡£¶ønladdrÊÇ´Óaddrת»»¹ýÀ´µÄ£¬£¬£¬£¬£¬£¬£¬addr¾ÍÊÇ´ÓÓû§²ã´«ÈëµÄ»º³åÇø¡£¡£¡£¡£¡£¡£
ͨ³£ÇéÐÎÊÇÁýÕֽṹÌåÖеĺ¯ÊýÖ¸Õë»òÕß°üÀ¨º¯ÊýÖ¸ÕëµÄ½á¹¹Ìå³ÉÔ±£¬£¬£¬£¬£¬£¬£¬ÕâÊÓÇéÐζø¶¨¡£¡£¡£¡£¡£¡£ÕâÀïÑ¡ÔñÁýÕÖwaitÆÚ´ýÐÐÁС£¡£¡£¡£¡£¡£netlink_sock½á¹¹ÌåÈçÏ£º
wait_queue_haed_t½á¹¹ÌåÈçÏ£º
task_list³ÉÔ±ÊÇÒ»¸öË«ÏòÑ»·Á´±íÍ·£¬£¬£¬£¬£¬£¬£¬task_listÖÐÁ´½ÓµÄÿһ¸ö³ÉÔ±¶¼ÊÇÐèÒª´¦Öóͷ£µÄÆÚ´ýÀý³ÌÔªËØ¡£¡£¡£¡£¡£¡£ÄǸÃÔõÑùʹÓÃÕâ¸ö³ÉÔ±£¿£¿£¿£¿£¿£¿£¿¿´ÈçÏ´úÂë¡£¡£¡£¡£¡£¡£
ÕâÊÇnetlink_setsockoptº¯ÊýÖеĴúÂëÆ¬¶Ï£¬£¬£¬£¬£¬£¬£¬Ç°Ãæ»Ö¸´Ï̸߳´ÉúÆÊÎö¹ý£¬£¬£¬£¬£¬£¬£¬ÕâÀォ»áŲÓÃnetlink_sock¹¤¾ßÖÐµÄÆÚ´ýÀý³Ì£¬£¬£¬£¬£¬£¬£¬Ö±½ÓʹÓòÎÊýnlk->wait¡£¡£¡£¡£¡£¡£¼ÌÐøÉîÈëÆÊÎö£º
ŲÓÃ__wake_up_commonº¯Êý£º
´úÂë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½á¹¹ÌåÈçÏ£º
wait_queue_t½á¹¹ÌåÖÐÓÐÒ»¸öº¯ÊýÖ¸Õëfunc¡£¡£¡£¡£¡£¡£ÔÙ¿´__wake_up_commonº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬´úÂë73ÐУ¬£¬£¬£¬£¬£¬£¬Ö±½ÓÖ´ÐÐcurr>funcº¯Êý£¬£¬£¬£¬£¬£¬£¬¿ÉÒÔͨ¹ý½á¹¹__wait_queueµÄfunc²ÎÊý¿ØÖÆRIP¡£¡£¡£¡£¡£¡£ÔٻعýÍ·¿´list_for_each_entry_safeºê£º
posÊÇ__wait_queueÔªËØ£¬£¬£¬£¬£¬£¬£¬´úÂë62ÐУ¬£¬£¬£¬£¬£¬£¬¶Ôpos->member.next¾ÙÐÐÏàʶÒýÓ㬣¬£¬£¬£¬£¬£¬ÕâÀïµÄpos->member¾ÍÊÇ__wait_queueÖеÄtask_list¡£¡£¡£¡£¡£¡£__wait_queueÖеÄtask_listÒ²ÊÇÒ»¸öÁ´±íÍ·£¬£¬£¬£¬£¬£¬£¬ÐèÒªÖ¸ÏòÒ»¸ölist_head£¬£¬£¬£¬£¬£¬£¬ÒÔÊÇ»¹±ØÐèÒª½á¹¹Ò»¸ö¼ÙµÄlist_headÒÔ±ãÓڸúê¾ÙÐнâÒýÓᣡ£¡£¡£¡£¡£²âÊÔÈçÏ£º
½ÓÏÂÀ´¾ÍÊÇͨ¹ýROPÁ´ÈƹýSMEPÖ´ÐÐÌáȨ´úÂë¡£¡£¡£¡£¡£¡£ÀÖ³ÉÌáȨºóÈçÏÂËùʾ£º


¾©¹«Íø°²±¸11010802024551ºÅ