In the Linux kernel, the following vulnerability has been resolved:
power: supply: core: Fix boundary conditions in interpolation
The functions powersupplytemp2resistsimple and powersupplyocv2capsimple handle boundary conditions incorrectly. The change was introduced in a4585ba2050f460f749bbaf2b67bd56c41e30283 ("power: supply: core: Use library interpolation"). There are two issues: First, the lines "high = i - 1" and "high = i" in ocv2cap have the wrong order compared to temp2resist. As a consequence, ocv2cap sets high=-1 if ocv>table[0].ocv, which causes an out-of-bounds read. Second, the logic of temp2resist is also not correct. Consider the case table[] = {{20, 100}, {10, 80}, {0, 60}}. For temp=5, we expect a resistance of 70% by interpolation. However, temp2resist sets high=low=2 and returns 60.
[
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@093d27bb6f2d1963f927ef59c9a2d37059175426",
"id": "CVE-2022-49612-719578f9",
"deprecated": false,
"target": {
"function": "power_supply_temp2resist_simple",
"file": "drivers/power/supply/power_supply_core.c"
},
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"length": 403.0,
"function_hash": "145619801073938342022833146317155243198"
}
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a762cee5d933fe4e2e1b773d60fc74fb8248d8c4",
"id": "CVE-2022-49612-77436a79",
"deprecated": false,
"target": {
"function": "power_supply_ocv2cap_simple",
"file": "drivers/power/supply/power_supply_core.c"
},
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"length": 399.0,
"function_hash": "46727690536452938527807042432470218771"
}
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a762cee5d933fe4e2e1b773d60fc74fb8248d8c4",
"id": "CVE-2022-49612-92fda693",
"deprecated": false,
"target": {
"function": "power_supply_temp2resist_simple",
"file": "drivers/power/supply/power_supply_core.c"
},
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"length": 403.0,
"function_hash": "145619801073938342022833146317155243198"
}
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@093d27bb6f2d1963f927ef59c9a2d37059175426",
"id": "CVE-2022-49612-bc7a8c76",
"deprecated": false,
"target": {
"function": "power_supply_ocv2cap_simple",
"file": "drivers/power/supply/power_supply_core.c"
},
"signature_version": "v1",
"signature_type": "Function",
"digest": {
"length": 399.0,
"function_hash": "46727690536452938527807042432470218771"
}
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@093d27bb6f2d1963f927ef59c9a2d37059175426",
"id": "CVE-2022-49612-bef2531d",
"deprecated": false,
"target": {
"file": "drivers/power/supply/power_supply_core.c"
},
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"threshold": 0.9,
"line_hashes": [
"180748230627606700565919471689894017376",
"64585270510941194552583729635275311270",
"158594801893001032079966348756406519717",
"85702374121675514678439864308967787271",
"133619058521900119931267787288440821417",
"304407073942604323551721356897855717797",
"230541735486833927870462798187600127705",
"215570499892047788485163169648762072873",
"2438528282242371034278237273334719527",
"333365036386798664123001142707080600115",
"305028036407197682817695530946295144710",
"259941691220809416402241591737366937675",
"27944248172963717593051926870668351263",
"156547857673516181944860343346373719224",
"9498306800893137371246220805654553243",
"156180774963124565419809353302652088320",
"209492932950376081051319504767531631847",
"309288371808378260067443656314316190450",
"128857284626679653722604272008756830946",
"85283376425404691413525441596605476397",
"241944963728198197056262256837347676908",
"277207590459289550598590704105681496394"
]
}
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a762cee5d933fe4e2e1b773d60fc74fb8248d8c4",
"id": "CVE-2022-49612-c6527b53",
"deprecated": false,
"target": {
"file": "drivers/power/supply/power_supply_core.c"
},
"signature_version": "v1",
"signature_type": "Line",
"digest": {
"threshold": 0.9,
"line_hashes": [
"180748230627606700565919471689894017376",
"64585270510941194552583729635275311270",
"158594801893001032079966348756406519717",
"85702374121675514678439864308967787271",
"133619058521900119931267787288440821417",
"304407073942604323551721356897855717797",
"230541735486833927870462798187600127705",
"215570499892047788485163169648762072873",
"2438528282242371034278237273334719527",
"333365036386798664123001142707080600115",
"305028036407197682817695530946295144710",
"259941691220809416402241591737366937675",
"27944248172963717593051926870668351263",
"156547857673516181944860343346373719224",
"9498306800893137371246220805654553243",
"156180774963124565419809353302652088320",
"209492932950376081051319504767531631847",
"309288371808378260067443656314316190450",
"128857284626679653722604272008756830946",
"85283376425404691413525441596605476397",
"241944963728198197056262256837347676908",
"277207590459289550598590704105681496394"
]
}
}
]