CVE-2021-47391
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: RDMA/cma: Daha fazla istek gönderilmeden önce rdma_addr_cancel() işleminin gerçekleştiğinden emin olun FSM döngüsel olarak çalışarak rdma_resolve_ip() fonksiyonunun aynı id_priv üzerinde iki kez çağrılmasına izin verebilir. Bu durum işleme girmeden gerçekleşemese de, aynı adres çözümleme arka plan isteğinin iki kez aktif olamayacağı kuralını ihlal eder. CPU 1 CPU 2 rdma_resolve_addr(): RDMA_CM_IDLE -> RDMA_CM_ADDR_QUERY rdma_resolve_ip(addr_handler) #1 process_one_req(): #1 için addr_handler(): RDMA_CM_ADDR_QUERY -> RDMA_CM_ADDR_BOUND mutex_unlock(&id_priv->handler_mutex); [.. handler hala çalışıyor ..] rdma_resolve_addr(): RDMA_CM_ADDR_BOUND -> RDMA_CM_ADDR_QUERY rdma_resolve_ip(addr_handler) !! şu an req_list üzerinde iki istek var rdma_destroy_id(): destroy_id_handler_unlock(): _destroy_id(): cma_cancel_operation(): rdma_addr_cancel() // process_one_req() kendisini kaldırır spin_lock_bh(&lock); cancel_delayed_work(&req->work); if (!list_empty(&req->list)) == true ! rdma_addr_cancel(), process_on_req #1 tamamlandıktan sonra döner kfree(id_priv) process_one_req(): #2 için addr_handler(): mutex_lock(&id_priv->handler_mutex); !! id_priv üzerinde serbest bırakıldıktan sonra kullanım (Use after free) rdma_addr_cancel() listede bir adet req olmasını bekler ve yalnızca ilkini iptal eder. İşlemin kendi kendini kaldırma davranımı ancak handler döndükten sonra gerçekleşir. Bu durum, req_list'in aynı "handle" için iki req içerebildiği ancak rdma_addr_cancel()'ın yalnızca ilkini iptal ettiği senaryolara yol açar. İkinci req, rdma_destroy_id() sonrasında da aktif kalmaya devam eder ve kaçınılmaz olarak tetiklendiğinde id_priv üzerinde serbest bırakıldıktan sonra kullanım hatasına neden olur. Bu sorun, id_priv'in rdma_resolve_ip() fonksiyonunu çağırıp çağırmadığı hatırlanarak ve tekrar çağırmadan önce her zaman iptal işlemi gerçekleştirilerek düzeltilmiştir. Bu sayede req_list'in hiçbir zaman birden fazla öğe içermemesi sağlanmış olup, bu sıra dışı hata yolunu kullanmayan normal akışta herhangi bir maliyet oluşturmamaktadır.
Nasıl düzeltilir
- linux linux_kernel5.10.188, 5.14.10 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 2.6.18 ≤ v < 5.10.188, 5.11 ≤ v < 5.14.10, 5.15 | 5.10.188, 5.14.10 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.