Print this page
5780 Truncated coredumps


 359                 fdinfo.pr_fileflags <<= 16;
 360                 fdinfo.pr_fileflags |= fp->f_flag;
 361                 if ((fdinfo.pr_fileflags & (FSEARCH | FEXEC)) == 0)
 362                         fdinfo.pr_fileflags += FOPEN;
 363                 fdinfo.pr_offset = fp->f_offset;
 364 
 365 
 366                 fvp = fp->f_vnode;
 367                 VN_HOLD(fvp);
 368                 UF_EXIT(ufp);
 369                 mutex_exit(&fip->fi_lock);
 370 
 371                 /*
 372                  * There are some vnodes that have no corresponding
 373                  * path.  Its reasonable for this to fail, in which
 374                  * case the path will remain an empty string.
 375                  */
 376                 (void) vnodetopath(vroot, fvp, fdinfo.pr_path,
 377                     sizeof (fdinfo.pr_path), credp);
 378 
 379                 error = VOP_GETATTR(fvp, &vattr, 0, credp, NULL);
 380                 if (error != 0) {















 381                         VN_RELE(fvp);
 382                         VN_RELE(vroot);

 383                         goto done;

 384                 }
 385 
 386                 if (fvp->v_type == VSOCK)
 387                         fdinfo.pr_fileflags |= sock_getfasync(fvp);
 388 
 389                 VN_RELE(fvp);
 390 
 391                 /*
 392                  * This logic mirrors fstat(), which we cannot use
 393                  * directly, as it calls copyout().
 394                  */
 395                 fdinfo.pr_major = getmajor(vattr.va_fsid);
 396                 fdinfo.pr_minor = getminor(vattr.va_fsid);
 397                 fdinfo.pr_ino = (ino64_t)vattr.va_nodeid;
 398                 fdinfo.pr_mode = VTTOIF(vattr.va_type) | vattr.va_mode;
 399                 fdinfo.pr_uid = vattr.va_uid;
 400                 fdinfo.pr_gid = vattr.va_gid;
 401                 fdinfo.pr_rmajor = getmajor(vattr.va_rdev);
 402                 fdinfo.pr_rminor = getminor(vattr.va_rdev);
 403                 fdinfo.pr_size = (off64_t)vattr.va_size;




 359                 fdinfo.pr_fileflags <<= 16;
 360                 fdinfo.pr_fileflags |= fp->f_flag;
 361                 if ((fdinfo.pr_fileflags & (FSEARCH | FEXEC)) == 0)
 362                         fdinfo.pr_fileflags += FOPEN;
 363                 fdinfo.pr_offset = fp->f_offset;
 364 
 365 
 366                 fvp = fp->f_vnode;
 367                 VN_HOLD(fvp);
 368                 UF_EXIT(ufp);
 369                 mutex_exit(&fip->fi_lock);
 370 
 371                 /*
 372                  * There are some vnodes that have no corresponding
 373                  * path.  Its reasonable for this to fail, in which
 374                  * case the path will remain an empty string.
 375                  */
 376                 (void) vnodetopath(vroot, fvp, fdinfo.pr_path,
 377                     sizeof (fdinfo.pr_path), credp);
 378 
 379                 if (VOP_GETATTR(fvp, &vattr, 0, credp, NULL) != 0) {
 380                         /*
 381                          * Try to write at least a subset of information
 382                          */
 383                         fdinfo.pr_major = 0;
 384                         fdinfo.pr_minor = 0;
 385                         fdinfo.pr_ino = 0;
 386                         fdinfo.pr_mode = 0;
 387                         fdinfo.pr_uid = -1;
 388                         fdinfo.pr_gid = -1;
 389                         fdinfo.pr_rmajor = 0;
 390                         fdinfo.pr_rminor = 0;
 391                         fdinfo.pr_size = -1;
 392 
 393                         error = elfnote(vp, &offset, NT_FDINFO,
 394                                         sizeof (fdinfo), &fdinfo,
 395                                         rlimit, credp);
 396                         VN_RELE(fvp);
 397                         VN_RELE(vroot);
 398                         if (error)
 399                                 goto done;
 400                         continue;
 401                 }
 402 
 403                 if (fvp->v_type == VSOCK)
 404                         fdinfo.pr_fileflags |= sock_getfasync(fvp);
 405 
 406                 VN_RELE(fvp);
 407 
 408                 /*
 409                  * This logic mirrors fstat(), which we cannot use
 410                  * directly, as it calls copyout().
 411                  */
 412                 fdinfo.pr_major = getmajor(vattr.va_fsid);
 413                 fdinfo.pr_minor = getminor(vattr.va_fsid);
 414                 fdinfo.pr_ino = (ino64_t)vattr.va_nodeid;
 415                 fdinfo.pr_mode = VTTOIF(vattr.va_type) | vattr.va_mode;
 416                 fdinfo.pr_uid = vattr.va_uid;
 417                 fdinfo.pr_gid = vattr.va_gid;
 418                 fdinfo.pr_rmajor = getmajor(vattr.va_rdev);
 419                 fdinfo.pr_rminor = getminor(vattr.va_rdev);
 420                 fdinfo.pr_size = (off64_t)vattr.va_size;