}
}
- if (ns->clusters_per_mft_record > 0)
+ if (ns->clusters_per_mft_record > 0) {
mft_record_size = ns->clusters_per_mft_record *
sectors_per_cluster * sector_size;
- else
- mft_record_size = 1 << (0 - ns->clusters_per_mft_record);
+ } else {
+ int8_t mft_record_size_shift = 0 - ns->clusters_per_mft_record;
+ if (mft_record_size_shift < 0 || mft_record_size_shift >= 31)
+ return 1;
+ mft_record_size = 1 << mft_record_size_shift;
+ }
nr_clusters = le64_to_cpu(ns->number_of_sectors) / sectors_per_cluster;