CVE-2024-40900 Information

Share on:

Description

In the Linux kernel the following vulnerability has been resolved:

cachefiles: remove requests from xarray during flushing requests

Even with CACHEFILES_DEAD set we can still read the requests so in the following concurrency the request may be used after it has been freed:

 mount  |   daemon_thread1    |    daemon_thread2 ------------------------------------------------------------  cachefiles_ondemand_init_object   cachefiles_ondemand_send_req    REQ_A = kzalloc(sizeof(req) + data_len)    wait_for_completion(&REQ_A->done)
        cachefiles_daemon_read
         cachefiles_ondemand_daemon_read
                              // close dev fd
                              cachefiles_flush_reqs
                               complete(&REQ_A->done)    kfree(REQ_A)
          xa_lock(&cache->reqs);
          cachefiles_ondemand_select_req
            req->msg.opcode != CACHEFILES_OP_READ
            // req use-after-free !!!
          xa_unlock(&cache->reqs);
                               xa_destroy(&cache->reqs)

Hence remove requests from cache->reqs when flushing them to avoid accessing freed requests.

Reference

https://git.kernel.org/stable/c/9f13aacdd4ee9a7644b2a3c96d67113cd083c9c7 https://git.kernel.org/stable/c/50d0e55356ba5b84ffb51c42704126124257e598 https://git.kernel.org/stable/c/37e19cf86a520d65de1de9cb330415c332a40d19 https://git.kernel.org/stable/c/0fc75c5940fa634d84e64c93bfc388e1274ed013