Ignore:
Timestamp:
2018-07-05T09:34:09Z (6 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
63d46341
Parents:
76f566d
Message:

do not expose the call capability handler from the async framework

Keep the call capability handler encapsulated within the async framework
and do not expose it explicitly via its API. Use the pointer to
ipc_call_t as the sole object identifying an IPC call in the code that
uses the async framework.

This plugs a major leak in the abstraction and also simplifies both the
async framework (slightly) and all IPC servers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/drv/generic/remote_ieee80211.c

    r76f566d r984a9ba  
    268268
    269269static void remote_ieee80211_get_scan_results(ddf_fun_t *fun, void *iface,
    270     cap_call_handle_t chandle, ipc_call_t *call)
     270    ipc_call_t *call)
    271271{
    272272        ieee80211_iface_t *ieee80211_iface = (ieee80211_iface_t *) iface;
     
    280280        errno_t rc = ieee80211_iface->get_scan_results(fun, &scan_results, now);
    281281        if (rc == EOK) {
    282                 cap_call_handle_t data_chandle;
     282                ipc_call_t data;
    283283                size_t max_len;
    284                 if (!async_data_read_receive(&data_chandle, &max_len)) {
    285                         async_answer_0(data_chandle, EINVAL);
    286                         async_answer_0(chandle, EINVAL);
     284                if (!async_data_read_receive(&data, &max_len)) {
     285                        async_answer_0(&data, EINVAL);
     286                        async_answer_0(call, EINVAL);
    287287                        return;
    288288                }
    289289
    290290                if (max_len < sizeof(ieee80211_scan_results_t)) {
    291                         async_answer_0(data_chandle, ELIMIT);
    292                         async_answer_0(chandle, ELIMIT);
     291                        async_answer_0(&data, ELIMIT);
     292                        async_answer_0(call, ELIMIT);
    293293                        return;
    294294                }
    295295
    296                 async_data_read_finalize(data_chandle, &scan_results,
     296                async_data_read_finalize(&data, &scan_results,
    297297                    sizeof(ieee80211_scan_results_t));
    298298        }
    299299
    300         async_answer_0(chandle, rc);
     300        async_answer_0(call, rc);
    301301}
    302302
    303303static void remote_ieee80211_connect(ddf_fun_t *fun, void *iface,
    304     cap_call_handle_t chandle, ipc_call_t *call)
     304    ipc_call_t *call)
    305305{
    306306        ieee80211_iface_t *ieee80211_iface = (ieee80211_iface_t *) iface;
     
    310310        char password[MAX_STRING_SIZE];
    311311
    312         cap_call_handle_t data_chandle;
     312        ipc_call_t data;
    313313        size_t len;
    314         if (!async_data_write_receive(&data_chandle, &len)) {
    315                 async_answer_0(data_chandle, EINVAL);
    316                 async_answer_0(chandle, EINVAL);
     314        if (!async_data_write_receive(&data, &len)) {
     315                async_answer_0(&data, EINVAL);
     316                async_answer_0(call, EINVAL);
    317317                return;
    318318        }
    319319
    320320        if (len > MAX_STRING_SIZE) {
    321                 async_answer_0(data_chandle, EINVAL);
    322                 async_answer_0(chandle, EINVAL);
    323                 return;
    324         }
    325 
    326         errno_t rc = async_data_write_finalize(data_chandle, ssid_start, len);
     321                async_answer_0(&data, EINVAL);
     322                async_answer_0(call, EINVAL);
     323                return;
     324        }
     325
     326        errno_t rc = async_data_write_finalize(&data, ssid_start, len);
    327327        if (rc != EOK) {
    328                 async_answer_0(data_chandle, EINVAL);
    329                 async_answer_0(chandle, EINVAL);
    330                 return;
    331         }
    332 
    333         if (!async_data_write_receive(&data_chandle, &len)) {
    334                 async_answer_0(data_chandle, EINVAL);
    335                 async_answer_0(chandle, EINVAL);
     328                async_answer_0(&data, EINVAL);
     329                async_answer_0(call, EINVAL);
     330                return;
     331        }
     332
     333        if (!async_data_write_receive(&data, &len)) {
     334                async_answer_0(&data, EINVAL);
     335                async_answer_0(call, EINVAL);
    336336                return;
    337337        }
    338338
    339339        if (len > MAX_STRING_SIZE) {
    340                 async_answer_0(data_chandle, EINVAL);
    341                 async_answer_0(chandle, EINVAL);
    342                 return;
    343         }
    344 
    345         rc = async_data_write_finalize(data_chandle, password, len);
     340                async_answer_0(&data, EINVAL);
     341                async_answer_0(call, EINVAL);
     342                return;
     343        }
     344
     345        rc = async_data_write_finalize(&data, password, len);
    346346        if (rc != EOK) {
    347                 async_answer_0(data_chandle, EINVAL);
    348                 async_answer_0(chandle, EINVAL);
     347                async_answer_0(&data, EINVAL);
     348                async_answer_0(call, EINVAL);
    349349                return;
    350350        }
     
    352352        rc = ieee80211_iface->connect(fun, ssid_start, password);
    353353
    354         async_answer_0(chandle, rc);
     354        async_answer_0(call, rc);
    355355}
    356356
    357357static void remote_ieee80211_disconnect(ddf_fun_t *fun, void *iface,
    358     cap_call_handle_t chandle, ipc_call_t *call)
     358    ipc_call_t *call)
    359359{
    360360        ieee80211_iface_t *ieee80211_iface = (ieee80211_iface_t *) iface;
    361361        assert(ieee80211_iface->disconnect);
    362362        errno_t rc = ieee80211_iface->disconnect(fun);
    363         async_answer_0(chandle, rc);
     363        async_answer_0(call, rc);
    364364}
    365365
Note: See TracChangeset for help on using the changeset viewer.