{"api_version":"1","generated_at":"2026-10-22T03:37:43+00:00","cve":"CVE-2026-98443","urls":{"html":"https://cve.report/CVE-2026-98443","api":"https://cve.report/api/cve/CVE-2026-98443.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-98443","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-98443"},"summary":{"title":"xfs: fix cursor and pointer handling when recovering iunlink buckets","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix cursor and pointer handling when recovering iunlink buckets\n\nLOLLM pointed out a bug in xlog_recover_iunlink_bucket:\n\n1. We don't null out prev_ip after releasing it, which can lead to UAF\n   problems if the inodegc flush call in the loop fails.\n\nat which point I noticed even more bugs:\n\n2. If the inodegc flush inside the loop fails, we also leak @ip.\n\n3. We set prev_agino to agino having already advanced agino, which\n   results in inodes with i_prev_unlinked set to itself.\n\n4. If we exit the bottom of the loop with prev_ip set, then prev_ip\n   aliases ip and we also set its i_prev_unlinked to itself.\n\nBugs 3 and 4 introduce loops into the unlinked list, though these loops\ndon't surface because we immediately flush each unlinked inode after\nloading it.\n\nFix all of these issues.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-10-18 16:16:54","updated_at":"2026-10-21 13:21:29"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/65f39d09d73718611cee40399179323b5d4ead00","name":"https://git.kernel.org/stable/c/65f39d09d73718611cee40399179323b5d4ead00","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1","name":"https://git.kernel.org/stable/c/8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/961c717e6bf0e53c2c2b1fe4aef1add9390fedab","name":"https://git.kernel.org/stable/c/961c717e6bf0e53c2c2b1fe4aef1add9390fedab","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/47a948ba653a463d429e02fda2f06a3d6b78666d","name":"https://git.kernel.org/stable/c/47a948ba653a463d429e02fda2f06a3d6b78666d","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/66a2179d02668f8df44b1a249899006f3ba38ea0","name":"https://git.kernel.org/stable/c/66a2179d02668f8df44b1a249899006f3ba38ea0","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-98443","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98443","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 04755d2e5821b3afbaadd09fe5df58d04de36484 47a948ba653a463d429e02fda2f06a3d6b78666d git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 04755d2e5821b3afbaadd09fe5df58d04de36484 8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 04755d2e5821b3afbaadd09fe5df58d04de36484 66a2179d02668f8df44b1a249899006f3ba38ea0 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 04755d2e5821b3afbaadd09fe5df58d04de36484 961c717e6bf0e53c2c2b1fe4aef1add9390fedab git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 04755d2e5821b3afbaadd09fe5df58d04de36484 65f39d09d73718611cee40399179323b5d4ead00 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.0","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.0 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.160 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.113 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.55 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.9 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"98443","cve":"CVE-2026-98443","epss":"0.001680000","percentile":"0.057270000","score_date":"2026-10-21","updated_at":"2026-10-22 00:15:10"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["fs/xfs/xfs_log_recover.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"47a948ba653a463d429e02fda2f06a3d6b78666d","status":"affected","version":"04755d2e5821b3afbaadd09fe5df58d04de36484","versionType":"git"},{"lessThan":"8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1","status":"affected","version":"04755d2e5821b3afbaadd09fe5df58d04de36484","versionType":"git"},{"lessThan":"66a2179d02668f8df44b1a249899006f3ba38ea0","status":"affected","version":"04755d2e5821b3afbaadd09fe5df58d04de36484","versionType":"git"},{"lessThan":"961c717e6bf0e53c2c2b1fe4aef1add9390fedab","status":"affected","version":"04755d2e5821b3afbaadd09fe5df58d04de36484","versionType":"git"},{"lessThan":"65f39d09d73718611cee40399179323b5d4ead00","status":"affected","version":"04755d2e5821b3afbaadd09fe5df58d04de36484","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["fs/xfs/xfs_log_recover.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"6.0"},{"lessThan":"6.0","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.6.*","status":"unaffected","version":"6.6.160","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.113","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.55","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.9","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.6.160","versionStartIncluding":"6.0","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.113","versionStartIncluding":"6.0","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.55","versionStartIncluding":"6.0","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.9","versionStartIncluding":"6.0","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.3","versionStartIncluding":"6.0","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix cursor and pointer handling when recovering iunlink buckets\n\nLOLLM pointed out a bug in xlog_recover_iunlink_bucket:\n\n1. We don't null out prev_ip after releasing it, which can lead to UAF\n   problems if the inodegc flush call in the loop fails.\n\nat which point I noticed even more bugs:\n\n2. If the inodegc flush inside the loop fails, we also leak @ip.\n\n3. We set prev_agino to agino having already advanced agino, which\n   results in inodes with i_prev_unlinked set to itself.\n\n4. If we exit the bottom of the loop with prev_ip set, then prev_ip\n   aliases ip and we also set its i_prev_unlinked to itself.\n\nBugs 3 and 4 introduce loops into the unlinked list, though these loops\ndon't surface because we immediately flush each unlinked inode after\nloading it.\n\nFix all of these issues."}],"providerMetadata":{"dateUpdated":"2026-10-21T12:55:04.681Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/47a948ba653a463d429e02fda2f06a3d6b78666d"},{"url":"https://git.kernel.org/stable/c/8c9d5b8a96d6b93eb24e07b4163c89341ba29bd1"},{"url":"https://git.kernel.org/stable/c/66a2179d02668f8df44b1a249899006f3ba38ea0"},{"url":"https://git.kernel.org/stable/c/961c717e6bf0e53c2c2b1fe4aef1add9390fedab"},{"url":"https://git.kernel.org/stable/c/65f39d09d73718611cee40399179323b5d4ead00"}],"title":"xfs: fix cursor and pointer handling when recovering iunlink buckets","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-98443","datePublished":"2026-10-18T15:14:53.597Z","dateReserved":"2026-09-25T10:25:14.349Z","dateUpdated":"2026-10-21T12:55:04.681Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-18 16:16:54","lastModifiedDate":"2026-10-21 13:21:29","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"98443","Ordinal":"1","Title":"xfs: fix cursor and pointer handling when recovering iunlink buc","CVE":"CVE-2026-98443","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"98443","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix cursor and pointer handling when recovering iunlink buckets\n\nLOLLM pointed out a bug in xlog_recover_iunlink_bucket:\n\n1. We don't null out prev_ip after releasing it, which can lead to UAF\n   problems if the inodegc flush call in the loop fails.\n\nat which point I noticed even more bugs:\n\n2. If the inodegc flush inside the loop fails, we also leak @ip.\n\n3. We set prev_agino to agino having already advanced agino, which\n   results in inodes with i_prev_unlinked set to itself.\n\n4. If we exit the bottom of the loop with prev_ip set, then prev_ip\n   aliases ip and we also set its i_prev_unlinked to itself.\n\nBugs 3 and 4 introduce loops into the unlinked list, though these loops\ndon't surface because we immediately flush each unlinked inode after\nloading it.\n\nFix all of these issues.","Type":"Description","Title":"xfs: fix cursor and pointer handling when recovering iunlink buc"}]}}}