fs/ntfs3: Add NULL ptr dereference checking at the end of attr_allocate_frame()
authorKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Tue, 28 Nov 2023 08:09:34 +0000 (11:09 +0300)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Wed, 6 Dec 2023 14:46:16 +0000 (17:46 +0300)
It is preferable to exit through the out: label because
internal debugging functions are located there.

Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/attrib.c

index 4b78b669a3bdb3a92ad479335b7508f093fdb305..646e2dad1b75754d3aa8712ae989bfcf05f5de13 100644 (file)
@@ -1743,8 +1743,10 @@ repack:
                        le_b = NULL;
                        attr_b = ni_find_attr(ni, NULL, &le_b, ATTR_DATA, NULL,
                                              0, NULL, &mi_b);
-                       if (!attr_b)
-                               return -ENOENT;
+                       if (!attr_b) {
+                               err = -ENOENT;
+                               goto out;
+                       }
 
                        attr = attr_b;
                        le = le_b;
@@ -1825,13 +1827,15 @@ ins_ext:
 ok:
        run_truncate_around(run, vcn);
 out:
-       if (new_valid > data_size)
-               new_valid = data_size;
+       if (attr_b) {
+               if (new_valid > data_size)
+                       new_valid = data_size;
 
-       valid_size = le64_to_cpu(attr_b->nres.valid_size);
-       if (new_valid != valid_size) {
-               attr_b->nres.valid_size = cpu_to_le64(valid_size);
-               mi_b->dirty = true;
+               valid_size = le64_to_cpu(attr_b->nres.valid_size);
+               if (new_valid != valid_size) {
+                       attr_b->nres.valid_size = cpu_to_le64(valid_size);
+                       mi_b->dirty = true;
+               }
        }
 
        return err;