mirror of
https://git.freebsd.org/src.git
synced 2026-01-16 23:02:24 +00:00
cp: Avoid closing an invalid file descriptor.
* At the end of copy(), we always close to.dir, even though it can be
AT_FDCWD (in the file-to-file case) or even -1 (if we failed to open
or create the destination directory). While closing an invalid file
descriptor is harmless, it's still bad form.
* In the DIR_TO_DNE case, initialize to.dir to -1 to guard against the
case where mkdir() fails so we never assign anything to to.dir and
end up (harmlessly, luckily) closing stdin on our way to the exit.
Coverity ID: 1609954
Fixes: 82fc0d09e8
Sponsored by: Klara, Inc.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D50391
This commit is contained in:
parent
7fa19ee28c
commit
a8aaf8039f
1 changed files with 8 additions and 2 deletions
10
bin/cp/cp.c
10
bin/cp/cp.c
|
|
@ -296,6 +296,11 @@ copy(char *argv[], enum op type, int fts_options, struct stat *root_stat)
|
|||
sep = strchr(to.base, '\0');
|
||||
sep[0] = '/';
|
||||
sep[1] = '\0';
|
||||
} else {
|
||||
/*
|
||||
* We will create the destination directory imminently.
|
||||
*/
|
||||
to.dir = -1;
|
||||
}
|
||||
|
||||
if ((ftsp = fts_open(argv, fts_options, NULL)) == NULL)
|
||||
|
|
@ -633,8 +638,9 @@ copy(char *argv[], enum op type, int fts_options, struct stat *root_stat)
|
|||
}
|
||||
if (errno)
|
||||
err(1, "fts_read");
|
||||
fts_close(ftsp);
|
||||
close(to.dir);
|
||||
(void)fts_close(ftsp);
|
||||
if (to.dir != AT_FDCWD && to.dir >= 0)
|
||||
(void)close(to.dir);
|
||||
free(recpath);
|
||||
return (rval);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue