When creating a new temporary file name, use mkstemp instead of just
taking a rather predictable path, which could even be a symlink by
a malicious user (granted, that is very unlikely).
Index: file.c
===
RCS file: /cvs/src/usr.bin/sort/file.c,v
retrieving revision 1.6
diff -u -p -r1.6 file.c
--- file.c 1 Apr 2015 19:06:18 - 1.6
+++ file.c 1 Apr 2015 19:48:25 -
@@ -167,12 +167,13 @@ file_is_tmp(const char *fn)
char *
new_tmp_file_name(void)
{
- static size_t tfcounter = 0;
- static const char *fn = ".bsdsort.";
char *ret;
+ int fd;
- sort_asprintf(&ret, "%s/%s%d.%lu", tmpdir, fn, (int)getpid(),
- (unsigned long)(tfcounter++));
+ sort_asprintf(&ret, "%s/.bsdsort.XX", tmpdir);
+ if ((fd = mkstemp(ret)) == -1)
+ err(2, "%s", ret);
+ close(fd);
tmp_file_atexit(ret);
return ret;
}