inode->i_op = &ext4_encrypted_symlink_inode_operations;
                } else if (ext4_inode_is_fast_symlink(inode)) {
                        inode->i_op = &ext4_fast_symlink_inode_operations;
-                       nd_terminate_link(ei->i_data, inode->i_size,
-                               sizeof(ei->i_data) - 1);
+                       if (inode->i_size == 0 ||
+                           inode->i_size >= sizeof(ei->i_data) ||
+                           strnlen((char *)ei->i_data, inode->i_size + 1) !=
+                                                               inode->i_size) {
+                               ext4_error_inode(inode, function, line, 0,
+                                       "invalid fast symlink length %llu",
+                                        (unsigned long long)inode->i_size);
+                               ret = -EFSCORRUPTED;
+                               goto bad_inode;
+                       }
                        inode_set_cached_link(inode, (char *)ei->i_data,
                                              inode->i_size);
                } else {