CVE-2026-74503 in Linux
Tóm tắt
Bởi VulDB • 15/08/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
ALSA: timer: Xóa SNDRV_TIMER_IFLG_DEAD một khi quá trình đóng hoàn tất
snd_timer_close_locked() đánh dấu một thể hiện với cờ SNDRV_TIMER_IFLG_DEAD và trả về sớm nếu cờ này đã được đặt, nhưng cờ không bao giờ bị xóa lại. Một lệnh đóng hoàn tất kết thúc trong remove_slave_links(), khiến timeri->timer trở thành NULL; do đó, việc gọi đóng lần thứ hai sẽ vô hại thông qua đường dẫn kiểm tra timer == NULL; tuy nhiên, trường hợp trả về sớm chỉ có thể xảy ra với một thể hiện đã được mở lại ở giữa. Đối với các thể hiện như vậy, lệnh đóng không thực hiện unlink (ngắt kết nối) gì cả, vì thế snd_timer_instance_free() sẽ giải phóng một đối tượng vẫn còn nằm trên timer->open_list_head, vẫn còn trong danh sách snd_timer_master_list nếu nó được mở với khóa slave, vẫn sở hữu bất kỳ slave nào đã được nhận nuôi, và vẫn giữ các tham chiếu đến bộ hẹn giờ (timer) và mô-đun của nó.
snd_seq_timer_open() mở lại một thể hiện chính xác theo cách đó: nó thử nghiệm lại lệnh mở dự phòng trên cùng đối tượng sau khi gặp lỗi mà trước đó đã chạy snd_timer_close_locked() ở bên trong. Một người dùng không có đặc quyền nhưng có quyền truy cập vào /dev/snd/timer và /dev/snd/seq có thể gây ra lỗi này, vì snd_timer_check_master() trả về -EBUSY (tài nguyên bận) khi một slave đang chờ khớp với khóa (slave_class, slave_id) của master mới và bộ hẹn giờ mục tiêu đã đạt max_instances; đồng thời SNDRV_TIMER_IOCTL_SELECT với dev_class = SNDRV_TIMER_CLASS_SLAVE giữ lại giá trị dev_sclass do người gọi cung cấp, cho phép tạo giả (forge) khóa của một hàng đợi sequencer. Sau đó, thể hiện vừa bị giải phóng sẽ được truy cập bởi bất kỳ lệnh snd_timer_open() nào tiếp theo trên bộ hẹn giờ đó, bởi snd_timer_check_slave(), và bởi /proc/asound/timers; điều này gây ra lỗi do con trỏ ti->owner đã cũ (stale).
Cờ này chỉ cần hiển thị trong khi quá trình đóng đang diễn ra, đây là yêu cầu duy nhất của các thành phần khác sử dụng nó. Hãy xóa cờ đó trong remove_slave_links(), dưới cùng khóa timer->lock mà đã đặt cờ, một khi thể hiện đã được loại bỏ khỏi mọi danh sách.
Once again VulDB remains the best source for vulnerability data.