{"api_version":"1","generated_at":"2026-08-16T11:18:13+00:00","cve":"CVE-2026-74503","urls":{"html":"https://cve.report/CVE-2026-74503","api":"https://cve.report/api/cve/CVE-2026-74503.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-74503","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-74503"},"summary":{"title":"ALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes\n\nsnd_timer_close_locked() marks an instance with SNDRV_TIMER_IFLG_DEAD\nand returns early when the flag is already set, but the flag is never\ncleared again.  A completed close ends in remove_slave_links(), which\nleaves timeri->timer NULL, so a second close is already harmless through\nthe timer == NULL path; the early return can only be reached by an\ninstance that was opened again in between.  For such an instance the\nclose unlinks nothing, so snd_timer_instance_free() frees an object that\nis still on timer->open_list_head, still on snd_timer_master_list if it\nwas opened with a slave key, still owns any adopted slaves, and still\nholds its timer and module references.\n\nsnd_seq_timer_open() reopens an instance exactly like that: it retries\nits fallback open on the same object after a failure that has already\nrun snd_timer_close_locked() internally.  An unprivileged user with\naccess to /dev/snd/timer and /dev/snd/seq can force that failure, since\nsnd_timer_check_master() returns -EBUSY when a pending slave matches the\nnew master's (slave_class, slave_id) key and the target timer has\nreached max_instances, and SNDRV_TIMER_IOCTL_SELECT with dev_class =\nSNDRV_TIMER_CLASS_SLAVE keeps the caller-supplied dev_sclass, so a\nsequencer queue's key can be forged.  The freed instance is afterwards\ndereferenced by any further snd_timer_open() on that timer, by\nsnd_timer_check_slave(), and by /proc/asound/timers, which faults on the\nstale ti->owner pointer.\n\nThe flag only has to be visible while the close is in progress, which is\nall its other users need.  Clear it in remove_slave_links(), under the\nsame timer->lock that sets it, once the instance is off every list.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-08-15 13:17:55","updated_at":"2026-08-15 13:17:55"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/bb016091010ec401a06e6bdace0cd944ee03d371","name":"https://git.kernel.org/stable/c/bb016091010ec401a06e6bdace0cd944ee03d371","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/0c561fab50991df10b1e4daca25886c34a2a9c07","name":"https://git.kernel.org/stable/c/0c561fab50991df10b1e4daca25886c34a2a9c07","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/c2744d5f3aea474513fd2298daecb94a952ce441","name":"https://git.kernel.org/stable/c/c2744d5f3aea474513fd2298daecb94a952ce441","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/a26a2e52736f9e39843ca66a2e1ce6bf1adbcd1e","name":"https://git.kernel.org/stable/c/a26a2e52736f9e39843ca66a2e1ce6bf1adbcd1e","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-74503","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-74503","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 586b219a22b1032b28b8bd356b963276c5e5bf53 bb016091010ec401a06e6bdace0cd944ee03d371 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected f46093dd22969037beb1fce2e043f3236be41c92 a26a2e52736f9e39843ca66a2e1ce6bf1adbcd1e git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected da3039e91d1f835874ed6e9a33ea19ee80c2cb92 0c561fab50991df10b1e4daca25886c34a2a9c07 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected da3039e91d1f835874ed6e9a33ea19ee80c2cb92 c2744d5f3aea474513fd2298daecb94a952ce441 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 60e73ab87b84bbd6bd7ddd1d16019a3a3705ab8f git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.12.94 6.12.103 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.18.36 6.18.44 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 7.0.13 7.1 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 7.1","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.103 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.44 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1.8 7.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2-rc6 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["sound/core/timer.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"bb016091010ec401a06e6bdace0cd944ee03d371","status":"affected","version":"586b219a22b1032b28b8bd356b963276c5e5bf53","versionType":"git"},{"lessThan":"a26a2e52736f9e39843ca66a2e1ce6bf1adbcd1e","status":"affected","version":"f46093dd22969037beb1fce2e043f3236be41c92","versionType":"git"},{"lessThan":"0c561fab50991df10b1e4daca25886c34a2a9c07","status":"affected","version":"da3039e91d1f835874ed6e9a33ea19ee80c2cb92","versionType":"git"},{"lessThan":"c2744d5f3aea474513fd2298daecb94a952ce441","status":"affected","version":"da3039e91d1f835874ed6e9a33ea19ee80c2cb92","versionType":"git"},{"status":"affected","version":"60e73ab87b84bbd6bd7ddd1d16019a3a3705ab8f","versionType":"git"},{"lessThan":"6.12.103","status":"affected","version":"6.12.94","versionType":"semver"},{"lessThan":"6.18.44","status":"affected","version":"6.18.36","versionType":"semver"},{"lessThan":"7.1","status":"affected","version":"7.0.13","versionType":"semver"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["sound/core/timer.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"7.1"},{"lessThan":"7.1","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.103","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.44","versionType":"semver"},{"lessThanOrEqual":"7.1.*","status":"unaffected","version":"7.1.8","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.2-rc6","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.103","versionStartIncluding":"6.12.94","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.44","versionStartIncluding":"6.18.36","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.1.8","versionStartIncluding":"7.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2-rc6","versionStartIncluding":"7.1","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"7.0.13","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes\n\nsnd_timer_close_locked() marks an instance with SNDRV_TIMER_IFLG_DEAD\nand returns early when the flag is already set, but the flag is never\ncleared again.  A completed close ends in remove_slave_links(), which\nleaves timeri->timer NULL, so a second close is already harmless through\nthe timer == NULL path; the early return can only be reached by an\ninstance that was opened again in between.  For such an instance the\nclose unlinks nothing, so snd_timer_instance_free() frees an object that\nis still on timer->open_list_head, still on snd_timer_master_list if it\nwas opened with a slave key, still owns any adopted slaves, and still\nholds its timer and module references.\n\nsnd_seq_timer_open() reopens an instance exactly like that: it retries\nits fallback open on the same object after a failure that has already\nrun snd_timer_close_locked() internally.  An unprivileged user with\naccess to /dev/snd/timer and /dev/snd/seq can force that failure, since\nsnd_timer_check_master() returns -EBUSY when a pending slave matches the\nnew master's (slave_class, slave_id) key and the target timer has\nreached max_instances, and SNDRV_TIMER_IOCTL_SELECT with dev_class =\nSNDRV_TIMER_CLASS_SLAVE keeps the caller-supplied dev_sclass, so a\nsequencer queue's key can be forged.  The freed instance is afterwards\ndereferenced by any further snd_timer_open() on that timer, by\nsnd_timer_check_slave(), and by /proc/asound/timers, which faults on the\nstale ti->owner pointer.\n\nThe flag only has to be visible while the close is in progress, which is\nall its other users need.  Clear it in remove_slave_links(), under the\nsame timer->lock that sets it, once the instance is off every list."}],"providerMetadata":{"dateUpdated":"2026-08-15T12:27:28.208Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/bb016091010ec401a06e6bdace0cd944ee03d371"},{"url":"https://git.kernel.org/stable/c/a26a2e52736f9e39843ca66a2e1ce6bf1adbcd1e"},{"url":"https://git.kernel.org/stable/c/0c561fab50991df10b1e4daca25886c34a2a9c07"},{"url":"https://git.kernel.org/stable/c/c2744d5f3aea474513fd2298daecb94a952ce441"}],"title":"ALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-74503","datePublished":"2026-08-15T12:27:28.208Z","dateReserved":"2026-08-15T05:44:03.908Z","dateUpdated":"2026-08-15T12:27:28.208Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-08-15 13:17:55","lastModifiedDate":"2026-08-15 13:17:55","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"74503","Ordinal":"1","Title":"ALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close complete","CVE":"CVE-2026-74503","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"74503","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes\n\nsnd_timer_close_locked() marks an instance with SNDRV_TIMER_IFLG_DEAD\nand returns early when the flag is already set, but the flag is never\ncleared again.  A completed close ends in remove_slave_links(), which\nleaves timeri->timer NULL, so a second close is already harmless through\nthe timer == NULL path; the early return can only be reached by an\ninstance that was opened again in between.  For such an instance the\nclose unlinks nothing, so snd_timer_instance_free() frees an object that\nis still on timer->open_list_head, still on snd_timer_master_list if it\nwas opened with a slave key, still owns any adopted slaves, and still\nholds its timer and module references.\n\nsnd_seq_timer_open() reopens an instance exactly like that: it retries\nits fallback open on the same object after a failure that has already\nrun snd_timer_close_locked() internally.  An unprivileged user with\naccess to /dev/snd/timer and /dev/snd/seq can force that failure, since\nsnd_timer_check_master() returns -EBUSY when a pending slave matches the\nnew master's (slave_class, slave_id) key and the target timer has\nreached max_instances, and SNDRV_TIMER_IOCTL_SELECT with dev_class =\nSNDRV_TIMER_CLASS_SLAVE keeps the caller-supplied dev_sclass, so a\nsequencer queue's key can be forged.  The freed instance is afterwards\ndereferenced by any further snd_timer_open() on that timer, by\nsnd_timer_check_slave(), and by /proc/asound/timers, which faults on the\nstale ti->owner pointer.\n\nThe flag only has to be visible while the close is in progress, which is\nall its other users need.  Clear it in remove_slave_links(), under the\nsame timer->lock that sets it, once the instance is off every list.","Type":"Description","Title":"ALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close complete"}]}}}