8827Ì«Ñô¼¯ÍÅADLab£º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½á¹¹Ì壬£¬£¬£¬£¬£¬£¬£¬¸Ã½á¹¹ÌåÊDZ¾µØ¸ßËÙ»º´æ£¬£¬£¬£¬£¬£¬£¬£¬Ã¿¸ö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ÖÐÁ´½ÓµÄÿһ¸ö³ÉÔ±¶¼ÊDZØÒª´¦ÖÃµÄÆÚ´ýÀý³ÌÔªËØ¡£¡£¡£¡£¡£¡£¡£ÄǸÃÈôºÎʹÓÃÕâ¸ö³ÉÔ±£¿£¿£¿£¿£¿¿´ÈçÏ´úÂë¡£¡£¡£¡£¡£¡£¡£
ÕâÊÇ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ºÅ