Linux: rtc: ac100: Assign .num before accessing .hws
What fixes it
- 6bb55381daf1a1bed0657189a1396e7467712525LinuxCVE List
- 160619b38707241e22569f9c983a4b3d0890996aLinuxCVE List
- 6a4117eee82dd85f11bf898bf66026764011eeb6LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
rtc: ac100: Assign .num before accessing .hws
Commit f316cdff8d67 ("clk: Annotate struct clk_hw_onecell_data with __counted_by") annotated the hws member of 'struct clk_hw_onecell_data' with __counted_by, which informs the bounds sanitizer (UBSAN_BOUNDS) about the number of elements in .hws[], so that it can warn when .hws[] is accessed out of bounds. As noted in that change, the __counted_by member must be initialized with the number of elements before the first array access happens, otherwise there will be a warning from each access prior to the initialization because the number of elements is zero. This occurs in ac100_rtc_register_clks() due to .num being assigned only after every clkout clock has been stored in .hws[]. With CONFIG_UBSAN_BOUNDS and a compiler that implements __counted_by (GCC 15.1+ or Clang 20.1+), this triggers an array-index-out-of-bounds report during probe, and with CONFIG_UBSAN_TRAP the first store traps.
Initialize .num with AC100_CLKOUT_NUM, the number of elements .hws[] was allocated with, right after the allocation. That is the value the loop counter ends up at on the success path anyway, so the provider's behaviour is unchanged.
Text from CVE List
Affected versions 12
- Linuxaffected: f316cdff8d677db9ad9c90acb44c4cd535b0ee27 before e77c5fc1f39fdb06ecd1f55b101eea1e1db2ffefCVE List
- Linuxaffected: f316cdff8d677db9ad9c90acb44c4cd535b0ee27 before 6bb55381daf1a1bed0657189a1396e7467712525CVE List
- Linuxaffected: f316cdff8d677db9ad9c90acb44c4cd535b0ee27 before 160619b38707241e22569f9c983a4b3d0890996aCVE List
- Linuxaffected: f316cdff8d677db9ad9c90acb44c4cd535b0ee27 before ad1bf77039cba83373bf1eff3784655e3e3ed2abCVE List
- Linuxaffected: f316cdff8d677db9ad9c90acb44c4cd535b0ee27 before 6a4117eee82dd85f11bf898bf66026764011eeb6CVE List
- Linuxaffected: 6.6CVE List
- Linuxunaffected: all versions before 6.6CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.113 through 6.12.*CVE List
- Linuxunaffected: 6.18.56 through 6.18.*CVE List
- Linuxunaffected: 7.2.10 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/e77c5fc1f39fdb06ecd1f55b101eea1e1db2ffefReferencevia CVE List
- git.kernel.org/stable/c/6bb55381daf1a1bed0657189a1396e7467712525Referencevia CVE List
- git.kernel.org/stable/c/160619b38707241e22569f9c983a4b3d0890996aReferencevia CVE List
- git.kernel.org/stable/c/ad1bf77039cba83373bf1eff3784655e3e3ed2abReferencevia CVE List
- git.kernel.org/stable/c/6a4117eee82dd85f11bf898bf66026764011eeb6Referencevia CVE List