Print this page
7307 Fixing 5780 introduced a regression


 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 = (uid_t)-1;
 388                         fdinfo.pr_gid = (gid_t)-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, rlimit, credp);
 395                         VN_RELE(fvp);

 396                         VN_RELE(vroot);
 397                         if (error)
 398                                 goto done;

 399                         continue;
 400                 }
 401 
 402                 if (fvp->v_type == VSOCK)
 403                         fdinfo.pr_fileflags |= sock_getfasync(fvp);
 404 
 405                 VN_RELE(fvp);
 406 
 407                 /*
 408                  * This logic mirrors fstat(), which we cannot use
 409                  * directly, as it calls copyout().
 410                  */
 411                 fdinfo.pr_major = getmajor(vattr.va_fsid);
 412                 fdinfo.pr_minor = getminor(vattr.va_fsid);
 413                 fdinfo.pr_ino = (ino64_t)vattr.va_nodeid;
 414                 fdinfo.pr_mode = VTTOIF(vattr.va_type) | vattr.va_mode;
 415                 fdinfo.pr_uid = vattr.va_uid;
 416                 fdinfo.pr_gid = vattr.va_gid;
 417                 fdinfo.pr_rmajor = getmajor(vattr.va_rdev);
 418                 fdinfo.pr_rminor = getminor(vattr.va_rdev);




 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 = (uid_t)-1;
 388                         fdinfo.pr_gid = (gid_t)-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, rlimit, credp);
 395                         VN_RELE(fvp);
 396                         if (error) {
 397                                 VN_RELE(vroot);

 398                                 goto done;
 399                         }
 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);