Description
In the Linux kernel, the following vulnerability has been resolved: net: batman-adv: fix error handling Syzbot reported ODEBUG warning in batadv_nc_mesh_free(). The problem was in wrong error handling in batadv_mesh_init(). Before this patch batadv_mesh_init() was calling batadv_mesh_free() in case of any batadv_*_init() calls failure. This approach may work well, when there is some kind of indicator, which can tell which parts of batadv are initialized; but there isn't any. All written above lead to cleaning up uninitialized fields. Even if we hide ODEBUG warning by initializing bat_priv->nc.work, syzbot was able to hit GPF in batadv_nc_purge_paths(), because hash pointer in still NULL. [1] To fix these bugs we can unwind batadv_*_init() calls one by one. It is good approach for 2 reasons: 1) It fixes bugs on error handling path 2) It improves the performance, since we won't call unneeded batadv_*_free() functions. So, this patch makes all batadv_*_init() clean up all allocated memory before returning with an error to no call correspoing batadv_*_free() and open-codes batadv_mesh_free() with proper order to avoid touching uninitialized fields.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
c6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < 0c6b199f09be489c48622537a550787fc80aea73affectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < 07533f1a673ce1126d0a72ef1e4b5eaaa3dd6d20affectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < e50f957652190b5a88a8ebce7e5ab14ebd0d3f00affectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < fbf150b16a3635634b7dfb7f229d8fcd643c6c51affectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < 6422e8471890273994fe8cc6d452b0dcd2c9483eaffectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < b0a2cd38553c77928ef1646ed1518486b1e70ae8affectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < a8f7359259dd5923adc6129284fdad12fc5db347affectedc6c8fea29769d998d94fcec9b9f14d4b52b349d3 to < 6f68cd634856f8ca93bafd623ba5357e0f648c68affected
Linux Linux
Default version status: affected
2.6.38affected0 to < 2.6.38unaffected4.4.293 to ≤ 4.4.*unaffected4.9.289 to ≤ 4.9.*unaffected4.14.254 to ≤ 4.14.*unaffected4.19.215 to ≤ 4.19.*unaffected5.4.157 to ≤ 5.4.*unaffected5.10.77 to ≤ 5.10.*unaffected5.14.16 to ≤ 5.14.*unaffected5.15 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/0c6b199f09be489c48622537a550787fc80aea73 ↗
- https://git.kernel.org/stable/c/07533f1a673ce1126d0a72ef1e4b5eaaa3dd6d20 ↗
- https://git.kernel.org/stable/c/e50f957652190b5a88a8ebce7e5ab14ebd0d3f00 ↗
- https://git.kernel.org/stable/c/fbf150b16a3635634b7dfb7f229d8fcd643c6c51 ↗
- https://git.kernel.org/stable/c/6422e8471890273994fe8cc6d452b0dcd2c9483e ↗
- https://git.kernel.org/stable/c/b0a2cd38553c77928ef1646ed1518486b1e70ae8 ↗
- https://git.kernel.org/stable/c/a8f7359259dd5923adc6129284fdad12fc5db347 ↗
- https://git.kernel.org/stable/c/6f68cd634856f8ca93bafd623ba5357e0f648c68 ↗