chiark / gitweb /
mount: be more careful about errors when parsing mtab
[elogind.git] / src / core / mount.c
index bccf6c5bfa8098e7426d2be8daf6361d0ee1677a..679d15c50a4767618d6e4d803dc6fe060cc914ce 100644 (file)
@@ -1535,15 +1535,22 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
         if (!tb || !itr)
                 return log_oom();
 
-        mnt_table_parse_mtab(tb, NULL);
-        if (r)
+        r = mnt_table_parse_mtab(tb, NULL);
+        if (r < 0)
                 return r;
 
-        while (mnt_table_next_fs(tb, itr, &fs) == 0) {
+        r = 0;
+        for (;;) {
                 const char *device, *path, *options, *fstype;
                 _cleanup_free_ const char *d = NULL, *p = NULL;
                 int k;
 
+                k = mnt_table_next_fs(tb, itr, &fs);
+                if (k == 1)
+                        break;
+                else if (k < 0)
+                        return log_error_errno(k, "Failed to get next entry from /etc/fstab: %m");
+
                 device = mnt_fs_get_source(fs);
                 path = mnt_fs_get_target(fs);
                 options = mnt_fs_get_options(fs);
@@ -1555,7 +1562,7 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
                         return log_oom();
 
                 k = mount_add_one(m, d, p, options, fstype, set_flags);
-                if (k < 0)
+                if (r == 0 && k < 0)
                         r = k;
         }