¿­·¢k8ADLab£º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¼´¿É¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ÐÐ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º¯Êý¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ÊÍ·Å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µÄʵÏÖ¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


!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¸üΪÀû±ã£¬£¬£¬£¬£¬£¬£¬´úÂëÈçÏ¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ÐÐ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µÄÖµ£¿£¿£¿£¿£¿£¿£¿ÀíÂÛÉÏÊÇÍêÈ«¿ÉÒԵ쬣¬£¬£¬£¬£¬£¬¿´¿´ÔõÑù´ÓÓû§²ãµÖ´ïÕâ¸öº¯Êý¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ͨ¹ý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º¯ÊýʵÏÖÈçÏ¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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

¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


Õû¸öº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬Óû§ÄÜ¿ØÖƵÄδ¼¸¡£¡£ ¡£¡£¡£¡£ÐÐ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µÄ²Ù×÷¡£¡£ ¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ÐÐ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Óï¾äºó£¬£¬£¬£¬£¬£¬£¬¿´ÈçÏ´úÂ룺


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


ÔÚNetlink_setsockoptº¯ÊýÖУº


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ÐÐ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£¬£¬£¬£¬£¬£¬£¬´úÂëÈçÏ£º


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


Îó²î¸´ÏÖ


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


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


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


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


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


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


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


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ŲÓÃ__wake_up_commonº¯Êý£º


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


´úÂë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½á¹¹ÌåÈçÏ£º


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


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

¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾