Hello,
I found that parted (tested on 1.6.25.1, 1.7.1 code looks the same) can
crash if libreiserfs.so is present, but is not in desired version (e.g.
0.3.1-rc). In such case libreiser.so is dlclose()d, but libreiserfs_handle
is left non-null, so reiserfs_ops_done() tries to dlclose() it again.
Patch attached.
BTW: in parted 1.7.0 and 1.7.1 <parted/device.h> file is unusable
without including <parted/contraint.h>, because of
ped_device_get_constraint() prototype (which uses PedConstraint type
from constraint.h) in device.h.
As constraint.h includes device.h anyway, I suggest to move this
prototype to constraint.h, like in the second attached patch.
--
Jakub Bogusz http://qboosh.cs.net.pl/
--- parted-1.7.1/libparted/fs/reiserfs/reiserfs.c.orig 2005-11-11
13:35:30.000000000 +0100
+++ parted-1.7.1/libparted/fs/reiserfs/reiserfs.c 2005-11-26
23:05:42.000000000 +0100
@@ -771,6 +771,7 @@
error_free_libreiserfs_handle:
dlclose(libreiserfs_handle);
+ libreiserfs_handle = NULL;
error:
return 0;
}
--- parted-1.7.1/include/parted/device.h.orig 2006-05-27 22:20:04.522149000
+0200
+++ parted-1.7.1/include/parted/device.h 2006-05-27 22:25:19.965863750
+0200
@@ -135,8 +135,6 @@
extern int ped_device_sync_fast (PedDevice* dev);
extern PedSector ped_device_check (PedDevice* dev, void* buffer,
PedSector start, PedSector count);
-extern PedConstraint* ped_device_get_constraint (PedDevice* dev);
-
/* private stuff ;-) */
extern void _ped_device_probe (const char* path);
--- parted-1.7.1/include/parted/constraint.h.orig 2006-05-25
19:28:43.000000000 +0200
+++ parted-1.7.1/include/parted/constraint.h 2006-05-27 22:25:20.497897000
+0200
@@ -93,5 +93,8 @@
extern PedConstraint*
ped_constraint_exact (const PedGeometry* geom);
+extern PedConstraint*
+ped_device_get_constraint (PedDevice* dev);
+
#endif /* PED_CONSTRAINT_H_INCLUDED */
_______________________________________________
bug-parted mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-parted