]> Zhao Yanbai Git Server - minix.git/commitdiff
vfs: fix clobbering fd_nr
authorBen Gras <ben@minix3.org>
Tue, 11 Dec 2012 01:53:25 +0000 (02:53 +0100)
committerBen Gras <ben@minix3.org>
Tue, 11 Dec 2012 11:00:57 +0000 (12:00 +0100)
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

index 3e4730dec4089159486053f2744c17a219e06acb..a52abe05fb3412c9b745d71a96992fc89e5bfef9 100644 (file)
@@ -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);