¼øºÚµ£±£Íø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¼´¿É¡£¡£¡£¡£


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


ÔÚNetlink_setsockoptº¯ÊýÖУº


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


Îó²î¸´ÏÖ


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


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


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


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


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


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


ŲÓÃ__wake_up_commonº¯Êý£º


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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


¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨


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

¼øºÚµ£±£Íø(jhdbw)¡¤×î¾ßȨÍþΨһάȨµ£±£Æ½Ì¨