tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: crash in pipe_create()



While we are here: As reported by Scott Ellis and Tobias Nygren
on current-users, some "configure" test crashes the system.
I've just looked at it and found that the appended little
program triggers the crash if started 2 times in succession.
It happens in knote() traversing the list of knotes,
due to an invalid kn_selnext link.
There are some "XXXAD" comments in kern_event.c which
suggest that you might already know the problem...

best regards
Matthias





-------------------------------------------------------------------
-------------------------------------------------------------------
Forschungszentrum Juelich GmbH
52425 Juelich

Sitz der Gesellschaft: Juelich
Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
Vorsitzende des Aufsichtsrats: MinDir'in Baerbel Brumme-Bothe
Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender),
Dr. Ulrich Krafft (stellv. Vorsitzender), Prof. Dr. Harald Bolt,
Dr. Sebastian M. Schmidt
-------------------------------------------------------------------
-------------------------------------------------------------------
#include <sys/types.h>
#include <sys/time.h>
#include <sys/event.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>

int
main(int argc, char **argv)
{
        int kq;
        int n;
        int fd[2];
        struct kevent ev;
#if 0
        struct timespec ts;
#endif
        char buf[8000];

        if (pipe(fd) == -1)
                exit(1);
        if (fcntl(fd[1], F_SETFL, O_NONBLOCK) == -1)
                exit(1);

        while ((n = write(fd[1], buf, sizeof(buf))) == sizeof(buf))
                ;

        if ((kq = kqueue()) == -1)
                exit(1);

        ev.ident = fd[1];
        ev.filter = EVFILT_WRITE;
        ev.flags = EV_ADD | EV_ENABLE;
        n = kevent(kq, &ev, 1, NULL, 0, NULL);
        if (n == -1)
                exit(1);

        read(fd[0], buf, sizeof(buf));

#if 0
        ts.tv_sec = 0;
        ts.tv_nsec = 0;
        n = kevent(kq, NULL, 0, &ev, 1, &ts);
        if (n == -1 || n == 0)
                exit(1);
#endif

        exit(0);
}


Home | Main Index | Thread Index | Old Index