From: Linus Torvalds <torvalds@linux-foundation.org>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
Neil Horman <nhorman@tuxdriver.com>,
Oleg Nesterov <oleg@redhat.com>
Subject: Re: Resource limits interface proposal [was: pull request for writable limits]
Date: Wed, 5 May 2010 08:08:46 -0700 (PDT) [thread overview]
Message-ID: <alpine.LFD.2.00.1005050757370.5478@i5.linux-foundation.org> (raw)
In-Reply-To: <4BE160C6.90404@gmail.com>
On Wed, 5 May 2010, Jiri Slaby wrote:
>
> So I ended up with thinking about these possibilities:
>
> 1) internal representation of limits will stay as is in signal_struct,
> i.e. long limits with infinity being ~0ul. This is the least intrusive
> solution. The new prlimit64 will convert rlimit64 to rlimit and pass
> down to do_prlimit. With setrlimit and getrilimit just as wrappers it
> will look like:
> prlimit64(pid, resource, new64, old64) ->
> new = convert_to_rlim(new64)
> tsk = find_task(pid)
> do_prlimit(tsk, resource, new, old)
> old64 = convert_to_rlim64(old)
> setrlimit(resource, rlim) ->
> do_prlimit(current, resource, rlim, NULL)
> getrlimit(resource, rlim) ->
> do_prlimit(current, resource, NULL, rlim)
> with appropriate copy_{from,to}_user. (And setrlimit+getrlimit will be
> scheduled for removal with all the compat crap around them.)
Yes, this sounds much better to me.
> It may also be that rlimit64 will contain flags like:
> #define RLIM64_CUR_INFINITY 0x00000001
> #define RLIM64_MAX_INFINITY 0x00000002
> struct rlimit64 {
> __u64 rlim_cur;
> __u64 rlim_max;
> __u32 flags;
> };
> if I understood Alexey correctly to separate limits values from
> infinity? flags then will be converted to ~0ul when converting from
> rlimit64 to rlimit above too.
Ok, I'm not entirely sure we need to care specially about INFINITY,
_especially_ since INF is really rather big in 64 bits. So to some degree,
making things 64-bit is _less_ likely to make INFINITIES a problem.
It's also impossible to convert back and forth reliably unless you were to
add this bit to the internal rlimit structure too. It sounds like a bad
design to have
prlimit64(-1, limit, &new, NULL);
prlimit64(-1, limit, NULL, &old);
result in "old" containing something different than "new".
Of course, if there are 32-bit/64-bit issues, the above can _never_ give
the same results for >= (1<<32) values, but that's a somewhat separate
issue, and is directly tied to the word-size, not some new internal flag.
> The drawback is when a 32-bit user passes down a value >= (1 << 32),
> EINVAL shall occur.
I'd almost prefer to just turn them into RLIMIT_MAX. If somebody asks for
a really huge limit that is bigger than the max we already have, doesn't
RLIMIT_MAX sound like the right thing?
> 2) Introduce an rlimit lock and move every user to the rlimit helpers
> which appropriately lock the accesses. And making locking a nop when
> BITS_PER_LONG == 64. Then we can have rlimit64 in signal_struct and
> everything will happen on 64-bit limit values.
I think long-term we might want to do this, but not as a first stage. And
if the 'infinity' flag makes sense, _and_ we decide that long-term we want
to do this, then I'm not objecting to adding it now.
> Just a side note, we cannot use the rlimit64 name which is already
> reserved in glibc headers for limits handling.
What does the glibc 'struct rlimit64' look like? It's the structure name
that matters, since the system call name would presumably be 'prlimit64()'
due to the pid thing.
And if the glibc rlimit64 matches what we would use, I think we can decide
to just re-use it.
Linus
next prev parent reply other threads:[~2010-05-05 15:11 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-07 16:52 [PULL] pull request for writable limits for 2.6.33-rc1 Jiri Slaby
2009-12-09 19:25 ` [PULL] pull request for writable limits for 2.6.33-rc0 Jiri Slaby
2009-12-11 11:05 ` [git pull -resend] " Jiri Slaby
2009-12-23 9:40 ` Jiri Slaby
2010-01-02 21:40 ` [PULL] " Jiri Kosina
2010-01-02 21:52 ` Ingo Molnar
2010-01-04 21:59 ` Jiri Kosina
2010-01-04 10:47 ` [PULL] pull request for limits FIXES for 2.6.33-rc Jiri Slaby
2010-01-04 10:48 ` [PATCH 1/3] SECURITY: selinux, fix update_rlimit_cpu parameter Jiri Slaby
2010-01-04 10:48 ` [PATCH 2/3] resource: move kernel function inside __KERNEL__ Jiri Slaby
2010-01-04 10:48 ` [PATCH 3/3] resource: add helpers for fetching rlimits Jiri Slaby
2010-01-05 15:50 ` [PATCH 1/3] SECURITY: selinux, fix update_rlimit_cpu parameter David Howells
2010-03-05 16:53 ` [git pull] pull request for writable limits for 2.6.34-rc0 Jiri Slaby
2010-03-20 19:20 ` Linus Torvalds
2010-03-21 1:45 ` Neil Horman
2010-03-21 6:06 ` Alexey Dobriyan
2010-03-21 18:38 ` Linus Torvalds
2010-03-24 17:02 ` Jiri Slaby
2010-04-14 9:31 ` Jiri Slaby
2010-05-05 12:12 ` Resource limits interface proposal [was: pull request for writable limits] Jiri Slaby
2010-05-05 15:08 ` Linus Torvalds [this message]
2010-05-06 6:39 ` Alexey Dobriyan
2010-05-06 15:37 ` Linus Torvalds
2010-05-07 8:55 ` [PATCH 01/11] rlimits: security, add task_struct to setrlimit Jiri Slaby
2010-05-07 8:55 ` [PATCH 02/11] rlimits: add task_struct to update_rlimit_cpu Jiri Slaby
2010-05-07 8:55 ` [PATCH 03/11] rlimits: make sure ->rlim_max never grows in sys_setrlimit Jiri Slaby
2010-05-07 8:55 ` [PATCH 04/11] rlimits: split sys_setrlimit Jiri Slaby
2010-05-07 8:55 ` [PATCH 05/11] rlimits: allow setrlimit to non-current tasks Jiri Slaby
2010-05-07 8:55 ` [PATCH 06/11] rlimits: do security check under task_lock Jiri Slaby
2010-05-07 8:55 ` [PATCH 07/11] rlimits: add rlimit64 structure Jiri Slaby
2010-05-07 8:55 ` [PATCH 08/11] rlimits: redo do_setrlimit to more generic do_prlimit Jiri Slaby
2010-05-07 8:55 ` [PATCH 09/11] rlimits: switch getrlimit to do_prlimit Jiri Slaby
2010-05-07 9:02 ` [PATCH v2 09/11] rlimits: switch more rlimit syscalls " Jiri Slaby
2010-05-07 9:05 ` Jiri Slaby
2010-05-07 8:55 ` [PATCH " Jiri Slaby
2010-05-07 8:55 ` [PATCH 10/11] rlimits: implement prlimit64 syscall Jiri Slaby
2010-05-07 8:55 ` [PATCH 11/11] unistd: add __NR_prlimit64 syscall numbers Jiri Slaby
2010-05-06 15:46 ` Resource limits interface proposal [was: pull request for writable limits] Jiri Slaby
2010-03-24 17:04 ` [git pull] pull request for writable limits for 2.6.34-rc0 Jiri Slaby
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=alpine.LFD.2.00.1005050757370.5478@i5.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=adobriyan@gmail.com \
--cc=jirislaby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nhorman@tuxdriver.com \
--cc=oleg@redhat.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 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®