Fix overflow issue when computing ideal size of scratch partition

The type of f_frsize is `unsigned long` which is 32 bit for some system so it will overflow after multiplied by f_bfree. This solution adds one more type casting to ensure the type is 64 bit unsigned integer during the computing.

Bug: 281599020
Test: adb root; adb shell disable-verity
Change-Id: I377ed722d5e245c235c3ae12ff66ac7e91d1d6e8
This commit is contained in:
Ray Chin 2023-05-23 17:43:50 +08:00
parent 34de747570
commit 702a779edb

View file

@ -1083,7 +1083,7 @@ static inline uint64_t GetIdealDataScratchSize() {
return 0;
}
auto ideal_size = std::min(super_info.size, uint64_t(s.f_frsize * s.f_bfree * 0.85));
auto ideal_size = std::min(super_info.size, uint64_t(uint64_t(s.f_frsize) * s.f_bfree * 0.85));
// Align up to the filesystem block size.
if (auto remainder = ideal_size % s.f_bsize; remainder > 0) {