- Son 7 gün
- CWE-787
CVE-2026-79978
Zephyr ADXL345 sürücüsünde RTIO akış FIFO okuma yolunda sınır dışı yazma açığı
- Yayımlandı
- Güncellendi
- 23 Eki 2026
- Açık yaşı
- 4 gün
- Kaydı açan
- zephyr
ÖzetTürkçe
Zephyr'daki ADXL345 ivmeölçer sürücüsünün RTIO akış tamamlama geri çağrısı adxl345_process_fifo_samples_cb, raporlanacak FIFO verisi miktarını rtio_sqe_rx_buf ile elde edilen gerçek alana sınırlar; ancak donanım FIFO girişi başına bir 6 baytlık veri yolu okuması kuyruğa alır ve bu okumaları kırpılmış miktara değil, cihazın bildirdiği giriş sayısına göre sınırlar. Ayrılan tampon bir tam toplu işlemden küçük olduğunda sürücü, ayrılan alanın sonundan itibaren 186 bayta kadar yazar. Ayrıca data->fifo_total_bytes değeri toplu işlem başında sıfırlanmadığından, yarıda kesilen ya da hatalı biten bir zincir, bir sonraki toplu işlemin yazma ofsetini de bozarak onun da sınır dışına yazmasına yol açabilir. Kısa tamponlar RTIO ayırıcısının beklenen bir sonucudur ve bu yol, mempool blok boyutu tam bir FIFO toplu işleminden (204 bayt) küçük olan akış yapılandırmalarında, havuz parçalandığında ya da tüketen iş parçacığı geride kaldığında tetiklenir. Sınır dışı yazmalar, I2C/SPI RTIO arka ucu tarafından paylaşılan RTIO blok havuzuna yapılır; bu da komşu canlı tamponların bozulmasına veya havuz bir toplu işlemden küçükse havuzun ötesindeki belleğin bozulmasına neden olabilir. Yazılan veriler ivmeölçer örnekleridir ve hedef, ayırmayı izler; dolayısıyla kontrol edilebilir bir bozulma ilkeli yoktur. Gerçekçi etki, diğer RTIO tüketicilerinin verilerinin sessizce bozulması ya da bir çökmedir. Bu durumun oluşması için CONFIG_ADXL345_STREAM ile derlenmiş, kesme bağlantılı bir ADXL345 içeren bir kart ve tampon havuzu açlığı gerekir; bu açlık, yerel bir iş yükü tarafından tetiklenebilir, ancak yoğun yük altında kendiliğinden de oluşabilir. Bu koda ağ, USB veya radyo üzerinden erişim yoktur. Etkilenen sürümler: 4.0.0 ile 4.4.2 dahil.
Kaynaktaki açıklama (İngilizce)
The RTIO streaming completion callback adxl345_process_fifo_samples_cb() in drivers/sensor/adi/adxl345/adxl345_stream.c clamps the amount of FIFO data it will report (read_len = MIN(fifo_bytes, buf_avail)) to the space actually returned by rtio_sqe_rx_buf(), but then queues one 6-byte bus read per hardware FIFO entry at consecutive offsets from read_buf, bounded by the device-reported entry count rather than by the clamp. When the allocated buffer is smaller than a full batch, the driver writes up to 186 bytes past the end of the allocation; a companion defect left data->fifo_total_bytes un-reset at batch start, so an aborted or errored chain could leave a stale write offset that pushes the next batch's writes out of bounds as well.
A short buffer is an expected, first-class outcome of the RTIO allocator: rtio_block_pool_alloc() walks the requested size down one block at a time until a contiguous run is available, and the driver only demands sizeof(struct adxl345_fifo_data) + 6 bytes as its minimum. Any streaming configuration whose mempool block granularity is smaller than a full FIFO batch (204 bytes) — for example the sensor shell's RTIO_DEFINE_WITH_MEMPOOL(sensor_read_rtio, 8, 8, 32, 64, 4) used by sensor stream <dev> on fifo_wm incl, or the 16-byte-block streaming example in the documentation — takes this path whenever the pool is fragmented or the consuming thread falls behind.
The out-of-bounds writes are performed by the I2C/SPI RTIO backend (DMA on many SoCs) into the shared RTIO block pool, corrupting neighbouring live buffers or, for a pool smaller than one batch, memory beyond the pool itself. The written bytes are accelerometer samples and the destination follows the allocation, so there is no controllable corruption primitive: the realistic impact is silent corruption of other RTIO consumers' data or a crash. Reaching it requires a board with an interrupt-wired ADXL345 built with CONFIG_ADXL345_STREAM, plus buffer-pool starvation, which a co-resident local workload can induce but which also occurs spontaneously under load; there is no network, USB or radio path to this code.
Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.
Etkilenen sürümler1 yazılım
| Yazılım | Etkilenen | Düzeltildiği sürüm |
|---|---|---|
| zephyrproject zephyr | ≥ 4.0.0, ≤ 4.4.2 | – |
Kaynaklar4 kaynak
Kayıt geçmişi
- Yayımlandı
İlgili açıklar
Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.