From: Matthew Wilcox (Oracle) Date: Sat, 2 Nov 2019 04:25:08 +0000 (-0400) Subject: idr: Fix idr_alloc_u32 on 32-bit systems X-Git-Tag: Ubuntu-5.13.0-19.19~7370^2 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=b7e9728f3d7fc5c5c8508d99f1675212af5cfd49;p=mirror_ubuntu-jammy-kernel.git idr: Fix idr_alloc_u32 on 32-bit systems Attempting to allocate an entry at 0xffffffff when one is already present would succeed in allocating one at 2^32, which would confuse everything. Return -ENOSPC in this case, as expected. Signed-off-by: Matthew Wilcox (Oracle) --- diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 18c1dfbb1765..c8fa1d274530 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -1529,7 +1529,7 @@ void __rcu **idr_get_free(struct radix_tree_root *root, offset = radix_tree_find_next_bit(node, IDR_FREE, offset + 1); start = next_index(start, node, offset); - if (start > max) + if (start > max || start == 0) return ERR_PTR(-ENOSPC); while (offset == RADIX_TREE_MAP_SIZE) { offset = node->offset + 1;