[FreeBSD-users-jp 95203] sysutils/ufs_copy で SIGSEGV
Hidemi Yamashita
happybsd at kiiroi.mimoza.jp
Tue May 20 08:35:58 UTC 2014
こんにちは。
いつの頃からか、ufs_copy の終了時にコアダンプを吐く様になって
いたので調べて見ました。9.1から含まれる様になった soft
updates journaling (SUJ) の変更により問題が発生する事が判りま
した。
取り敢えず、MLに流します。portsメンテナの方に対応して頂けると
有難いです。
問題発生状況:
コピーを行う際のソース側がデバイス、デスティネーション側がイ
メージファイルである場合に発生します。
原因:
ソース側に対して ufs_disk_fillout(3) を呼び出して作成した
struct uufsd を bcopy(3) を使用してデスティネーション側の
struct uufsd として使いまわしているので、SUJの対応に伴い追加
された d_sbcsum メンバのポインタ値もコピーされてしまう。コピー
処理後、ソース側の ufs_disk_close(3) を実行した後でデスティネー
ション側の ufs_disk_close(3) を実行するので、free(3) を同じポ
インタに対して2回呼び出す事になるので、この時点でコアダンプを
生成してしまう。
対策:
添付したパッチ(diff.txt)を以下の通り当ててインストールする。
make patch
patch < diff.txt
make
make install
--- 山下英美
-------------- next part --------------
--- work/ufs/ufs_copy.c.orig 2014-05-14 05:51:24.000000000 +0900
+++ work/ufs/ufs_copy.c 2014-05-14 05:51:30.000000000 +0900
@@ -289,6 +289,9 @@
}
}
bcopy(&src, &dst, sizeof(dst));
+#if __FreeBSD_version >= 900011
+ dst.d_sbcsum = NULL;
+#endif
dst.d_name = dst_path;
dst.d_fd = open(dst_path, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR );
if (dst.d_fd < 0) {
More information about the freebsd-users-jp
mailing list