提交 72fd6c7b 编写于 作者: M Matthew Wilcox

idr: Warn if old iterators see large IDs

Now that the IDR can be used to store large IDs, it is possible somebody
might only partially convert their old code and use the iterators which
can only handle IDs up to INT_MAX.  It's probably unwise to show them a
truncated ID, so settle for spewing warnings to dmesg, and terminating
the iteration.
Signed-off-by: NMatthew Wilcox <mawilcox@microsoft.com>
上级 7a457577
......@@ -159,7 +159,11 @@ int idr_for_each(const struct idr *idr,
void __rcu **slot;
radix_tree_for_each_slot(slot, &idr->idr_rt, &iter, 0) {
int ret = fn(iter.index, rcu_dereference_raw(*slot), data);
int ret;
if (WARN_ON_ONCE(iter.index > INT_MAX))
break;
ret = fn(iter.index, rcu_dereference_raw(*slot), data);
if (ret)
return ret;
}
......@@ -187,6 +191,9 @@ void *idr_get_next(struct idr *idr, int *nextid)
if (!slot)
return NULL;
if (WARN_ON_ONCE(iter.index > INT_MAX))
return NULL;
*nextid = iter.index;
return rcu_dereference_raw(*slot);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册