block, bfq: fix possible UAF for bfqq->bic with merge chain
In the Linux kernel, the following vulnerability has been resolved: block, bfq: fix possible UAF for bfqq->bic with merge chain 1) initial state, three tasks: Process 1 Process 2 Process 3 (BIC1) (BIC2) (BIC3) | Λ | Λ | Λ | | | | | | V | V | V | bfqq1 bfqq2 bfqq3 process ref: 1 1 1 2) bfqq1 merged to bfqq2: Process 1 Process 2 Process 3 (BIC1) (BIC2) (BIC3) | | | Λ \--------------\| | | V V | bfqq1--------->bfqq2 bfqq3 process ref: 0 2 1 3) bfqq2 merged to bfqq3: Process 1 Process 2 Process 3 (BIC1) (BIC2) (BIC3) here -> Λ | | \--------------\ \-------------\| V V bfqq1--------->bfqq2---------->bfqq3 process ref: 0 1 3 In this case, IO from Process 1 will get bfqq2 from BIC1 first, and then get bfqq3 through merge chain, and finially handle IO by bfqq3. Howerver, current code will think bfqq2 is owned by BIC1, like initial state, and set bfqq2->bic to BIC1. bfq_insert_request -> by Process 1 bfqq = bfq_init_rq(rq) bfqq = bfq_get_bfqq_handle_split bfqq = bic_to_bfqq -> get bfqq2 from BIC1 bfqq->ref++ rq->elv.priv[0] = bic rq->elv.priv[1] = bfqq if (bfqq_process_refs(bfqq) == 1) bfqq->bic = bic -> record BIC1 to bfqq2 __bfq_insert_request new_bfqq = bfq_setup_cooperator -> get bfqq3 from bfqq2->new_bfqq bfqq_request_freed(bfqq) new_bfqq->ref++ rq->elv.priv[1] = new_bfqq -> handle IO by bfqq3 Fix the problem by checking bfqq is from merge chain fist. And this might fix a following problem reported by our syzkaller(unreproducible): ================================================
CVE-2024-47706
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: cve:CVE-2024-47706
Linux
Source reference: /containers/cna/affected/0/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
Linux
Source reference: /containers/cna/affected/1/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "a9bdd5b36887d2bacb8bc777fd18317c99fc2587",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "bc2140534b2aae752e4f7cb4489642dbb5ec4777",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "e1277ae780cca4e69ef5468d4582dfd48f0b8320",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "8aa9de02a4be2e7006e636816ce19b0d667ceaa3",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "ddbdaad123254fb53e32480cb74a486a6868b1e0",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "7faed2896d78e48ec96229e73b30b0af6c00a9aa",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "880692ee233ba63808182705b3333403413b58f5",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "6d130db286ad0ea392c96ebb2551acf0d7308048",
"versionType": "git"
},
{
"status": "affected",
"version": "36eca894832351feed9072d0f97eb06fc9482ca4",
"lessThan": "18ad4df091dd5d067d2faa8fce1180b79f7041a7",
"versionType": "git"
}
],
"programFiles": [
"block/bfq-iosched.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "4.12"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "4.12",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "4.19.323",
"versionType": "semver",
"lessThanOrEqual": "4.19.*"
},
{
"status": "unaffected",
"version": "5.4.285",
"versionType": "semver",
"lessThanOrEqual": "5.4.*"
},
{
"status": "unaffected",
"version": "5.10.227",
"versionType": "semver",
"lessThanOrEqual": "5.10.*"
},
{
"status": "unaffected",
"version": "5.15.168",
"versionType": "semver",
"lessThanOrEqual": "5.15.*"
},
{
"status": "unaffected",
"version": "6.1.113",
"versionType": "semver",
"lessThanOrEqual": "6.1.*"
},
{
"status": "unaffected",
"version": "6.6.54",
"versionType": "semver",
"lessThanOrEqual": "6.6.*"
},
{
"status": "unaffected",
"version": "6.10.13",
"versionType": "semver",
"lessThanOrEqual": "6.10.*"
},
{
"status": "unaffected",
"version": "6.11.2",
"versionType": "semver",
"lessThanOrEqual": "6.11.*"
},
{
"status": "unaffected",
"version": "6.12",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"block/bfq-iosched.c"
],
"defaultStatus": "affected"
}
]- Related CVEs
- CVE-2024-47706
Source reference:
/cveMetadata/cveId
Publisher severity
high
Source reference: /containers/cna/metrics
- Event
- #26731 · Revision 1
- Added to Heist Feed
- Publisher date