]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: umount crashes when trying to umount a non-mountpoint
authorKarel Zak <kzak@redhat.com>
Mon, 25 Mar 2013 08:17:52 +0000 (09:17 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 25 Mar 2013 08:17:52 +0000 (09:17 +0100)
Reported-by: Mantas Mikulėnas <grawity@gmail.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/context_umount.c
libmount/src/fs.c
libmount/src/libmount.h.in

index 113c53e07c886542d8de2f412678e611ffd8f1d3..96ae87ae16c5030cca76dad79260096562824499 100644 (file)
@@ -183,7 +183,7 @@ err:
 static int lookup_umount_fs(struct libmnt_context *cxt)
 {
        const char *tgt;
-       struct libmnt_fs *fs;
+       struct libmnt_fs *fs = NULL;
        int rc;
 
        assert(cxt);
@@ -198,7 +198,7 @@ static int lookup_umount_fs(struct libmnt_context *cxt)
        rc = mnt_context_find_umount_fs(cxt, tgt, &fs);
        if (rc < 0)
                return rc;
-       if (!fs) {
+       if (rc == 1 || !fs) {
                DBG(CXT, mnt_debug_h(cxt, "umount: cannot find %s in mtab", tgt));
                return 0;
        }
index 96c13d331542b69f45ebf63208f8600c99f16abe..bb9006dee5b9f156109282615e69fc32a355cb97 100644 (file)
@@ -129,6 +129,9 @@ struct libmnt_fs *mnt_copy_fs(struct libmnt_fs *dest,
 {
        const struct libmnt_fs *org = dest;
 
+       if (!src)
+               return NULL;
+
        if (!dest) {
                dest = mnt_new_fs();
                if (!dest)
index ccd260d9879c213b38dbd979416dad3684dc2d5e..bb18ba11508d3ee1b5e68a1e120cc365c6dec3b7 100644 (file)
@@ -318,7 +318,7 @@ extern void mnt_reset_fs(struct libmnt_fs *fs)
                        __ul_attribute__((nonnull));
 extern struct libmnt_fs *mnt_copy_fs(struct libmnt_fs *dest,
                                     const struct libmnt_fs *src)
-                       __ul_attribute__((nonnull(2), warn_unused_result));
+                       __ul_attribute__((warn_unused_result));
 extern void *mnt_fs_get_userdata(struct libmnt_fs *fs)
                        __ul_attribute__((nonnull));
 extern int mnt_fs_set_userdata(struct libmnt_fs *fs, void *data);