Fix fsck_ufs segfaults with gjournal (SU+J)
The segfault was being hit in ckfini() (sbin/fsck_ffs/fsutil.c) while attempting to traverse the buffer cache to flush dirty buffers. The tail queue used for the buffer cache was not initialized before dropping into gjournal_check(). Move the buffer initialization earlier so that it has been done before calling gjournal_check(). Reported by: crypt47, nvass Fix by: Robert Wing Tested by: Robert Wing PR: 255030 PR: 255979 MFC after: 3 days Sponsored by: Netflix
This commit is contained in:
parent
fdbc86cf79
commit
f190f9193b
@ -272,6 +272,7 @@ checkfilesys(char *filesys)
|
|||||||
* exit status will cause a foreground check to be run.
|
* exit status will cause a foreground check to be run.
|
||||||
*/
|
*/
|
||||||
sblock_init();
|
sblock_init();
|
||||||
|
bufinit();
|
||||||
if (bkgrdcheck) {
|
if (bkgrdcheck) {
|
||||||
if ((fsreadfd = open(filesys, O_RDONLY)) < 0 || readsb(0) == 0)
|
if ((fsreadfd = open(filesys, O_RDONLY)) < 0 || readsb(0) == 0)
|
||||||
exit(3); /* Cannot read superblock */
|
exit(3); /* Cannot read superblock */
|
||||||
|
@ -298,7 +298,6 @@ setup(char *dev)
|
|||||||
(uintmax_t)numdirs * sizeof(struct inoinfo *));
|
(uintmax_t)numdirs * sizeof(struct inoinfo *));
|
||||||
goto badsb;
|
goto badsb;
|
||||||
}
|
}
|
||||||
bufinit();
|
|
||||||
if (sblock.fs_flags & FS_DOSOFTDEP)
|
if (sblock.fs_flags & FS_DOSOFTDEP)
|
||||||
usedsoftdep = 1;
|
usedsoftdep = 1;
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user