stack_start として 0 を渡して clone システム コールを呼び出すとどうなりますか? clone のマニュアルページによると、 を返すはず-EINVALですが、そうするとSIGSEGV (11)エラーが表示されます。
clone(func,NULL,0,args);
-EINVALを返す必要がありますが、失敗しますSIGSEGV
stack_start として 0 を渡して clone システム コールを呼び出すとどうなりますか? clone のマニュアルページによると、 を返すはず-EINVALですが、そうするとSIGSEGV (11)エラーが表示されます。
clone(func,NULL,0,args);
-EINVALを返す必要がありますが、失敗しますSIGSEGV
Linuxカーネルによると、そのようなコールチェーンがあります。
sys_clone(... stack_start ...) ->do_fork
do_fork(... stack_start ...) ->copy_process
copy_process(... stack_start ...) ->copy_thread
X86_32の場合はcopy_thread(... stack_start ...)、X86_64の場合はcopy_thread(... stack_start ...)
copy_threadこの関数は正確性(コードのsp引数)をチェックしないstack_startため、クローン作成後、無効なスタックポインターを持つタスクがあり、ゼロアドレスでの最初の参照はにつながるという仮定につながりSIGSEGVます。
クローン関数のglibcラッパーも確認することをお勧めします。