CVE-2022-48744
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: net/mlx5e: Alan taşmasına neden olan memcpy() kullanımından kaçınılması FORTIFY_SOURCE'un memcpy(), memmove() ve memset() için derleme zamanı ve çalışma zamanı alan sınır kontrollerini gerçekleştirmesine hazırlık amacıyla, komşu alanların üzerine kasıtlı olarak yazmaktan kaçının. Sıfır elemanlı diziler yerine esnek diziler kullanın (bunlar her zaman taşma yapıyormuş gibi görünür) ve alanlar arası memcpy() işlemini, derleyici tarafından uygun şekilde sınır kontrolü yapılabilecek iki yarıya bölün. Şu işlem gerçekleştiriliyordu: #define ETH_HLEN 14 #define VLAN_HLEN 4 ... #define MLX5E_XDP_MIN_INLINE (ETH_HLEN + VLAN_HLEN) ... struct mlx5e_tx_wqe *wqe = mlx5_wq_cyc_get_wqe(wq, pi); ... struct mlx5_wqe_eth_seg *eseg = &wqe->eth; struct mlx5_wqe_data_seg *dseg = wqe->data; ... memcpy(eseg->inline_hdr.start, xdptxd->data, MLX5E_XDP_MIN_INLINE); Hedef wqe->eth.inline_hdr.start (derleyicinin 2 bayt boyutunda gördüğü yerdir), ancak start (aslında vlan_tci, 2 bayt) üzerinden yazmak amacıyla 18 bayt kopyalanmaktadır. Kalan 16 bayt ise byte_count (4 bayt), lkey (4 bayt) ve addr (8 bayt) alanlarını kapsayacak şekilde wqe->data[0] içine yazılmaktadır. struct mlx5e_tx_wqe { struct mlx5_wqe_ctrl_seg ctrl; /* 0 16 */ struct mlx5_wqe_eth_seg eth; /* 16 16 */ struct mlx5_wqe_data_seg data[]; /* 32 0 */ /* size: 32, cachelines: 1, members: 3 */ /* last cacheline: 32 bytes */ }; struct mlx5_wqe_eth_seg { u8 swp_outer_l4_offset; /* 0 1 */ u8 swp_outer_l3_offset; /* 1 1 */ u8 swp_inner_l4_offset; /* 2 1 */ u8 swp_inner_l3_offset; /* 3 1 */ u8 cs_flags; /* 4 1 */ u8 swp_flags; /* 5 1 */ __be16 mss; /* 6 2 */ __be32 flow_table_metadata; /* 8 4 */ union { struct { __be16 sz; /* 12 2 */ u8 start[2]; /* 14 2 */ } inline_hdr; /* 12 4 */ struct { __be16 type; /* 12 2 */ __be16 vlan_tci; /* 14 2 */ } insert; /* 12 4 */ __be32 trailer; /* 12 4 */ }; /* 12 4 */ /* size: 16, cachelines: 1, members: 9 */ /* last cacheline: 16 bytes */ }; struct mlx5_wqe_data_seg { __be32 byte_count; /* 0 4 */ __be32 lkey; /* 4 4 */ __be64 addr; /* 8 8 */ /* size: 16, cachelines: 1, members: 3 */ /* last cacheline: 16 bytes */ }; Bu nedenle, derleyicinin tampon boyutları hakkında muhakeme yapabilmesi için memcpy() işlemi bölünmüştür. "pahole", struct mlx5e_tx_wqe veya struct mlx5e_umr_wqe üzerinde herhangi bir boyut veya üye ofset değişikliği göstermemektedir. "objdump -d" anlamlı bir nesne kodu değişikliği göstermemektedir (yani sadece kaynak satır numarası kaynaklı farklılıklar ve optimizasyonlar mevcuttur).
Nasıl düzeltilir
- linux linux_kernel5.10.248, 5.16.6 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 | 4.9 ≤ v < 5.10.248, 5.11 ≤ v < 5.16.6, 5.17 | 5.10.248, 5.16.6 |
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.