All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Kumar Gaurav <kumargauravgupta3@gmail.com>
Cc: kernel-janitors@vger.kernel.org,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org
Subject: Re: Clarification needed on use of put_user inside a loop
Date: Fri, 25 Apr 2014 21:34:14 +0000	[thread overview]
Message-ID: <20140425213414.GC18016@ZenIV.linux.org.uk> (raw)
In-Reply-To: <535A88D5.3030008@gmail.com>

On Fri, Apr 25, 2014 at 09:39:57PM +0530, Kumar Gaurav wrote:

> I have  found some codes in the driver which use put_user() in loop.
> Can we avoid the overhead of checking the same memory area( where
> put_user() writes) again n again using __put_user() in side loop and
> checking permission using access_ok before entering the loop?

>                         if (put_user(type, dst) ||
>                             put_user(chs_bytes, dst + 1))
>                                 return -EFAULT;
>                         dst += 2;
			  ^^^^^^^^^
Note that increment.  It's *not* "the same memory area" next time
around.  Sure, you can check the whole range once before the loop
and switch the stuff inside to __put_user()/__copy_to_user(), but
it's not guaranteed to buy you any speedup.

BTW, you might be a bit confused about the work done by access_ok() - e.g.
on an architectures with separate kernel and userland MMU contexts it might
very well be a no-op (always return true).  It's *not* checking if user has
permissions of some sort.

WARNING: multiple messages have this Message-ID (diff)
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Kumar Gaurav <kumargauravgupta3@gmail.com>
Cc: kernel-janitors@vger.kernel.org,
	Dan Carpenter <dan.carpenter@oracle.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org
Subject: Re: Clarification needed on use of put_user inside a loop
Date: Fri, 25 Apr 2014 22:34:14 +0100	[thread overview]
Message-ID: <20140425213414.GC18016@ZenIV.linux.org.uk> (raw)
In-Reply-To: <535A88D5.3030008@gmail.com>

On Fri, Apr 25, 2014 at 09:39:57PM +0530, Kumar Gaurav wrote:

> I have  found some codes in the driver which use put_user() in loop.
> Can we avoid the overhead of checking the same memory area( where
> put_user() writes) again n again using __put_user() in side loop and
> checking permission using access_ok before entering the loop?

>                         if (put_user(type, dst) ||
>                             put_user(chs_bytes, dst + 1))
>                                 return -EFAULT;
>                         dst += 2;
			  ^^^^^^^^^
Note that increment.  It's *not* "the same memory area" next time
around.  Sure, you can check the whole range once before the loop
and switch the stuff inside to __put_user()/__copy_to_user(), but
it's not guaranteed to buy you any speedup.

BTW, you might be a bit confused about the work done by access_ok() - e.g.
on an architectures with separate kernel and userland MMU contexts it might
very well be a no-op (always return true).  It's *not* checking if user has
permissions of some sort.

  parent reply	other threads:[~2014-04-25 21:34 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-25 16:09 Clarification needed on use of put_user inside a loop Kumar Gaurav
2014-04-25 16:21 ` Kumar Gaurav
2014-04-25 19:05 ` Mateusz Guzik
2014-04-25 19:05   ` Mateusz Guzik
2014-04-25 21:34 ` Al Viro [this message]
2014-04-25 21:34   ` Al Viro

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=20140425213414.GC18016@ZenIV.linux.org.uk \
    --to=viro@zeniv.linux.org.uk \
    --cc=dan.carpenter@oracle.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=kumargauravgupta3@gmail.com \
    --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 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.