From: Alexey Dobriyan <adobriyan@gmail.com>
To: akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 07/10] parse_integer: convert misc fs/ code
Date: Sat, 2 May 2015 03:56:55 +0300 [thread overview]
Message-ID: <20150502005655.GG21655@p183.telecom.by> (raw)
In-Reply-To: <20150502004714.GA21655@p183.telecom.by>
Convert random fs/ code away from simple_strto*() interfaces.
Note about "struct simple_attr" conversion:
->set_buf is unneeded because everything can be done from stack.
->get_buf is useless as well, but that's a separate patch.
Mutex is not removed, as it may guard readers from writers,
separate story as well.
(code has been copied to arch/powerpc/.../spufs/, don't forget!)
binfmt_misc: file offset can't really be negative, type changed.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
fs/binfmt_misc.c | 12 +++++++++---
fs/dcache.c | 2 +-
fs/inode.c | 2 +-
fs/libfs.c | 26 ++++++++++----------------
fs/namespace.c | 4 ++--
5 files changed, 23 insertions(+), 23 deletions(-)
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -47,7 +47,7 @@ enum {Enabled, Magic};
typedef struct {
struct list_head list;
unsigned long flags; /* type, status, etc. */
- int offset; /* offset of magic */
+ unsigned int offset; /* offset of magic */
int size; /* size of magic/mask */
char *magic; /* magic or filename extension */
char *mask; /* mask, NULL for exact match */
@@ -370,7 +370,13 @@ static Node *create_entry(const char __user *buffer, size_t count)
if (!s)
goto einval;
*s++ = '\0';
- e->offset = simple_strtoul(p, &p, 10);
+ err = parse_integer(p, 10, &e->offset);
+ if (err < 0) {
+ kfree(e);
+ goto out;
+
+ }
+ p += err;
if (*p++)
goto einval;
pr_debug("register: offset: %#x\n", e->offset);
@@ -548,7 +554,7 @@ static void entry_status(Node *e, char *page)
if (!test_bit(Magic, &e->flags)) {
sprintf(dp, "extension .%s\n", e->magic);
} else {
- dp += sprintf(dp, "offset %i\nmagic ", e->offset);
+ dp += sprintf(dp, "offset %u\nmagic ", e->offset);
dp = bin2hex(dp, e->magic, e->size);
if (e->mask) {
dp += sprintf(dp, "\nmask ");
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -3374,7 +3374,7 @@ static int __init set_dhash_entries(char *str)
{
if (!str)
return 0;
- dhash_entries = simple_strtoul(str, &str, 0);
+ parse_integer(str, 0, &dhash_entries);
return 1;
}
__setup("dhash_entries=", set_dhash_entries);
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1787,7 +1787,7 @@ static int __init set_ihash_entries(char *str)
{
if (!str)
return 0;
- ihash_entries = simple_strtoul(str, &str, 0);
+ parse_integer(str, 0, &ihash_entries);
return 1;
}
__setup("ihash_entries=", set_ihash_entries);
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -752,7 +752,6 @@ struct simple_attr {
int (*get)(void *, u64 *);
int (*set)(void *, u64);
char get_buf[24]; /* enough to store a u64 and "\n\0" */
- char set_buf[24];
void *data;
const char *fmt; /* format for read operation */
struct mutex mutex; /* protects access to these buffers */
@@ -830,31 +829,26 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf,
size_t len, loff_t *ppos)
{
struct simple_attr *attr;
- u64 val;
- size_t size;
- ssize_t ret;
+ s64 val;
+ int ret;
attr = file->private_data;
if (!attr->set)
return -EACCES;
+ ret = kstrtos64_from_user(buf, len, 0, &val);
+ if (ret < 0)
+ return ret;
+
ret = mutex_lock_interruptible(&attr->mutex);
if (ret)
return ret;
-
- ret = -EFAULT;
- size = min(sizeof(attr->set_buf) - 1, len);
- if (copy_from_user(attr->set_buf, buf, size))
- goto out;
-
- attr->set_buf[size] = '\0';
- val = simple_strtoll(attr->set_buf, NULL, 0);
ret = attr->set(attr->data, val);
- if (ret == 0)
- ret = len; /* on success, claim we got the whole input */
-out:
mutex_unlock(&attr->mutex);
- return ret;
+ if (ret < 0)
+ return ret;
+ /* on success, claim we got the whole input */
+ return len;
}
EXPORT_SYMBOL_GPL(simple_attr_write);
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -37,7 +37,7 @@ static int __init set_mhash_entries(char *str)
{
if (!str)
return 0;
- mhash_entries = simple_strtoul(str, &str, 0);
+ parse_integer(str, 0, &mhash_entries);
return 1;
}
__setup("mhash_entries=", set_mhash_entries);
@@ -47,7 +47,7 @@ static int __init set_mphash_entries(char *str)
{
if (!str)
return 0;
- mphash_entries = simple_strtoul(str, &str, 0);
+ parse_integer(str, 0, &mphash_entries);
return 1;
}
__setup("mphash_entries=", set_mphash_entries);
next prev parent reply other threads:[~2015-05-02 0:57 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-02 0:47 [PATCH 01/10] Add parse_integer() (replacement for simple_strto*()) Alexey Dobriyan
2015-05-02 0:48 ` [PATCH 02/10] parse_integer: rewrite kstrto*() Alexey Dobriyan
2015-05-02 0:50 ` [PATCH 03/10] parse_integer: convert sscanf() Alexey Dobriyan
2015-05-02 1:10 ` [PATCH CORRECT " Alexey Dobriyan
2015-05-02 0:51 ` [PATCH 04/10] sscanf: fix overflow Alexey Dobriyan
2015-05-05 9:51 ` Rasmus Villemoes
2015-05-05 11:10 ` Alexey Dobriyan
2015-05-06 7:49 ` Rasmus Villemoes
2015-05-02 0:53 ` [PATCH 05/10] parse_integer: convert lib/ Alexey Dobriyan
2015-05-04 14:10 ` Rasmus Villemoes
2015-05-04 14:57 ` Alexey Dobriyan
2015-05-02 0:55 ` [PATCH 06/10] parse_integer: convert mm/ Alexey Dobriyan
2015-05-04 14:33 ` Rasmus Villemoes
2015-05-04 15:09 ` Alexey Dobriyan
2015-05-02 0:56 ` Alexey Dobriyan [this message]
2015-05-02 0:59 ` [PATCH 08/10] fs/cachefiles/: convert to parse_integer() Alexey Dobriyan
2015-05-02 1:01 ` [PATCH 09/10] ocfs2: convert to parse_integer()/kstrto*() Alexey Dobriyan
2015-05-02 1:03 ` [PATCH 10/10] ext2, ext3, ext4: " Alexey Dobriyan
2015-05-04 13:24 ` [PATCH 01/10] Add parse_integer() (replacement for simple_strto*()) Rasmus Villemoes
2015-05-04 14:32 ` Alexey Dobriyan
2015-05-04 16:44 ` Rasmus Villemoes
2015-05-04 19:54 ` Alexey Dobriyan
2015-05-04 21:48 ` Rasmus Villemoes
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=20150502005655.GG21655@p183.telecom.by \
--to=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@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).