KDiskDeviceManager: Ignore invalid partitions

* Partitions with negative offsets were already ignored, now also ignore
  those with an invalid size of block size, too.

Change-Id: I128e38773933f8eadded0977a957f607363cccbe
Reviewed-on: https://review.haiku-os.org/c/805
Reviewed-by: Axel Dörfler <[email protected]>
This commit is contained in:
Axel Dörfler
2019-05-30 23:04:53 +00:00
committed by waddlesplash
parent 7f8f4c9c8c
commit 7c2135591b
@@ -1,8 +1,7 @@
/* /*
* Copyright 2004-2017, Haiku, Inc. All rights reserved. * Copyright 2004-2018, Haiku, Inc.
* Copyright 2003-2004, Ingo Weinhold, [email protected]. All rights reserved. * Copyright 2003-2004, Ingo Weinhold, [email protected].
* * All rights reserved. Distributed under the terms of the MIT License.
* Distributed under the terms of the MIT License.
*/ */
@@ -1373,13 +1372,19 @@ KDiskDeviceManager::_ScanPartition(KPartition* partition,
return B_OK; return B_OK;
} }
// This happens with some copy protected CDs. Just ignore the partition... KPath partitionPath;
if (partition->Offset() < 0) partition->GetPath(&partitionPath);
// This happens with some copy protected CDs or eventually other issues.
// Just ignore the partition...
if (partition->Offset() < 0 || partition->BlockSize() == 0
|| partition->Size() <= 0) {
OUT("Partition %s has invalid parameters, ignoring it.\n",
partitionPath.Path());
return B_BAD_DATA; return B_BAD_DATA;
}
DBG( DBG(
KPath partitionPath;
partition->GetPath(&partitionPath);
OUT("KDiskDeviceManager::_ScanPartition(%s)\n", partitionPath.Path()); OUT("KDiskDeviceManager::_ScanPartition(%s)\n", partitionPath.Path());
) )
@@ -1414,7 +1419,7 @@ KDiskDeviceManager::_ScanPartition(KPartition* partition,
if (priority >= 0 && priority > bestPriority) { if (priority >= 0 && priority > bestPriority) {
// new best disk system // new best disk system
if (bestDiskSystem) { if (bestDiskSystem != NULL) {
bestDiskSystem->FreeIdentifyCookie(partition, bestCookie); bestDiskSystem->FreeIdentifyCookie(partition, bestCookie);
bestDiskSystem->Unload(); bestDiskSystem->Unload();
} }
@@ -1431,7 +1436,7 @@ KDiskDeviceManager::_ScanPartition(KPartition* partition,
} }
// now, if we have found a disk system, let it scan the partition // now, if we have found a disk system, let it scan the partition
if (bestDiskSystem) { if (bestDiskSystem != NULL) {
DBG(OUT(" scanning with: %s\n", bestDiskSystem->Name())); DBG(OUT(" scanning with: %s\n", bestDiskSystem->Name()));
error = bestDiskSystem->Scan(partition, bestCookie); error = bestDiskSystem->Scan(partition, bestCookie);
bestDiskSystem->FreeIdentifyCookie(partition, bestCookie); bestDiskSystem->FreeIdentifyCookie(partition, bestCookie);