Using negative cache index

Ildar devix84 at ...9...
Thu Oct 18 11:29:48 CEST 2012


2012/10/16 Ildar Ismagilov <devix84 at ...9...>:
> In function Req_cache::remove on ports-foc/src/lib/l4lx/genode_block.cc file:
>
> void remove(void *packet, void **request)
> {
>    int idx = _find(packet);
>
>    if (idx < 0) {
>          *request = 0;
>           PERR("Req cache entry not found!");
>     }
>     *request = _cache[idx].req; // <--- if idx is -1, this negative
> index used for access _cache array elements
>      _cache[idx].pkt = 0;
>      _cache[idx].req = 0;
> }
>
> should be:
>
> void remove(void *packet, void **request)
> {
>    int idx = _find(packet);
>
>    if (idx < 0) {
>          *request = 0;
>           PERR("Req cache entry not found!");
>     }
>     else {
>          *request = _cache[idx].req;
>          _cache[idx].pkt = 0;
>          _cache[idx].req = 0;
>     }
> }
>
> --
> Best regards
> Ildar

Test case is intensive usage of block driver:

If "devices[idx]->cache()->insert(addr, req);" function called from
genode_block_request when Req_cache::_cache array is full, the
Req_cache::_find(0) return -1, and data don't added to Req_cache::_cache
array. Next "devices[idx]->cache()->remove(session->tx()->packet_content(packet),
&req)"
function call from "genode_block_collect_responses" will delete data
from Req_cache::_cache array but Req_cache::_find(packet) will return
-1 because previous "Req_cache::insert"
call not inserted item to Req_cache::_cache array and this bug appears.

-- 
Best regards
Ildar




More information about the users mailing list