diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-15 15:46:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-15 15:46:16 -0400 |
commit | c596cc46ba1c5769866efe586daff3422bc31afe (patch) | |
tree | 080f0fc2fc91d6b37f1cf2992bab3d6720c748e1 /drivers/scsi | |
parent | f4921aff5b174349bc36551f142a5dbac782ea3f (diff) |
scsi/gdth: fix crash in gdth_timeout if no gdth controllers found
If the gdth module is loaded (or compiled in), the gdth_timeout function
gets started even if no actual gdth controllers are found b the probing.
That ends up not only being unnecessary, but also causes a crash due to
the function blindly just trying to pick the first entry off the
"gdth_instances" list, and accessing it - which obviously doesn't work
if the list is empty!
Noticed by Ingo Molnar.
Tested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/gdth.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index e8010a702e73..3ac080ee6e2f 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c | |||
@@ -5213,6 +5213,10 @@ static int __init gdth_init(void) | |||
5213 | #endif /* CONFIG_PCI */ | 5213 | #endif /* CONFIG_PCI */ |
5214 | 5214 | ||
5215 | TRACE2(("gdth_detect() %d controller detected\n", gdth_ctr_count)); | 5215 | TRACE2(("gdth_detect() %d controller detected\n", gdth_ctr_count)); |
5216 | |||
5217 | if (list_empty(&gdth_instances)) | ||
5218 | return -ENODEV; | ||
5219 | |||
5216 | #ifdef GDTH_STATISTICS | 5220 | #ifdef GDTH_STATISTICS |
5217 | TRACE2(("gdth_detect(): Initializing timer !\n")); | 5221 | TRACE2(("gdth_detect(): Initializing timer !\n")); |
5218 | init_timer(&gdth_timer); | 5222 | init_timer(&gdth_timer); |