FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Device-mapper Development

 
 
LinkBack Thread Tools
 
Old 02-04-2010, 06:37 AM
Nikanth Karthikesan
 
Default dm-stripe: return -EINVAL if stripe count is zero

If zero is passed as stripe count to the stripe_ctr, it segfaults with
a divide by zero error.

divide error: 0000 [#1] PREEMPT SMP
last sysfs file: /sys/kernel/uevent_seqnum
CPU 1
Pid: 3252, comm: dmsetup Not tainted 2.6.33-rc5-9-default #3 /
RIP: 0010:[<ffffffffa00e6ad7>] [<ffffffffa00e6ad7>] stripe_ctr+0xd5/0x28d [dm_mod]
RSP: 0018:ffff88003cb7dce8 EFLAGS: 00010246
RAX: 0000000000000400 RBX: 0000000000000200 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffff88003cb7dd08 RDI: ffffc900008fb165
RBP: ffff88003cb7dd38 R08: 0000000000000200 R09: 000000000000000a
R10: ffffffffa00ec630 R11: ffffffffa00ec638 R12: 0000000000000004
R13: 0000000000000200 R14: ffffc900008f0040 R15: 0000000000000000
FS: 00007f9551621780(0000) GS:ffff880003600000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f95514f7000 CR3: 00000000343c9000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process dmsetup (pid: 3252, threadinfo ffff88003cb7c000, task ffff880034004f40)
Stack:
ffff88003cb7dd38 ffff88003d8d0400 ffff88003cb7dd60 ffffc900008f0040
<0> ffffc900008fb165 0000000000000400 ffffc900008f0040 0000000000000000
<0> ffff88003d8d0200 ffffc900008fb150 ffff88003cb7dd98 ffffffffa00e5dec
Call Trace:
[<ffffffffa00e5dec>] dm_table_add_target+0x152/0x1cf [dm_mod]
[<ffffffffa00e7cca>] table_load+0x257/0x266 [dm_mod]
[<ffffffffa00e7a73>] ? table_load+0x0/0x266 [dm_mod]
[<ffffffffa00e89c6>] ctl_ioctl+0x1ce/0x226 [dm_mod]
[<ffffffff8106a218>] ? sched_clock_cpu+0xe3/0xeb
[<ffffffffa00e8a2c>] dm_ctl_ioctl+0xe/0x12 [dm_mod]
[<ffffffff81117c08>] vfs_ioctl+0x2a/0x9e
[<ffffffff811181bd>] do_vfs_ioctl+0x4b7/0x4f4
[<ffffffff81306b3a>] ? _raw_spin_unlock_irqrestore+0x76/0x92
[<ffffffff811bbe57>] ? __up_write+0x12d/0x13c
[<ffffffff81306f39>] ? retint_swapgs+0x13/0x1b
[<ffffffff8111824f>] sys_ioctl+0x55/0x77
[<ffffffff81002d82>] system_call_fastpath+0x16/0x1b
Code: 07 77 0a 49 c7 46 38 14 b2 0e a0 eb 9f 49 8b 56 18 8d 43 ff 48 85 d0 74 0a 49 c7 46 38 27 b2 0e a0 eb 89 48 89 d0 44 89 f9 31 d2 <48> f7 f1 44 89 7d c4 48 85 d2 48
89 45 b0 74 0d 49 c7 46 38 51
RIP [<ffffffffa00e6ad7>] stripe_ctr+0xd5/0x28d [dm_mod]
RSP <ffff88003cb7dce8>
---[ end trace fa87918cd9541274 ]---

This patch returns -EINVAL, if zero is passed as stripe count.

With this patch we get the following error message.
device-mapper: table: 253:0: striped: Invalid stripe count
device-mapper: ioctl: error adding target to table

And dmsetup exits gracefully with following error message.
device-mapper: reload ioctl failed: Invalid argument
Command failed

Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>

---

diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
index e0efc1a..bd58703 100644
--- a/drivers/md/dm-stripe.c
+++ b/drivers/md/dm-stripe.c
@@ -110,7 +110,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
}

stripes = simple_strtoul(argv[0], &end, 10);
- if (*end) {
+ if (!stripes || *end) {
ti->error = "Invalid stripe count";
return -EINVAL;
}

--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
 

Thread Tools




All times are GMT. The time now is 07:56 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org