shl: handle pathconf() errors
authorLubomir Rintel <lkundrak@v3.sk>
Sat, 24 May 2014 19:19:33 +0000 (21:19 +0200)
committerDavid Herrmann <dh.herrmann@gmail.com>
Sun, 25 May 2014 09:42:27 +0000 (11:42 +0200)
It can return -1 (feature not supported, denied by a security module, etc.),
resulting in wrong allocation later on.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
(remove superfluous errno-checks)
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
src/kmscon_module.c
src/shl_misc.h

index 2bf0576..f480914 100644 (file)
@@ -181,7 +181,7 @@ void kmscon_load_modules(void)
 {
        int ret;
        DIR *ent;
-       struct dirent *buf, *de;
+       struct dirent *buf = NULL, *de;
        char *file;
        struct kmscon_module *mod;
 
index d90fd22..f4a6d90 100644 (file)
@@ -52,9 +52,13 @@ static inline int shl_dirent(const char *path, struct dirent **ent)
 {
        size_t len;
        struct dirent *tmp;
+       long name_max;
 
-       len = offsetof(struct dirent, d_name) +
-                                       pathconf(path, _PC_NAME_MAX) + 1;
+       name_max = pathconf(path, _PC_NAME_MAX);
+       if (name_max < 0)
+               return -errno;
+
+       len = offsetof(struct dirent, d_name) + name_max + 1;
        tmp = malloc(len);
        if (!tmp)
                return -ENOMEM;