mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Octavian Purdila <opurdila@ixiacom.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Cong Wang <amwang@redhat.com>, David Miller <davem@davemloft.net>,
	Linux Kernel Network Developers <netdev@vger.kernel.org>,
	Linux Kernel Developers <linux-kernel@vger.kernel.org>
Subject: Re: [net-next PATCH v4 1/3] sysctl: refactor integer handling proc code
Date: Thu, 18 Feb 2010 06:25:41 +0200	[thread overview]
Message-ID: <201002180325.41403.opurdila@ixiacom.com> (raw)
In-Reply-To: <m1zl37256o.fsf@fess.ebiederm.org>

On Wednesday 17 February 2010 15:33:03 you wrote:
> Cong Wang <amwang@redhat.com> writes:
> > Octavian Purdila wrote:
> >> On Tuesday 16 February 2010 15:09:51 you wrote:
> >>> Octavian Purdila wrote:
> >>>> On Tuesday 16 February 2010 10:41:07 you wrote:
> >>>>>> +static int proc_skip_wspace(char __user **buf, size_t *size)
> >>>>>> +{
> >>>>>> +     char c;
> >>>>>> +
> >>>>>> +     while (*size) {
> >>>>>> +             if (get_user(c, *buf))
> >>>>>> +                     return -EFAULT;
> >>>>>> +             if (!isspace(c))
> >>>>>> +                     break;
> >>>>>> +             (*size)--; (*buf)++;
> >>>>>> +     }
> >>>>>> +
> >>>>>> +     return 0;
> >>>>>> +}
> >>>>>
> >>>>> In lib/string.c we have skip_spaces(), I think we can use it
> >>>>> here instead of inventing another one.
> >>>>
> >>>> I'm afraid we can't, skip_spaces does not accept userspace buffers.
> >>>
> >>> Well, you need to use copy_from_user() before call it.
> >>
> >> And how much would you copy? You need to either use a stack buffer and
> >> do a loop copy or you would need to copy the whole userspace buffer
> >> which means we need to allocate a kernel buffer. I think its much
> >> cleaner the way is currently done.
> >
> > Yeah, maybe just a personal preference. :-/
> 
> There can be valid security reasons for copying all of the data before
> processing it.
> 

How so? I only know about security issues when you copy & process the same 
data more than one time.

And all existing code I've looked over (proc_dointvec, proc_dostring, 
bitmap_parse_user) does not copy all of the data. In fact the code in question 
here is just existing code moved to its own function.

There must be a reason for doing that, as copying whole buffer seems like a 
much simple implementation? (my guess is to avoid an extra allocation)

> Semantically if we an guarantee that we either have processed the
> entire buffer or failed the entire buffer and no changes have occurred
> in the kernel that seems like a much easier semantic to work with in
> user space.
> 

OK, but this is not how various proc routines currently handles it. For 
example proc_dointvec won't undo the changes for previous items when we get an 
error and I think for good reasons as I don't see a clean and generic way to 
do the undo stuff. 






  reply	other threads:[~2010-02-18  1:25 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-15 22:00 [net-next PATCH v4 0/3] net: reserve ports for applications using fixed port Octavian Purdila
2010-02-15 22:00 ` [net-next PATCH v4 1/3] sysctl: refactor integer handling proc code Octavian Purdila
2010-02-16  8:41   ` Cong Wang
2010-02-16 10:48     ` Octavian Purdila
2010-02-16 13:08       ` Cong Wang
2010-02-16 14:00         ` Octavian Purdila
2010-02-17 16:31           ` Cong Wang
2010-02-17 21:09             ` Octavian Purdila
2010-02-18  3:58       ` Octavian Purdila
2010-02-16 11:41     ` Octavian Purdila
2010-02-16 13:09       ` Cong Wang
2010-02-16 13:44         ` Octavian Purdila
2010-02-17 16:21           ` Cong Wang
2010-02-17 16:33             ` Eric W. Biederman
2010-02-18  4:25               ` Octavian Purdila [this message]
2010-02-15 22:00 ` [net-next PATCH v4 2/3] sysctl: add proc_dobitmap Octavian Purdila
2010-02-16  9:12   ` Cong Wang
2010-02-15 22:00 ` [net-next PATCH v4 3/3] net: reserve ports for applications using fixed port numbers Octavian Purdila
2010-02-16  9:37   ` Cong Wang
2010-02-16 11:06     ` Octavian Purdila
2010-02-16 13:06       ` Cong Wang
2010-02-16 13:20         ` Eric Dumazet
2010-02-17 16:13           ` Cong Wang
2010-02-17 16:39             ` Eric Dumazet
2010-02-17 16:01               ` Octavian Purdila
2010-02-20  8:00               ` Cong Wang
2010-02-16 14:25         ` Octavian Purdila
2010-02-17 16:07           ` Cong Wang
2010-02-16 17:25 ` [net-next PATCH v4 0/3] net: reserve ports for applications using fixed port Eric W. Biederman
2010-02-16 18:04   ` Octavian Purdila
2010-02-16 18:49     ` Eric W. Biederman
2010-02-16 19:51       ` Octavian Purdila
2010-02-16 20:08         ` Eric W. Biederman
2010-02-16 21:22           ` Octavian Purdila
2010-02-17 15:57             ` Cong Wang
2010-02-17 16:10               ` Eric W. Biederman
2010-02-17 16:19                 ` Cong Wang
2010-02-17 16:26                   ` Eric W. Biederman

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=201002180325.41403.opurdila@ixiacom.com \
    --to=opurdila@ixiacom.com \
    --cc=amwang@redhat.com \
    --cc=davem@davemloft.net \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@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

all inboxes | Powered by JetHome®