|
@@ -754,21 +754,13 @@ struct pid_namespace *ipc_seq_pid_ns(struct seq_file *s)
|
|
|
static struct kern_ipc_perm *sysvipc_find_ipc(struct ipc_ids *ids, loff_t pos,
|
|
|
loff_t *new_pos)
|
|
|
{
|
|
|
- struct kern_ipc_perm *ipc;
|
|
|
- int total, id;
|
|
|
-
|
|
|
- total = 0;
|
|
|
- for (id = 0; id < pos && total < ids->in_use; id++) {
|
|
|
- ipc = idr_find(&ids->ipcs_idr, id);
|
|
|
- if (ipc != NULL)
|
|
|
- total++;
|
|
|
- }
|
|
|
+ struct kern_ipc_perm *ipc = NULL;
|
|
|
+ int max_idx = ipc_get_maxidx(ids);
|
|
|
|
|
|
- ipc = NULL;
|
|
|
- if (total >= ids->in_use)
|
|
|
+ if (max_idx == -1 || pos > max_idx)
|
|
|
goto out;
|
|
|
|
|
|
- for (; pos < ipc_mni; pos++) {
|
|
|
+ for (; pos <= max_idx; pos++) {
|
|
|
ipc = idr_find(&ids->ipcs_idr, pos);
|
|
|
if (ipc != NULL) {
|
|
|
rcu_read_lock();
|