Thread (9 messages) 9 messages, 4 authors, 2019-07-02

Re: [Patch net 0/3] idr: fix overflow cases on 32-bit CPU

flat view

From: Cong Wang <hidden>
Date: 2019-07-02 03:12:33

On Mon, Jul 1, 2019 at 7:37 PM Matthew Wilcox [off-list ref] wrote:
On Mon, Jul 01, 2019 at 07:16:00PM -0700, David Miller wrote:
quoted
From: Cong Wang <redacted>
Date: Fri, 28 Jun 2019 11:03:40 -0700
quoted
idr_get_next_ul() is problematic by design, it can't handle
the following overflow case well on 32-bit CPU:

u32 id = UINT_MAX;
idr_alloc_u32(&id);
while (idr_get_next_ul(&id) != NULL)
 id++;

when 'id' overflows and becomes 0 after UINT_MAX, the loop
goes infinite.

Fix this by eliminating external users of idr_get_next_ul()
and migrating them to idr_for_each_entry_continue_ul(). And
add an additional parameter for these iteration macros to detect
overflow properly.

Please merge this through networking tree, as all the users
are in networking subsystem.
Series applied, thanks Cong.
Ugh, I don't even get the weekend to reply?

I think this is just a bad idea.  It'd be better to apply the conversion
patches to use XArray than fix up this crappy interface.  I didn't
reply before because I wanted to check those patches still apply and
post them as part of the response.  Now they're definitely broken and
need to be redone.
You can always do refactoring for net-next/linux-next. It is never late
for it.

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help