From: NeilBrown <neilb@suse.de>
To: Andrew Morton <akpm@osdl.org>
Cc: Don Dupuis <dondster@gmail.com>,
linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 001 of 2] md: Fix possible oops when starting a raid0 array
Date: Mon, 22 May 2006 16:18:50 +1000 [thread overview]
Message-ID: <1060522061850.2849@suse.de> (raw)
In-Reply-To: 20060522161259.2792.patches@notabene
This loop that sets up the hash_table has problems.
Careful examination will show that the last time through, everything
but the first line is pointless. This is because all it does is
change 'cur' and 'size' and neither of these are used after
the loop. This should ring warning bells...
That last time through the loop,
size += conf->strip_zone[cur].size
can index off the end of the strip_zone array.
Depending on what it finds there, it might exit the loop cleanly,
or it might spin going further and further beyond the array until
it hits an unmapped address.
This patch rearranges the code so that the last, pointless, iteration
of the loop never happens. i.e. the one statement of the last loop
that is needed is moved the the end of the previous loop - or to
before the loop starts - and the loop counter starts from 1
instead of 0.
Cc: "Don Dupuis" <dondster@gmail.com>
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output
./drivers/md/raid0.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff ./drivers/md/raid0.c~current~ ./drivers/md/raid0.c
--- ./drivers/md/raid0.c~current~ 2006-05-22 15:33:05.000000000 +1000
+++ ./drivers/md/raid0.c 2006-05-22 15:35:01.000000000 +1000
@@ -331,13 +331,14 @@ static int raid0_run (mddev_t *mddev)
goto out_free_conf;
size = conf->strip_zone[cur].size;
- for (i=0; i< nb_zone; i++) {
- conf->hash_table[i] = conf->strip_zone + cur;
+ conf->hash_table[0] = conf->strip_zone + cur;
+ for (i=1; i< nb_zone; i++) {
while (size <= conf->hash_spacing) {
cur++;
size += conf->strip_zone[cur].size;
}
size -= conf->hash_spacing;
+ conf->hash_table[i] = conf->strip_zone + cur;
}
if (conf->preshift) {
conf->hash_spacing >>= conf->preshift;
next prev parent reply other threads:[~2006-05-22 6:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-22 6:18 [PATCH 000 of 2] md: Introduction NeilBrown
2006-05-22 6:18 ` NeilBrown [this message]
2006-05-22 6:18 ` [PATCH 002 of 2] md: Make sure bi_max_vecs is set properly in bio_split NeilBrown
2006-05-22 7:02 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1060522061850.2849@suse.de \
--to=neilb@suse.de \
--cc=akpm@osdl.org \
--cc=dondster@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-raid@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).