#11929: PackageVolumeInfo template usage results in crash on non-PM TARFS initrd --------------------------------+------------------------------ Reporter: kallisti5 | Owner: axeld Type: bug | Status: new Priority: normal | Milestone: Unscheduled Component: System/Boot Loader | Version: R1/Development Keywords: arm tarfs | Blocked By: Blocking: | Has a Patch: 0 Platform: arm | --------------------------------+------------------------------ No idea what the solution is. In theory we should fall through the "apparently not packaged" if, but don't make it there. In src/system/boot/loader/vfs.cpp BReference<PackageVolumeInfo> packageVolumeInfoReference( new(std::nothrow) PackageVolumeInfo); {{{ status_t BootVolume::_SetTo(Directory* rootDirectory, PackageVolumeInfo* packageVolumeInfo, PackageVolumeState* packageVolumeState) { TRACE(("QUACK2.0\n")); Unset(); TRACE(("QUACK2.1\n")); if (rootDirectory == NULL) return B_BAD_VALUE; fRootDirectory = rootDirectory; fRootDirectory->Acquire(); TRACE(("QUACK2.2\n")); // find the system directory Node* systemNode = fRootDirectory->Lookup("system", true); if (systemNode == NULL || !S_ISDIR(systemNode->Type())) { if (systemNode != NULL) systemNode->Release(); Unset(); return B_ENTRY_NOT_FOUND; } TRACE(("QUACK2.3\n")); fSystemDirectory = static_cast<Directory*>(systemNode); TRACE(("QUACK2.4\n")); if (packageVolumeInfo == NULL) { TRACE(("QUACK2.5.1\n")); // get a package volume info BReference<PackageVolumeInfo> packageVolumeInfoReference( new(std::nothrow) PackageVolumeInfo); TRACE(("QUACK2.5.2\n")); status_t error = packageVolumeInfoReference->SetTo(fSystemDirectory, "packages"); TRACE(("QUACK2.5.3\n")); if (error != B_OK) { // apparently not packaged return B_OK; } fPackageVolumeInfo = packageVolumeInfoReference.Detach(); } else { TRACE(("QUACK2.6.1\n")); fPackageVolumeInfo = packageVolumeInfo; fPackageVolumeInfo->AcquireReference(); TRACE(("QUACK2.6.2\n")); } }}} Result: {{{ tarfs: "system/add-ons/kernel/boot/silicon_image_3112", 0 bytes tarfs: "system/add-ons/kernel/boot/legacy_sata", 0 bytes tarfs: "system/add-ons/kernel/boot/it8211", 0 bytes tarfs: "system/add-ons/kernel/boot/uhci", 0 bytes tarfs: "system/add-ons/kernel/boot/ohci", 0 bytes tarfs: "system/add-ons/kernel/boot/ehci", 0 bytes tarfs: "system/add-ons/kernel/boot/scsi_cd", 0 bytes tarfs: "system/add-ons/kernel/boot/scsi_disk", 0 bytes tarfs: "system/add-ons/kernel/boot/usb_disk", 0 bytes tarfs: "system/add-ons/kernel/boot/norflash", 0 bytes tarfs: "system/add-ons/kernel/boot/intel", 0 bytes tarfs: "system/add-ons/kernel/boot/session", 0 bytes tarfs: "system/add-ons/kernel/boot/attribute_overlay", 0 bytes tarfs: "system/add-ons/kernel/boot/bfs", 0 bytes tarfs: "system/add-ons/kernel/boot/iso9660", 0 bytes tarfs: "system/add-ons/kernel/boot/packagefs", 0 bytes tarfs: "system/add-ons/kernel/boot/write_overlay", 0 bytes tarfs: "system/kernel_arm", 2165897 bytes 0x8098e1e0::Close() 0x8098e1e0::Release(), fRefCount = 2 0x8098e270::Acquire(), fRefCount = 2 QUACK1 QUACK2.0 QUACK2.1 0x8098e270::Acquire(), fRefCount = 3 QUACK2.2 0x8098e580::Acquire(), fRefCount = 2 QUACK2.3 QUACK2.4 QUACK2.5.1 <LOCKUP> }}} -- Ticket URL: <https://dev.haiku-os.org/ticket/11929> Haiku <https://dev.haiku-os.org> Haiku - the operating system.