From 7536b665f1bd8d39991087a5ba42f940b7f6cf4c Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 30 Oct 2018 08:52:43 +0100 Subject: [PATCH] core: avoid null pointer reference warning Issue #3022 --- repos/base-foc/src/core/ipc_pager.cc | 2 +- repos/base-foc/src/core/platform.cc | 2 +- repos/base-foc/src/core/platform_pd.cc | 6 +++--- repos/base-foc/src/core/platform_thread.cc | 4 ++-- repos/base-foc/src/core/rpc_cap_factory.cc | 4 ++-- repos/base-foc/src/core/signal_source_component.cc | 2 +- .../base-foc/src/include/base/internal/parent_cap.h | 2 +- repos/base-foc/src/lib/base/ipc.cc | 6 +++--- repos/base-foc/src/test/cap_integrity/main.cc | 2 +- .../src/include/base/internal/capability_space.h | 2 +- repos/base-nova/include/nova/capability_space.h | 2 +- repos/base-sel4/src/core/capability_space.cc | 10 +++++----- repos/base-sel4/src/lib/base/capability_space.cc | 13 ++++++------- repos/base/include/base/native_capability.h | 4 ++-- .../include/base/internal/capability_space_tpl.h | 4 ++-- 15 files changed, 32 insertions(+), 33 deletions(-) diff --git a/repos/base-foc/src/core/ipc_pager.cc b/repos/base-foc/src/core/ipc_pager.cc index 7642da27a..b3650f198 100644 --- a/repos/base-foc/src/core/ipc_pager.cc +++ b/repos/base-foc/src/core/ipc_pager.cc @@ -151,7 +151,7 @@ void Ipc_pager::acknowledge_exception() Ipc_pager::Ipc_pager() : - Native_capability(*(Cap_index*)Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE]), + Native_capability((Cap_index*)Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE]), _badge(0) { } diff --git a/repos/base-foc/src/core/platform.cc b/repos/base-foc/src/core/platform.cc index 0d3b0144a..058531b14 100644 --- a/repos/base-foc/src/core/platform.cc +++ b/repos/base-foc/src/core/platform.cc @@ -133,7 +133,7 @@ Platform::Sigma0::Sigma0(Cap_index* i) * We use the Pager_object here in a slightly different manner, * just to tunnel the pager cap to the Platform_thread::start method. */ - cap(*i); + cap(i); } diff --git a/repos/base-foc/src/core/platform_pd.cc b/repos/base-foc/src/core/platform_pd.cc index f462879de..0040cfffc 100644 --- a/repos/base-foc/src/core/platform_pd.cc +++ b/repos/base-foc/src/core/platform_pd.cc @@ -114,15 +114,15 @@ void Platform_pd::flush(addr_t, size_t size, Core_local_addr core_local) } -static Core_cap_index & debug_cap() +static Core_cap_index * debug_cap() { unsigned long id = platform_specific()->cap_id_alloc()->alloc(); static Cap_index * idx = cap_map()->insert(id, DEBUG_CAP); - return *reinterpret_cast(idx); + return reinterpret_cast(idx); } Platform_pd::Platform_pd(Core_cap_index* i) -: _task(Native_capability(*i), TASK_CAP) +: _task(Native_capability(i), TASK_CAP) { for (unsigned i = 0; i < THREAD_MAX; i++) _threads[i] = (Platform_thread*) 0; diff --git a/repos/base-foc/src/core/platform_thread.cc b/repos/base-foc/src/core/platform_thread.cc index 309c87884..bf3cddb72 100644 --- a/repos/base-foc/src/core/platform_thread.cc +++ b/repos/base-foc/src/core/platform_thread.cc @@ -304,8 +304,8 @@ Platform_thread::Platform_thread(Core_cap_index* thread, Core_cap_index* irq, const char *name) : _state(RUNNING), _core_thread(true), - _thread(Native_capability(*thread), L4_BASE_THREAD_CAP), - _irq(Native_capability(*irq)), + _thread(Native_capability(thread), L4_BASE_THREAD_CAP), + _irq(Native_capability(irq)), _utcb(0), _platform_pd(0), _pager_obj(0), diff --git a/repos/base-foc/src/core/rpc_cap_factory.cc b/repos/base-foc/src/core/rpc_cap_factory.cc index c18f5e6cb..2bca4066d 100644 --- a/repos/base-foc/src/core/rpc_cap_factory.cc +++ b/repos/base-foc/src/core/rpc_cap_factory.cc @@ -77,7 +77,7 @@ void Cap_mapping::map(Fiasco::l4_cap_idx_t task) Cap_mapping::Cap_mapping(bool alloc, Fiasco::l4_cap_idx_t r) -: local(alloc ? *_get_cap() : *(Native_capability::Data *)nullptr), remote(r) { } +: local(alloc ? _get_cap() : (Native_capability::Data *)nullptr), remote(r) { } Cap_mapping::Cap_mapping(Native_capability cap, Fiasco::l4_cap_idx_t r) @@ -131,7 +131,7 @@ Native_capability Rpc_cap_factory::alloc(Native_capability ep) // XXX remove cast idx->session((Pd_session_component *)this); idx->pt(ref->pt()); - cap = Native_capability(*idx); + cap = Native_capability(idx); } catch (Cap_id_allocator::Out_of_ids) { error("out of capability IDs"); } diff --git a/repos/base-foc/src/core/signal_source_component.cc b/repos/base-foc/src/core/signal_source_component.cc index 4f036070f..d047ca208 100644 --- a/repos/base-foc/src/core/signal_source_component.cc +++ b/repos/base-foc/src/core/signal_source_component.cc @@ -70,7 +70,7 @@ Signal_source::Signal Signal_source_component::wait_for_signal() Signal_source_component::Signal_source_component(Rpc_entrypoint *ep) : - Signal_source_rpc_object(*cap_map()->insert(platform_specific()->cap_id_alloc()->alloc())), + Signal_source_rpc_object(cap_map()->insert(platform_specific()->cap_id_alloc()->alloc())), _entrypoint(ep) { using namespace Fiasco; diff --git a/repos/base-foc/src/include/base/internal/parent_cap.h b/repos/base-foc/src/include/base/internal/parent_cap.h index eb758c604..1d44767b6 100644 --- a/repos/base-foc/src/include/base/internal/parent_cap.h +++ b/repos/base-foc/src/include/base/internal/parent_cap.h @@ -44,7 +44,7 @@ namespace Genode { i = cap_map()->insert(local_name, Fiasco::PARENT_CAP); } - return reinterpret_cap_cast(Native_capability(*i)); + return reinterpret_cap_cast(Native_capability(i)); } } diff --git a/repos/base-foc/src/lib/base/ipc.cc b/repos/base-foc/src/lib/base/ipc.cc index 4ae88fec2..f377c737e 100644 --- a/repos/base-foc/src/lib/base/ipc.cc +++ b/repos/base-foc/src/lib/base/ipc.cc @@ -159,8 +159,8 @@ static unsigned long extract_msg_from_utcb(l4_msgtag_t tag, */ for (unsigned i = 0; i < num_caps; i++) { if (caps[i].valid) { - rcv_msg.insert(Native_capability(*cap_map()->insert_map(caps[i].badge, - caps[i].sel))); + rcv_msg.insert(Native_capability(cap_map()->insert_map(caps[i].badge, + caps[i].sel))); } else { rcv_msg.insert(Native_capability()); } @@ -367,7 +367,7 @@ Genode::Rpc_request Genode::ipc_reply_wait(Reply_capability const &, Ipc_server::Ipc_server() : - Native_capability(*(Cap_index*)Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE]) + Native_capability((Cap_index*)Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE]) { Thread::myself()->native_thread().rcv_window.init(); } diff --git a/repos/base-foc/src/test/cap_integrity/main.cc b/repos/base-foc/src/test/cap_integrity/main.cc index 06eed4426..39b9fcff4 100644 --- a/repos/base-foc/src/test/cap_integrity/main.cc +++ b/repos/base-foc/src/test/cap_integrity/main.cc @@ -45,7 +45,7 @@ Main::Main(Env &env) idx->kcap() | L4_ITEM_MAP); Log_session_capability log_session_cap = - reinterpret_cap_cast(Native_capability(*idx)); + reinterpret_cap_cast(Native_capability(idx)); Log_session_client log_session_client(log_session_cap); try { log_session_client.write("test message"); diff --git a/repos/base-hw/src/include/base/internal/capability_space.h b/repos/base-hw/src/include/base/internal/capability_space.h index de5b73264..5eb566bb3 100644 --- a/repos/base-hw/src/include/base/internal/capability_space.h +++ b/repos/base-hw/src/include/base/internal/capability_space.h @@ -33,7 +33,7 @@ namespace Genode { namespace Capability_space { static inline Native_capability import(Kernel::capid_t capid) { - return Native_capability(*(Native_capability::Data *)(addr_t)capid); + return Native_capability((Native_capability::Data *)(addr_t)capid); } } } diff --git a/repos/base-nova/include/nova/capability_space.h b/repos/base-nova/include/nova/capability_space.h index f02998dc5..5d351a6ee 100644 --- a/repos/base-nova/include/nova/capability_space.h +++ b/repos/base-nova/include/nova/capability_space.h @@ -40,7 +40,7 @@ namespace Genode { namespace Capability_space { { Nova::Obj_crd const crd = (sel == INVALID_INDEX) ? Nova::Obj_crd() : Nova::Obj_crd(sel, 0, rights); - return Native_capability(*(Native_capability::Data *)crd.value()); + return Native_capability((Native_capability::Data *)crd.value()); } } } diff --git a/repos/base-sel4/src/core/capability_space.cc b/repos/base-sel4/src/core/capability_space.cc index afdcd6941..fec6ca539 100644 --- a/repos/base-sel4/src/core/capability_space.cc +++ b/repos/base-sel4/src/core/capability_space.cc @@ -113,7 +113,7 @@ Capability_space::create_rpc_obj_cap(Native_capability ep_cap, ASSERT(ret == seL4_NoError); } - return Native_capability(data); + return Native_capability(&data); } @@ -132,7 +132,7 @@ Native_capability Capability_space::create_ep_cap(Thread &ep_thread) local_capability_space().create_capability(ep_sel, pd_session, Rpc_obj_key()); - return Native_capability(data); + return Native_capability(&data); } @@ -164,7 +164,7 @@ Native_capability Capability_space::lookup(Rpc_obj_key rpc_obj_key) { Native_capability::Data *data = local_capability_space().lookup(rpc_obj_key); - return data ? Native_capability(*data) : Native_capability(); + return data ? Native_capability(data) : Native_capability(); } @@ -189,7 +189,7 @@ Native_capability Capability_space::import(Ipc_cap_data ipc_cap_data) local_capability_space().create_capability(ipc_cap_data.sel, pd_session, ipc_cap_data.rpc_obj_key); - return Native_capability(data); + return Native_capability(&data); } @@ -202,5 +202,5 @@ Capability_space::create_notification_cap(Cap_sel ¬ify_cap) local_capability_space().create_capability(notify_cap, pd_session, Rpc_obj_key()); - return Native_capability(data); + return Native_capability(&data); } diff --git a/repos/base-sel4/src/lib/base/capability_space.cc b/repos/base-sel4/src/lib/base/capability_space.cc index db105baab..dc0c12698 100644 --- a/repos/base-sel4/src/lib/base/capability_space.cc +++ b/repos/base-sel4/src/lib/base/capability_space.cc @@ -97,9 +97,8 @@ Native_capability Capability_space::create_ep_cap(Thread &ep_thread) { Cap_sel const ep_sel = Cap_sel(ep_thread.native_thread().ep_sel); - Native_capability::Data &data = - local_capability_space().create_capability(ep_sel, Rpc_obj_key()); - + Native_capability::Data *data = + &local_capability_space().create_capability(ep_sel, Rpc_obj_key()); return Native_capability(data); } @@ -138,7 +137,7 @@ Native_capability Capability_space::lookup(Rpc_obj_key rpc_obj_key) { Native_capability::Data *data = local_capability_space().lookup(rpc_obj_key); - return data ? Native_capability(*data) : Native_capability(); + return data ? Native_capability(data) : Native_capability(); } @@ -162,9 +161,9 @@ void Capability_space::reset_sel(unsigned sel) Native_capability Capability_space::import(Ipc_cap_data ipc_cap_data) { - Native_capability::Data &data = - local_capability_space().create_capability(ipc_cap_data.sel, - ipc_cap_data.rpc_obj_key); + Native_capability::Data *data = + &local_capability_space().create_capability(ipc_cap_data.sel, + ipc_cap_data.rpc_obj_key); return Native_capability(data); } diff --git a/repos/base/include/base/native_capability.h b/repos/base/include/base/native_capability.h index e76ef0d65..97d2b0848 100644 --- a/repos/base/include/base/native_capability.h +++ b/repos/base/include/base/native_capability.h @@ -68,7 +68,7 @@ class Genode::Native_capability * * \noapi */ - Native_capability(Data &data) : _data(&data) { _inc(); } + Native_capability(Data *data) : _data(data) { _inc(); } /** * Destructor @@ -78,7 +78,7 @@ class Genode::Native_capability Data const *data() const { return _data; } /** - * Overloaded comparision operator + * Overloaded comparison operator */ bool operator == (const Native_capability &o) const { diff --git a/repos/base/src/include/base/internal/capability_space_tpl.h b/repos/base/src/include/base/internal/capability_space_tpl.h index bd31c669f..626487c9c 100644 --- a/repos/base/src/include/base/internal/capability_space_tpl.h +++ b/repos/base/src/include/base/internal/capability_space_tpl.h @@ -198,12 +198,12 @@ class Genode::Capability_space_tpl Native_capability lookup(Rpc_obj_key rpc_obj_key) { Native_capability::Data *data = _lookup(rpc_obj_key); - return data ? Native_capability(*data) : Native_capability(); + return data ? Native_capability(data) : Native_capability(); } Native_capability import(Rpc_destination dst, Rpc_obj_key key) { - return Native_capability(create_capability(dst, key)); + return Native_capability(&create_capability(dst, key)); } };