mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 15:34:48 +08:00
[S390] hvc_iucv: do not call iucv_unregister if iucv_register failed
If the iucv_register() functions fails, the error recovery calls iucv_unregister() which might cause the following stack backtrace: (<0000000000100ab2> show_trace+0xee/0x144) <00000000004f1842> panic+0xb6/0x248 <00000000001010a6> die+0x15a/0x16c <000000000011d936> do_no_context+0xa6/0xe4 <00000000004f84dc> do_protection_exception+0x2e8/0x3a4 <0000000000113afc> pgm_exit+0x0/0x14 <00000000004e786e> iucv_unregister+0x5a/0x17c (<00000000004e785e> iucv_unregister+0x4a/0x17c) <000000000076de74> hvc_iucv_init+0x228/0x5dc <00000000001000c2> do_one_initcall+0x3e/0x19c <00000000007524a2> kernel_init+0x28e/0x404 <0000000000105dd6> kernel_thread_starter+0x6/0xc <0000000000105dd0> kernel_thread_starter+0x0/0xc Remove the call to iucv_unregister() and remove the goto label as unregistering is the last step in the hvc_iucv initialization. If iucv_register() fails, simply clean up hvc terminals and free resources. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
a20852d2b7
commit
c77f7cf74b
@ -1303,13 +1303,11 @@ static int __init hvc_iucv_init(void)
|
||||
if (rc) {
|
||||
pr_err("Registering IUCV handlers failed with error code=%d\n",
|
||||
rc);
|
||||
goto out_error_iucv;
|
||||
goto out_error_hvc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_error_iucv:
|
||||
iucv_unregister(&hvc_iucv_handler, 0);
|
||||
out_error_hvc:
|
||||
for (i = 0; i < hvc_iucv_devices; i++)
|
||||
if (hvc_iucv_table[i])
|
||||
|
Loading…
Reference in New Issue
Block a user