aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2021-10-29 01:43:32 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2021-10-31 01:05:14 +0000
commite5248548f95ff1c89667847e0d945dea38adeca7 (patch)
tree77eb39b13e449e7930c1bdb96878af4c7d5a494e
parentf34fc6ba06a10e0f2a505ec0dd2f2fab2a79e53d (diff)
downloadsrc-e5248548f95ff1c89667847e0d945dea38adeca7.tar.gz
src-e5248548f95ff1c89667847e0d945dea38adeca7.zip
procfs: return right hardlink from /proc/curproc/file
Use proc_get_binpath() to get the hardlink right. PR: 248184 Reviewed by: emaste, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D32738
-rw-r--r--sys/fs/procfs/procfs.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/sys/fs/procfs/procfs.c b/sys/fs/procfs/procfs.c
index c492533c52bb..697bbfc9877a 100644
--- a/sys/fs/procfs/procfs.c
+++ b/sys/fs/procfs/procfs.c
@@ -69,22 +69,17 @@
int
procfs_doprocfile(PFS_FILL_ARGS)
{
- char *fullpath;
- char *freepath;
- struct vnode *textvp;
+ char *fullpath, *freepath, *binpath;
int error;
freepath = NULL;
+ binpath = malloc(MAXPATHLEN, M_TEMP, M_WAITOK);
PROC_LOCK(p);
- textvp = p->p_textvp;
- vhold(textvp);
- PROC_UNLOCK(p);
- error = vn_fullpath(textvp, &fullpath, &freepath);
- vdrop(textvp);
+ error = proc_get_binpath(p, binpath, &fullpath, &freepath);
if (error == 0)
- sbuf_printf(sb, "%s", fullpath);
- if (freepath != NULL)
- free(freepath, M_TEMP);
+ sbuf_printf(sb, "%s", fullpath == NULL ? "" : fullpath);
+ free(binpath, M_TEMP);
+ free(freepath, M_TEMP);
return (error);
}