CVE-2024-50175
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: media: qcom: camss: stop_streaming funksiyasındakı use_count mühafizəsinin silinməsi use_count yoxlaması, video konveyerini idarə edən CSIPHY girişindəki müxtəlif virtual kanallar (VC) tərəfindən bir neçə eyni vaxtda işləyən Xammal Məlumat İnterfeyslərinin (RDI) idarə edilə bilməsi üçün tətbiq edilmişdi. Lakin bu, use_count-dan yanlış istifadədir, çünki use_count aktiv axınların sayını deyil, video obyektinin istifadəçi sahəsi (user-space) tərəfindən neçə dəfə açıldığını göstərir. Əgər use_count və axın-açıq sayı üst-üstə düşmürsə, hazırkı vəziyyətdə olduğu kimi stop_streaming() xəta verəcəkdir; bu hal CAMSS-in libcamera-nın buraxılmış softisp 0.3 versiyası ilə istifadəsi zamanı aşkar olmuşdur. use_count-un bu şəkildə istifadəsi qeyri-standartdır və hazırda CAMSS-in tək axınlı normal istifadəsini pozur. qcam-in dayandırılması aşağıdakı sistem xətasına (splat) səbəb olur, bundan sonra onu yenidən başlatmaq mümkün olmur və hər hansı cəhd -EBUSY xətası ilə nəticələnir. [ 1265.509831] WARNING: CPU: 5 PID: 919 at drivers/media/common/videobuf2/videobuf2-core.c:2183 __vb2_queue_cancel+0x230/0x2c8 [videobuf2_common] ... [ 1265.510630] Call trace: [ 1265.510636] __vb2_queue_cancel+0x230/0x2c8 [videobuf2_common] [ 1265.510648] vb2_core_streamoff+0x24/0xcc [videobuf2_common] [ 1265.510660] vb2_ioctl_streamoff+0x5c/0xa8 [videobuf2_v4l2] [ 1265.510673] v4l_streamoff+0x24/0x30 [videodev] [ 1265.510707] __video_do_ioctl+0x190/0x3f4 [videodev] [ 1265.510732] video_usercopy+0x304/0x8c4 [videodev] [ 1265.510757] video_ioctl2+0x18/0x34 [videodev] [ 1265.510782] v4l2_ioctl+0x40/0x60 [videodev] ... [ 1265.510944] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 1265.511175] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 1265.511398] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active st Eyni RDI üzərində çoxlu VC-ləri idarə etmək üçün CAMSS-ə xas olan yol belə ola bilər: - CSIPHY, CSID, VFE və RDIx üçün hər bir konveyerin aktivləşdirilməsini istinad sayğacı (reference count) ilə izləmək. - Video buferləri artıq msm_vfeN_rdiX ilə əlaqələndirilib, ona görə də stop_streaming tərəfindən tələb edildikdə video buferlərini azad etmək. - CSIPHY, CSID və VFE üçün enerji domenlərini yalnız onların daxili istinad sayğacları sıfıra düşdükdə azad etmək. Hər iki halda, video buferlərinin azad edilməsindən use_count əsasında imtina etmək xətalıdır və geri alınmalıdır. VC-lərin seçilməsi üçün silikon aktivləşdirmə kodu tamamilə düzgündür. Hazırda eyni vaxtda işləyən VC-lərin CAMSS ilə işləməməsi "məlum çatışmayan funksiya"dır. Bu kodla aparılan ilkin sınaqlar xəta göstərməmişdi, lakin SoftISP və Google Hangouts ilə "real" istifadə upstream kodu tez bir zamanda pozur; biz qismən geri qaytarma etməli və VC-lərə yenidən baxmalıyıq. Bu commit 89013969e232 ("media: camss: sm8250: Pipeline starting and stopping for multiple virtual channels") commit-ini qismən geri qaytarır.
Necə düzəltmək olar
- linux linux_kernel6.6.55, 6.10.14, 6.11.3 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.4 ≤ v < 6.6.55, 6.7 ≤ v < 6.10.14, 6.11 ≤ v < 6.11.3 | 6.6.55, 6.10.14, 6.11.3 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.