Save and restore umask around calls to mkstemp()

The races would be hard to exploit, but let's close them off.

Addresses-Coverity-Id: #709504
Addresses-Coverity-Id: #709505
Addresses-Coverity-Id: #709506

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
Theodore Ts'o 2014-01-09 15:18:44 -05:00
parent e114288010
commit 253a96500a
3 changed files with 8 additions and 0 deletions

View File

@ -42,6 +42,7 @@ static void setup_tdb(e2fsck_t ctx, ext2_ino_t num_dirs)
struct dir_info_db *db = ctx->dir_info;
unsigned int threshold;
errcode_t retval;
mode_t save_umask;
char *tdb_dir, uuid[40];
int fd, enable;
@ -62,7 +63,9 @@ static void setup_tdb(e2fsck_t ctx, ext2_ino_t num_dirs)
uuid_unparse(ctx->fs->super->s_uuid, uuid);
sprintf(db->tdb_fn, "%s/%s-dirinfo-XXXXXX", tdb_dir, uuid);
save_umask = umask(077);
fd = mkstemp(db->tdb_fn);
umask(save_umask);
if (fd < 0) {
db->tdb = NULL;
return;

View File

@ -94,8 +94,10 @@ int blkid_flush_cache(blkid_cache cache)
if (ret == 0 && S_ISREG(st.st_mode)) {
tmp = malloc(strlen(filename) + 8);
if (tmp) {
mode_t save_umask = umask(022);
sprintf(tmp, "%s-XXXXXX", filename);
fd = mkstemp(tmp);
umask(save_umask);
if (fd >= 0) {
file = fdopen(fd, "w");
opened = tmp;

View File

@ -181,6 +181,7 @@ errcode_t ext2fs_create_icount_tdb(ext2_filsys fs, char *tdb_dir,
errcode_t retval;
char *fn, uuid[40];
ext2_ino_t num_inodes;
mode_t save_umask;
int fd;
retval = alloc_icount(fs, flags, &icount);
@ -193,11 +194,13 @@ errcode_t ext2fs_create_icount_tdb(ext2_filsys fs, char *tdb_dir,
uuid_unparse(fs->super->s_uuid, uuid);
sprintf(fn, "%s/%s-icount-XXXXXX", tdb_dir, uuid);
icount->tdb_fn = fn;
save_umask = umask(077);
fd = mkstemp(fn);
if (fd < 0) {
retval = errno;
goto errout;
}
umask(save_umask);
/*
* This is an overestimate of the size that we will need; the
* ideal value is the number of used inodes with a count