CVE-2021-47371
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: nexthop: nexthop bildirim zinciri dinleyicilerindeki bellek sızıntıları düzeltildi syzkaller, şu komutlara indirgenebilen bellek sızıntıları [1] tespit etmiştir: # ip nexthop add id 1 blackhole # devlink dev reload pci/0000:06:00.0 Yeniden yükleme akışının bir parçası olarak, mlxsw önce netdev'lerini kayıttan çıkaracak ve ardından nexthop bildirim zincirinden ayrılacaktır. Bildirim zincirinden ayrılmadan önce mlxsw, mlxsw tarafından kaydedilen netdev'leri veya bunların üst katmanlarını kullanan nexthop nesneleri için silme bildirimleri alacaktır. mlxsw, yeniden yükleme akışının bir parçası olarak kaldırılmayan netdev'leri kullanan nexthop'lar için bildirim almayacaktır. Örneğin, dahili olarak döngüsel (loopback) netdev'i nexthop cihazı olarak kullanan yukarıdaki blackhole nexthop durumu buna örnektir. Bu sorunu çözmenin bir yolu, dinleyicilerin bildirim zincirinden ayrıldıktan sonra kendi nexthop tablolarını temizlemelerini sağlamaktır. Bu yama ile açıkça görüldüğü üzere bu yöntem hataya açıktır ve ayrıca bir dinleyicinin mevcut tüm nexthop'ların dökümünü aldığı kayıt yoluyla simetrik değildir. Bu nedenle sorun, kaydı silinen dinleyici için silme bildirimlerinin yeniden oynatılmasıyla çözülmüştür. Bu işlem, kayıt yoluyla simetriktir ve netdev bildirim zinciriyle tutarlıdır. Yukarıdakiler, register_nexthop_notifier() gibi unregister_nexthop_notifier() fonksiyonunun da mevcut nexthop'lar üzerinde yineleme yapabilmek için RTNL alması gerektiği ve fonksiyonu çağıranların RTNL tutmaması gerektiği anlamına gelir. Bu durum mlxsw ve netdevsim için geçerlidir ancak VXLAN sürücüsü için geçerli değildir. Bir kilitlenmeyi (deadlock) önlemek için, sonuncusunun nexthop dinleyicisini RTNL tutmadan kayıttan çıkarması sağlanarak kayıt yoluyla simetrik hale getirilmiştir. [1] unreferenced object 0xffff88806173d600 (size 512): comm "syz-executor.0", pid 1290, jiffies 4295583142 (age 143.507s) hex dump (first 32 bytes): 41 9d 1e 60 80 88 ff ff 08 d6 73 61 80 88 ff ff A..`......sa.... 08 d6 73 61 80 88 ff ff 01 00 00 00 00 00 00 00 ..sa............ backtrace: [<ffffffff81a6b576>] kmemleak_alloc_recursive include/linux/kmemleak.h:43 [inline] [<ffffffff81a6b576>] slab_post_alloc_hook+0x96/0x490 mm/slab.h:522 [<ffffffff81a716d3>] slab_alloc_node mm/slub.c:3206 [inline] [<ffffffff81a716d3>] slab_alloc mm/slub.c:3214 [inline] [<ffffffff81a716d3>] kmem_cache_alloc_trace+0x163/0x370 mm/slub.c:3231 [<ffffffff82e8681a>] kmalloc include/linux/slab.h:591 [inline] [<ffffffff82e8681a>] kzalloc include/linux/slab.h:721 [inline] [<ffffffff82e8681a>] mlxsw_sp_nexthop_obj_group_create drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:4918 [inline] [<ffffffff82e8681a>] mlxsw_sp_nexthop_obj_new drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:5054 [inline] [<ffffffff82e8681a>] mlxsw_sp_nexthop_obj_event+0x59a/0x2910 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:5239 [<ffffffff813ef67d>] notifier_call_chain+0xbd/0x210 kernel/notifier.c:83 [<ffffffff813f0662>] blocking_notifier_call_chain kernel/notifier.c:318 [inline] [<ffffffff813f0662>] blocking_notifier_call_chain+0x72/0xa0 kernel/notifier.c:306 [<ffffffff8384b9c6>] call_nexthop_notifiers+0x156/0x310 net/ipv4/nexthop.c:244 [<ffffffff83852bd8>] insert_nexthop net/ipv4/nexthop.c:2336 [inline] [<ffffffff83852bd8>] nexthop_add net/ipv4/nexthop.c:2644 [inline] [<ffffffff83852bd8>] rtm_new_nexthop+0x14e8/0x4d10 net/ipv4/nexthop.c:2913 [<ffffffff833e9a78>] rtnetlink_rcv_msg+0x448/0xbf0 net/core/rtnetlink.c:5572 [<ffffffff83608703>] netlink_rcv_skb+0x173/0x480 net/netlink/af_netlink.c:2504 [<ffffffff833de032>] rtnetlink_rcv+0x22/0x30 net/core/rtnetlink.c:5590 [<ffffffff836069de>] netlink_unicast_kernel net/netlink/af_netlink.c:1314 [inline] [<ffffffff836069de>] netlink_unicast+0x5ae/0x7f0 net/netlink/af_netlink.c:1340 [<ffffffff83607501>] netlink_sendmsg+0x8e1/0xe30 net/netlink/af_netlink.c:1929 [<ffffffff832fde84>] sock_sendmsg_nosec net/socket.c:704 [inline ---truncated---
Nasıl düzeltilir
- linux linux_kernel5.14.9 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 | 5.11 ≤ v < 5.14.9, 5.15 | 5.14.9 |
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.