From: Andrew Morton <akpm@linux-foundation.org>
To: David Howells <dhowells@redhat.com>
Cc: torvalds@linux-foundation.org, kwc@citi.umich.edu,
arunsr@cse.iitk.ac.in, dwalsh@redhat.com,
linux-security-module@vger.kernel.org, dhowells@redhat.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] KEYS: Make the keyring quotas controllable through /proc/sys
Date: Thu, 13 Mar 2008 15:28:50 -0700 [thread overview]
Message-ID: <20080313152850.c76ab240.akpm@linux-foundation.org> (raw)
In-Reply-To: <20080313191442.28959.28152.stgit@warthog.procyon.org.uk>
On Thu, 13 Mar 2008 19:14:42 +0000
David Howells <dhowells@redhat.com> wrote:
> Make the keyring quotas controllable through /proc/sys files:
>
> (*) /proc/sys/kernel/keys/root_maxkeys
> /proc/sys/kernel/keys/root_maxbytes
>
> Maximum number of keys that root may have and the maximum total number of
> bytes of data that root may have stored in those keys.
>
> (*) /proc/sys/kernel/keys/maxkeys
> /proc/sys/kernel/keys/maxbytes
>
> Maximum number of keys that each non-root user may have and the maximum
> total number of bytes of data that each of those users may have stored in
> their keys.
>
> Also increase the quotas as a number of people have been complaining that it's
> not big enough. I'm not sure that it's big enough now either, but on the
> other hand, it can now be set in /etc/sysctl.conf.
>
> ...
>
> --- a/include/linux/key.h
> +++ b/include/linux/key.h
> @@ -19,6 +19,7 @@
> #include <linux/list.h>
> #include <linux/rbtree.h>
> #include <linux/rcupdate.h>
> +#include <linux/sysctl.h>
> #include <asm/atomic.h>
>
> #ifdef __KERNEL__
> @@ -265,6 +266,10 @@ extern struct key *key_lookup(key_serial_t id);
>
> #define key_serial(key) ((key) ? (key)->serial : 0)
err, why was that a macro? It could have been implemented as an inline.
One which doesn't evaluate its argument twice (or once if it was -1).
> +#ifdef CONFIG_SYSCTL
> +extern ctl_table key_sysctls[];
> +#endif
I've been going around telling people to not bother with the ifdefs here.
Upside: looks nicer. Downside: defers the build error from compile-time to
link-time.
>
> +/*
> + * key quota limits
> + * - root has its own separate limits to everyone else
> + */
> +extern unsigned key_quota_root_maxkeys;
> +extern unsigned key_quota_root_maxbytes;
> +extern unsigned key_quota_maxkeys;
> +extern unsigned key_quota_maxbytes;
> +
> +#define KEYQUOTA_LINK_BYTES 4 /* a link in a keyring is worth 4 bytes */
>
>
> extern struct rb_root key_serial_tree;
> diff --git a/security/keys/key.c b/security/keys/key.c
> index 46f125a..14948cf 100644
> --- a/security/keys/key.c
> +++ b/security/keys/key.c
> @@ -27,6 +27,11 @@ DEFINE_SPINLOCK(key_serial_lock);
> struct rb_root key_user_tree; /* tree of quota records indexed by UID */
> DEFINE_SPINLOCK(key_user_lock);
>
> +unsigned int key_quota_root_maxkeys = 200; /* root's key count quota */
> +unsigned int key_quota_root_maxbytes = 20000; /* root's key space quota */
> +unsigned int key_quota_maxkeys = 200; /* general key count quota */
> +unsigned int key_quota_maxbytes = 20000; /* general key space quota */
> +
> static LIST_HEAD(key_types_list);
> static DECLARE_RWSEM(key_types_sem);
>
> @@ -236,11 +241,16 @@ struct key *key_alloc(struct key_type *type, const char *desc,
> /* check that the user's quota permits allocation of another key and
> * its description */
> if (!(flags & KEY_ALLOC_NOT_IN_QUOTA)) {
> + unsigned maxkeys = (uid == 0) ?
> + key_quota_root_maxkeys : key_quota_maxkeys;
> + unsigned maxbytes = (uid == 0) ?
> + key_quota_root_maxbytes : key_quota_maxbytes;
open-coded knowledge of uid==0 might be problematic for containerisation.
Maybe it's on the containers team's radar, maybe it's actually not a
problem, don't know. (adds cc).
next prev parent reply other threads:[~2008-03-13 22:31 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-13 19:14 [PATCH 1/3] KEYS: Allow clients to set key perms in key_create_or_update() David Howells
2008-03-13 19:14 ` [PATCH 2/3] KEYS: Don't generate user and user session keyrings unless they're accessed David Howells
2008-03-13 22:20 ` Andrew Morton
2008-03-14 2:30 ` David Howells
2008-03-13 19:14 ` [PATCH 3/3] KEYS: Make the keyring quotas controllable through /proc/sys David Howells
2008-03-13 22:28 ` Andrew Morton [this message]
2008-03-14 2:39 ` David Howells
2008-03-14 11:46 ` David Howells
2008-03-13 22:47 ` Andrew Morton
2008-03-14 2:30 ` David Howells
2008-03-19 0:04 ` Andrew Morton
2008-03-19 11:19 ` David Howells
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=20080313152850.c76ab240.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=arunsr@cse.iitk.ac.in \
--cc=dhowells@redhat.com \
--cc=dwalsh@redhat.com \
--cc=kwc@citi.umich.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=torvalds@linux-foundation.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.