From patchwork Tue Oct 21 02:00:48 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: ext4: simple_strtol returns signed. From: roel kluin X-Patchwork-Id: 5134 Message-Id: <48FD37D0.6030509@gmail.com> To: Theodore Tso Cc: linux-ext4@vger.kernel.org Date: Mon, 20 Oct 2008 22:00:48 -0400 simple_strtol returns signed, but a negative return values is lost when stored in an unsigned. As suggested use simple_strtoul() instead. Signed-off-by: Roel Kluin --- Since p is dereferenced with the unsigned long return of simple_strtoul, I think p should be a pointer to an unsigned long, am I wrong? -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 9b2b2bc..0ab6cb4 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -3514,18 +3514,15 @@ static int ext4_ui_proc_open(struct inode *inode, struct file *file) static ssize_t ext4_ui_proc_write(struct file *file, const char __user *buf, size_t cnt, loff_t *ppos) { - unsigned int *p = PDE(file->f_path.dentry->d_inode)->data; + unsigned long *p = PDE(file->f_path.dentry->d_inode)->data; char str[32]; - unsigned long value; if (cnt >= sizeof(str)) return -EINVAL; if (copy_from_user(str, buf, cnt)) return -EFAULT; - value = simple_strtol(str, NULL, 0); - if (value < 0) - return -ERANGE; - *p = value; + + *p = simple_strtoul(str, NULL, 0); return cnt; }