XArray: Fix xas_create_range for ranges above 4 billion
The 'sibs' variable would be shifted as a 32-bit integer, so if 'shift' is more than 32, this is undefined behaviour. In practice, this doesn't happen because the page cache is the only user and nobody uses 16TB pages. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
This commit is contained in:
parent
f78b8250a0
commit
84c34df158
|
@ -703,7 +703,7 @@ void xas_create_range(struct xa_state *xas)
|
|||
unsigned char shift = xas->xa_shift;
|
||||
unsigned char sibs = xas->xa_sibs;
|
||||
|
||||
xas->xa_index |= ((sibs + 1) << shift) - 1;
|
||||
xas->xa_index |= ((sibs + 1UL) << shift) - 1;
|
||||
if (xas_is_node(xas) && xas->xa_node->shift == xas->xa_shift)
|
||||
xas->xa_offset |= sibs;
|
||||
xas->xa_shift = 0;
|
||||
|
|
Loading…
Reference in New Issue