If any sys call in memory_map() fails the failure currently gets ignored. Now we pass a CS_ERR_LIBRARY back to the client app.
Signed-off-by: Angus Salkeld <[email protected]> --- exec/coroipcs.c | 22 +++++++++++++++++++++- 1 files changed, 21 insertions(+), 1 deletions(-) diff --git a/exec/coroipcs.c b/exec/coroipcs.c index 0ca22d3..703802a 100644 --- a/exec/coroipcs.c +++ b/exec/coroipcs.c @@ -1611,7 +1611,6 @@ int coroipcs_handler_dispatch ( ipc_disconnect (conn_info); return (0); } - req_setup_send (conn_info, CS_OK); #if _POSIX_THREAD_PROCESS_SHARED < 1 conn_info->semkey = req_setup->semkey; @@ -1620,26 +1619,47 @@ int coroipcs_handler_dispatch ( req_setup->control_file, req_setup->control_size, (void *)&conn_info->control_buffer); + if (res == -1) { + goto send_setup_response; + } conn_info->control_size = req_setup->control_size; res = memory_map ( req_setup->request_file, req_setup->request_size, (void *)&conn_info->request_buffer); + if (res == -1) { + goto send_setup_response; + } conn_info->request_size = req_setup->request_size; res = memory_map ( req_setup->response_file, req_setup->response_size, (void *)&conn_info->response_buffer); + if (res == -1) { + goto send_setup_response; + } conn_info->response_size = req_setup->response_size; res = circular_memory_map ( req_setup->dispatch_file, req_setup->dispatch_size, (void *)&conn_info->dispatch_buffer); + if (res == -1) { + goto send_setup_response; + } conn_info->dispatch_size = req_setup->dispatch_size; + send_setup_response: + if (res == 0) { + req_setup_send (conn_info, CS_OK); + } else { + req_setup_send (conn_info, CS_ERR_LIBRARY); + ipc_disconnect (conn_info); + return (0); + } + conn_info->service = req_setup->service; conn_info->refcount = 0; conn_info->setup_bytes_read = 0; -- 1.7.3.1 _______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
