CVE-2026-45845
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: net/sched: taprio: sınıf dökümünde NULL işaretçi başvurusu düzeltmesi Bir TAPRIO alt qdisc'i RTM_DELQDISC aracılığıyla silindiğinde, taprio_graft() new == NULL ile çağrılır ve q->qdiscs[cl - 1] içine NULL yazar. Sonraki RTM_GETTCLASS döküm işlemleri taprio_walk() aracılığıyla tüm sınıfları gezer ve taprio_leaf() çağrısıyla NULL işaretçiyi döndüren, ardından child->handle okumak için bu işaretçiye başvuran taprio_dump_class() işlevini çağırır ve çekirdekte NULL işaretçi başvurusuna neden olur. Hata, CONFIG_NET_SCH_TAPRIO etkin olan herhangi bir çekirdekte ad alanı kapsamlı CAP_NET_ADMIN ile erişilebilir. Ayrıcalıksız kullanıcı ad alanları etkin olan sistemlerde, ayrıcalıksız bir yerel kullanıcı yeni bir ağ ad alanı içinde bir taprio qdisc oluşturarak, açık bir alt qdisc aşılayarak, bunu silerek ve bir sınıf dökümü talep ederek çekirdek paniğini tetikleyebilir. RTM_GETTCLASS dökümünün kendisi hiçbir yetenek gerektirmez. Oops: general protection fault, probably for non-canonical address 0xdffffc0000000007: 0000 [#1] SMP KASAN NOPTI KASAN: null-ptr-deref in range [0x0000000000000038-0x000000000000003f] RIP: 0010:taprio_dump_class (net/sched/sch_taprio.c:2478) Call Trace: <TASK> tc_fill_tclass (net/sched/sch_api.c:1966) qdisc_class_dump (net/sched/sch_api.c:2326) taprio_walk (net/sched/sch_taprio.c:2514) tc_dump_tclass_qdisc (net/sched/sch_api.c:2352) tc_dump_tclass_root (net/sched/sch_api.c:2370) tc_dump_tclass (net/sched/sch_api.c:2431) rtnl_dumpit (net/core/rtnetlink.c:6864) netlink_dump (net/netlink/af_netlink.c:2325) rtnetlink_rcv_msg (net/core/rtnetlink.c:6959) netlink_rcv_skb (net/netlink/af_netlink.c:2550) </TASK> Bu, taprio_graft() içinde new NULL olduğunda &noop_qdisc yerine konularak düzeltilir; bu, q->qdiscs[] yuvalarının asla NULL olmamasını sağlamak için diğer qdisc'ler tarafından kullanılan yaygın bir kalıptır (ör. multiq_graft()). Bu, tek tek NULL denetimleri gerektirmeden kontrol düzlemi döküm yollarını güvenli hale getirir. Veri düzlemi yolları (taprio_enqueue ve taprio_dequeue_from_txq) daha önce paketi temiz bir şekilde düşüren/atlayan açık NULL korumalarına sahip olduğundan, bu denetimleri &noop_qdisc için test edecek şekilde güncelleyin. Aksi takdirde, paketler alt öğenin enqueue işlevini çağırmadan önce kök qdisc'in qlen ve backlog değerlerini artıran taprio_enqueue_one() işlevine ulaşır; noop_qdisc paketi düşürür ancak bu sayaçlar asla geri alınmaz ve kök qdisc'in istatistiklerini kalıcı olarak şişirir. Bu değişiklikten sonra *old geçerli bir qdisc, NULL veya &noop_qdisc olabilir. noop_qdisc'in hiç artırılmamış olan başvuru sayısını azaltmaktan kaçınmak için yalnızca ilk durumda qdisc_put(*old) çağırın.
Nasıl düzeltilir
- linux linux_kernel6.6.141, 6.12.91, 6.18.33, 7.0.10 ya da sonraki bir sürüm
- git.kernel.org/stable/c/3d07ca5c0fae311226f737963984bd94bb159a87
- git.kernel.org/stable/c/48b26d48e76221dc90b02bf5428bab53643461ca
- git.kernel.org/stable/c/8f1ff8866cb9f655e5faea6994eb902960be8e04
- git.kernel.org/stable/c/d02e2fbf60de46678e2ea698a6a904fd21e1cc31
- git.kernel.org/stable/c/ec2501e361b08b50bcb1e7b3253fc861abbda28d
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 6.6 ≤ v < 6.6.141, 6.7 ≤ v < 6.12.91, 6.13 ≤ v < 6.18.33, 6.19 ≤ v < 7.0.10, 7.1 | 6.6.141, 6.12.91, 6.18.33, 7.0.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.