OpenZFS 7233 - dir_is_empty should open directory with CLOEXEC
Authored by: Alex Reece <alex@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Paul Dagnelie <pcd@delphix.com> Approved by: Richard Lowe <richlowe@richlowe.net> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Ported-by: George Melikov mail@gmelikov.ru OpenZFS-issue: https://www.illumos.org/issues/7233 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/d420209 Closes #5623
This commit is contained in:
parent
e67a7ffb5d
commit
3cbe6b29f5
|
@ -22,7 +22,7 @@
|
|||
/*
|
||||
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2014, 2015 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -64,6 +64,7 @@
|
|||
#include <dirent.h>
|
||||
#include <dlfcn.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <libgen.h>
|
||||
#include <libintl.h>
|
||||
#include <stdio.h>
|
||||
|
@ -179,9 +180,16 @@ dir_is_empty(const char *dirname)
|
|||
{
|
||||
DIR *dirp;
|
||||
struct dirent64 *dp;
|
||||
int dirfd;
|
||||
|
||||
if ((dirp = opendir(dirname)) == NULL)
|
||||
if ((dirfd = openat(AT_FDCWD, dirname,
|
||||
O_RDONLY | O_NDELAY | O_LARGEFILE | O_CLOEXEC, 0)) < 0) {
|
||||
return (B_TRUE);
|
||||
}
|
||||
|
||||
if ((dirp = fdopendir(dirfd)) == NULL) {
|
||||
return (B_TRUE);
|
||||
}
|
||||
|
||||
while ((dp = readdir64(dirp)) != NULL) {
|
||||
|
||||
|
|
Loading…
Reference in New Issue