All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@osdl.org>
To: Joe Korty <joe.korty@ccur.com>
Cc: Reinette Chatre <reinette.chatre@linux.intel.com>,
	linux-kernel@vger.kernel.org,
	Inaky Perez-Gonzalez <inaky@linux.intel.com>,
	Paul Jackson <pj@sgi.com>
Subject: Re: [PATCH] bitmap: bitmap_parse takes a kernel buffer instead of a user buffer
Date: Wed, 4 Oct 2006 09:40:29 -0700	[thread overview]
Message-ID: <20061004094029.cdfef098.akpm@osdl.org> (raw)
In-Reply-To: <20061004141405.GA22833@tsunami.ccur.com>

On Wed, 4 Oct 2006 10:14:05 -0400
Joe Korty <joe.korty@ccur.com> wrote:

> On Tue, Oct 03, 2006 at 04:39:36PM -0700, Andrew Morton wrote:
> > On Tue, 3 Oct 2006 08:16:27 -0700
> > Reinette Chatre <reinette.chatre@linux.intel.com> wrote:
> > 
> > > lib/bitmap.c:bitmap_parse() is a library function that received as
> > > input a  user buffer. This seemed to have originated from the way the
> > > write_proc function of the /proc filesystem operates.
> > > 
> > > This function will be useful for other uses as well;
> > > for example, taking input  for /sysfs instead of /proc,
> > > so it was changed to accept kernel buffers. We have this
> > > use for the Linux UWB project, as part as the upcoming
> > > bandwidth allocator code.
> > > 
> > > Only a few routines used this function and they were changed too.
> > 
> > Fair enough.  But this: [ ... ] is sending us a message ;)
> > 
> > How about adding a new bitmap_parse_user() (and cpumask_parse_user())
> > which does the above?
> 
> 
> I am slightly concerned about using a kmalloc where 'count' is specified
> by userspace.  There might be a DoS attack in here somewhere.....

spose so.  It would allow an unprivileged app to force lots of order-3
allocations, which can make page reclaim do a lot of work.  Still...

> Perhaps we can reverse Andrew's idea: rename the existing bitmap_parse
> to bitmap_parse_user, then make the kernel-buffer version, bitmap_parse,
> be a wrapper around that.
> 

I think we can do a version which omits the kmalloc altogether:


/*
 * insert suitable comment here
 */
int bitmap_parse_kernel(const char *ubuf, unsigned int ubuflen,
        unsigned long *maskp, int nmaskbits)
{
	int c, old_c, totaldigits, ndigits, nchunks, nbits;
	u32 chunk;

	bitmap_zero(maskp, nmaskbits);

	nchunks = nbits = totaldigits = c = 0;
	do {
		chunk = ndigits = 0;

		/* Get the next chunk of the bitmap */
		while (ubuflen) {
			old_c = c;
			if (__get_user(c, ubuf++))
				return -EFAULT;

(Note the s/get_user/__get_user/)

int bitmap_parse_user(const char __user *ubuf, unsigned int ubuflen,
        unsigned long *maskp, int nmaskbits)
{
	if (!access_ok(VERIFY_READ, ubuf, ubuflen))
		return -EFAULT;
	return bitmap_parse_kernel((const char *)ubuf, ubuflen,
					maskp, nmaskbits);
}

(Does typecasting a __user char * to a char * make sparse happy?)

  parent reply	other threads:[~2006-10-04 16:40 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-03 15:16 [PATCH] bitmap: bitmap_parse takes a kernel buffer instead of a user buffer Reinette Chatre
2006-10-03 15:20 ` inaky
2006-10-03 23:39 ` Andrew Morton
2006-10-04  2:03   ` Paul Jackson
2006-10-04 14:14   ` Joe Korty
2006-10-04 14:27     ` Paul Jackson
2006-10-04 14:55       ` Joe Korty
2006-10-04 15:06         ` Paul Jackson
2006-10-04 15:52           ` inaky
2006-10-04 16:40     ` Andrew Morton [this message]
2006-10-04 17:14       ` Joe Korty
2006-10-04 17:57         ` Inaky Perez-Gonzalez

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=20061004094029.cdfef098.akpm@osdl.org \
    --to=akpm@osdl.org \
    --cc=inaky@linux.intel.com \
    --cc=joe.korty@ccur.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pj@sgi.com \
    --cc=reinette.chatre@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.