chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
022707d
)
util: don't pass invalid fd to fdopendir() on error to avoid corruption of errno
author
Lennart Poettering
<lennart@poettering.net>
Wed, 5 Jan 2011 15:17:26 +0000
(16:17 +0100)
committer
Lennart Poettering
<lennart@poettering.net>
Wed, 5 Jan 2011 15:17:26 +0000
(16:17 +0100)
src/util.c
patch
|
blob
|
history
diff --git
a/src/util.c
b/src/util.c
index 21afdceb8cc4cf666de6d36318c1ea30be175de7..aa1f19ed69a3deec6e27259922c65a94bc0ecfe8 100644
(file)
--- a/
src/util.c
+++ b/
src/util.c
@@
-3436,7
+3436,18
@@
bool null_or_empty(struct stat *st) {
}
DIR *xopendirat(int fd, const char *name, int flags) {
- return fdopendir(openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags));
+ int nfd;
+ DIR *d;
+
+ if ((nfd = openat(fd, name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|flags)) < 0)
+ return NULL;
+
+ if (!(d = fdopendir(nfd))) {
+ close_nointr_nofail(nfd);
+ return NULL;
+ }
+
+ return d;
}
int signal_from_string_try_harder(const char *s) {