]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
[IA64] pci_br, fix infinite loop in find_free_ate()
authorJiri Slaby <jirislaby@gmail.com>
Tue, 25 Aug 2009 18:54:10 +0000 (20:54 +0200)
committerTony Luck <tony.luck@intel.com>
Tue, 15 Sep 2009 15:40:49 +0000 (08:40 -0700)
When
* there is almost out of ates
* one asks for more than one ate
* there are some available at the end of ate array
then the inner for loop will end without incrementing 'index'. This
means the outer loop will start at the same point finding it's available
and runs the inner loop again from the same index. This repeats forever.

Hence make sure we check we were at the end of ate array and return
an error in such case.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Found-by: Jeff Mahoney <jeffm@novell.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/sn/pci/pcibr/pcibr_ate.c

index 239b3cedcf2bfde7848aca3ecca03631c228d15e..5bc34eac9e0193b416d3d22690a75d6a63b7c719 100644 (file)
@@ -54,6 +54,8 @@ static int find_free_ate(struct ate_resource *ate_resource, int start,
                                        break;
                                }
                        }
+                       if (i >= ate_resource->num_ate)
+                               return -1;
                } else
                        index++;        /* Try next ate */
        }