summaryrefslogtreecommitdiff
path: root/attach.c
diff options
context:
space:
mode:
authorNed T. Crigler <crigler@gmail.com>2025-06-19 11:22:55 -0700
committerNed T. Crigler <crigler@gmail.com>2025-06-19 20:11:34 -0700
commit6e04acf9ed089f065b19ff4e42be97bd17529ff2 (patch)
treefde130059bbc9e2ba0675ee50f819fa3a36c669c /attach.c
parent5e3865328e4609f74bd10cb4575e429b8d1b3aa4 (diff)
Check the return value of the fchdir() system call
dtach was not checking if the fchdir back to the old directory worked when it tried to get around the sun_path length limit.
Diffstat (limited to 'attach.c')
-rw-r--r--attach.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/attach.c b/attach.c
index 5fd301c..8ac3bf3 100644
--- a/attach.c
+++ b/attach.c
@@ -170,7 +170,11 @@ attach_main(int noerror)
if (chdir(sockname) >= 0)
{
s = connect_socket(slash + 1);
- fchdir(dirfd);
+ if (s >= 0 && fchdir(dirfd) < 0)
+ {
+ close(s);
+ s = -1;
+ }
}
*slash = '/';
close(dirfd);
@@ -315,7 +319,11 @@ push_main()
if (chdir(sockname) >= 0)
{
s = connect_socket(slash + 1);
- fchdir(dirfd);
+ if (s >= 0 && fchdir(dirfd) < 0)
+ {
+ close(s);
+ s = -1;
+ }
}
*slash = '/';
close(dirfd);