Messages in this thread | | | Date | Wed, 8 May 2019 11:47:32 +0300 | From | Andy Shevchenko <> | Subject | Re: [PATCH 4/7] lib: make bitmap_parse_user a wrapper on bitmap_parse |
| |
On Tue, Apr 30, 2019 at 06:06:33PM -0700, Yury Norov wrote: > Currently we parse user data byte after byte which leads to > overcomplicating of parsing algorithm. There are no performance > critical users of bitmap_parse_user(), and so we can duplicate > user data to kernel buffer and simply call bitmap_parselist(). > This rework lets us unify and simplify bitmap_parse() and > bitmap_parse_user(), which is done in the following patch. >
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Signed-off-by: Yury Norov <ynorov@marvell.com> > --- > lib/bitmap.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/lib/bitmap.c b/lib/bitmap.c > index f235434df87b..300732031fad 100644 > --- a/lib/bitmap.c > +++ b/lib/bitmap.c > @@ -434,22 +434,22 @@ EXPORT_SYMBOL(__bitmap_parse); > * then it must be terminated with a \0. > * @maskp: pointer to bitmap array that will contain result. > * @nmaskbits: size of bitmap, in bits. > - * > - * Wrapper for __bitmap_parse(), providing it with user buffer. > - * > - * We cannot have this as an inline function in bitmap.h because it needs > - * linux/uaccess.h to get the access_ok() declaration and this causes > - * cyclic dependencies. > */ > int bitmap_parse_user(const char __user *ubuf, > unsigned int ulen, unsigned long *maskp, > int nmaskbits) > { > - if (!access_ok(ubuf, ulen)) > - return -EFAULT; > - return __bitmap_parse((const char __force *)ubuf, > - ulen, 1, maskp, nmaskbits); > + char *buf; > + int ret; > > + buf = memdup_user_nul(ubuf, ulen); > + if (IS_ERR(buf)) > + return PTR_ERR(buf); > + > + ret = bitmap_parse(buf, ulen, maskp, nmaskbits); > + > + kfree(buf); > + return ret; > } > EXPORT_SYMBOL(bitmap_parse_user); > > -- > 2.17.1 >
-- With Best Regards, Andy Shevchenko
| |