Description
In the Linux kernel, the following vulnerability has been resolved: minix: avoid overflow in bitmap block count calculation minix_check_superblock() uses minix_blocks_needed() to verify that the on-disk imap and zmap block counts are large enough for the advertised inode and zone counts. The helper currently performs DIV_ROUND_UP() in unsigned int arithmetic. A Minix v3 image can set s_ninodes or s_zones near UINT_MAX so the addition inside DIV_ROUND_UP() wraps to zero. That makes a zero imap/zmap block count look valid, after which minix_fill_super() can dereference s_imap[0] or s_zmap[0] even though no bitmap buffers were allocated. Impact: mounting a crafted Minix v3 image whose s_ninodes or s_zones is near UINT_MAX makes minix_check_superblock() accept a zero bitmap-block count and minix_fill_super() dereference s_imap[0]/s_zmap[0], panicking the kernel. The divisor is the bitmap capacity in bits, blocksize * 8, which is always a power of two: minix_fill_super() obtains the block size through sb_set_blocksize(), and blk_validate_block_size() rejects any size that is not a power of two. Use DIV_ROUND_UP_POW2(), which divides before adding the round-up term and so cannot overflow for a power-of-two divisor.
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
2bb588cede1c1969e49c0a2822c8cb8b346b7682 to < a11ebaab50d27d6c4c78506f84ff36452e0b901daffectedf57ccd4657c7f082dc47e5b9e18a883bb5f9118f to < 959c95340a9e19cd333b4c18935fdeecbb2f319daffected31fefc18096cdc5549cfa54964d90e0b3229aedc to < abe3536a4bedcc43de80b6d4d7e3d57e9ba382a5affected8c97a6ddc95690a938ded44b4e3202f03f15078c to < 8a29e60e2176b02e04f8737c8b32b696230eb0c5affected8c97a6ddc95690a938ded44b4e3202f03f15078c to < fb3e566cafc38fe3ba35e6843a2d529a3748870caffecteda051ecf5c5b0387840dc210413ed3bc7fbdaa69caffectedd791c544efd6b9c944b43cf7f502e5bcb02fb941affected66c7c239c65341f99ae388d4d53dc9df2bcb9925affected1efc128ee4adbc23e082715425ff895449d233bcaffected6.6.128 to < 6.6.145affected6.12.75 to < 6.12.97affected6.18.16 to < 6.18.40affected5.10.252 to < 5.11affected5.15.202 to < 5.16affected6.1.165 to < 6.2affected6.19.6 to < 6.20affected
Linux Linux
Default version status: affected
7.0affected0 to < 7.0unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/a11ebaab50d27d6c4c78506f84ff36452e0b901d ↗
- https://git.kernel.org/stable/c/959c95340a9e19cd333b4c18935fdeecbb2f319d ↗
- https://git.kernel.org/stable/c/abe3536a4bedcc43de80b6d4d7e3d57e9ba382a5 ↗
- https://git.kernel.org/stable/c/8a29e60e2176b02e04f8737c8b32b696230eb0c5 ↗
- https://git.kernel.org/stable/c/fb3e566cafc38fe3ba35e6843a2d529a3748870c ↗