lkml.org 
[lkml]   [1998]   [Oct]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectBug with Unix domain sockets under 2.0.35-5 (RedHat 5.1)
Date
I encountered a bug with Unix domain sockets and select while
hacking away. My parent process inadvertantly cored and the
child went apeshit. Select returns 1 (and no longer blocks)
when the other end of the socketpair(2) goes byebye via core dump.

Here is a bit of sample code to exploit the prob:

gcc -Wall -o testcase testcase.c

------------------------------8<-------------------------------
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
void main(void)
{
int fd[2];
fd_set set;
char *invalid=NULL;
socketpair(AF_UNIX, SOCK_STREAM, 0, fd);

if(fork()) {
fprintf(stderr, "Waiting 5 seconds...\n");
close(fd[1]);
sleep(5);
fprintf(stderr, "BOOM!\n");
*invalid=0;
} else {
int i;
close(fd[0]);
/* this is me being nice :) */
i=0;
while (i<10) {
FD_ZERO(&set);
FD_SET(fd[1],&set);

fprintf(stderr, "Select returned %d\n", select(fd[1] + 1, &set, NULL, NULL, NULL));

i++;
}
}
}
------------------------------8<-------------------------------
--Perry

--
Perry Harrington Linux rules all OSes. APSoft ()
email: perry@apsoft.com Think Blue. /\

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:45    [from the cache]
©2003-2011 Jasper Spaans