From 8aeac26999904f62808fe4a0b12220551387947f Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Tue, 11 Dec 2012 02:53:25 +0100 Subject: [PATCH] vfs: fix clobbering fd_nr dumpcore: fd_nr can be in use as blocking fd but will then be clobbered by common_open, causing disaster for exiting unpause(). --- servers/vfs/misc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/servers/vfs/misc.c b/servers/vfs/misc.c index 3e4730dec..a52abe05f 100644 --- a/servers/vfs/misc.c +++ b/servers/vfs/misc.c @@ -726,6 +726,12 @@ int pm_dumpcore(endpoint_t proc_e, int csig, vir_bytes exe_name) okendpt(proc_e, &slot); fp = &fproc[slot]; + /* if a process is blocked, scratch(fp).file.fd_nr holds the fd it's blocked + * on. free it up for use by common_open(). + */ + if (fp_is_blocked(fp)) + unpause(fp->fp_endpoint); + /* open core file */ snprintf(core_path, PATH_MAX, "%s.%d", CORE_NAME, fp->fp_pid); core_fd = common_open(core_path, O_WRONLY | O_CREAT | O_TRUNC, CORE_MODE); -- 2.44.0