very interesting. thanks for the sum up. but my testcase crashes a uniprocessor system, so here is no waiting for mmuflushes on other processors going on. any other process that shares the segment and was suspended in the kernel may potentialy hold a pointer to that freed memory area of the segment and may cause a fault in the kernel on resume. process1: in kernel: read(buf) validaddr(buf) ... *context switch* process2: in kernel: ... ibrk() mfreeseg() procflushseg() flushmmu() ... *context switch* process1: still in kernel: memmove(buf, ...) *fault* trap() fault386() fault() => -1 if(!user){ panic() *panic* } ... postnote() we cant really wait for all processes sharing the segment to be in userspace as they may already be waiting in a long blocking syscall. how do we fix this? -- cinap