From: Seth Arnold <seth.arnold-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
To: "Eric W. Biederman" <ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
Cc: "Linux Containers"
<containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
Pkg-shadow-devel-XbBxUvOt3X2LieD7tvxI8l/i77bcL1HB@public.gmane.org,
"Michael Kerrisk (man-pages)"
<mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"Nicolas François"
<nicolas.francois-Fa7rcPG4DJn7nK0/Xc0eeg@public.gmane.org>
Subject: Re: [PATCH 05/11] Implement find_new_sub_uids find_new_sub_gids
Date: Fri, 14 Jun 2013 17:15:31 -0700 [thread overview]
Message-ID: <20130615001531.GB32705@hunt> (raw)
In-Reply-To: <87ehhdpoag.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> <87fw1tr33a.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 4956 bytes --]
My apologies for the lateness of my reply; I have a few small thoughts
about these patches.
On Tue, Jan 22, 2013 at 01:15:05AM -0800, Eric W. Biederman wrote:
> Functions for finding new subordinate uid and gids ranges for use
> with useradd.
>
> [...]
>
> +int find_new_sub_gids (const char *owner,
> + gid_t *range_start, unsigned long *range_count)
> +{
> + unsigned long min, max;
> + unsigned long count;
> + gid_t start;
> +
> + assert (range_start != NULL);
> + assert (range_count != NULL);
> +
> + min = getdef_ulong ("SUB_GID_MIN", 100000UL);
> + max = getdef_ulong ("SUB_GID_MAX", 600100000UL);
> + count = getdef_ulong ("SUB_GID_COUNT", 10000);
I'd like to see a quick
if (min >= max || count >= max || (min + count) >= max) {
/* fail loudly */
}
right here. The sanity of the rest of the function depends upon these
invariants.
> +
> + /* Is there a preferred range that works? */
> + if ((*range_count != 0) &&
> + (*range_start >= min) &&
> + (((*range_start) + (*range_count) - 1) <= max) &&
> + is_sub_gid_range_free(*range_start, *range_count)) {
> + return 0;
> + }
> +
> + if (max < (min + count)) {
> + (void) fprintf (stderr,
> + _("%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu)\n"),
> + Prog, min, max);
> + return -1;
> + }
> + start = sub_gid_find_free_range(min, max, count);
> + if (start == (gid_t)-1) {
> + fprintf (stderr,
> + _("%s: Can't get unique secondary GID range\n"),
> + Prog);
> + SYSLOG ((LOG_WARN, "no more available secondary GIDs on the system"));
> + return -1;
> + }
> + *range_start = start;
> + *range_count = count;
> + return 0;
> +}
> +
> diff --git a/libmisc/find_new_sub_uids.c b/libmisc/find_new_sub_uids.c
> new file mode 100644
> index 0000000..f1720f9
> --- /dev/null
> +++ b/libmisc/find_new_sub_uids.c
>
> [...]
>
> +/*
> + * find_new_sub_uids - Find a new unused range of UIDs.
> + *
> + * If successful, find_new_sub_uids provides a range of unused
> + * user IDs in the [SUB_UID_MIN:SUB_UID_MAX] range.
> + *
> + * Return 0 on success, -1 if no unused UIDs are available.
> + */
> +int find_new_sub_uids (const char *owner,
> + uid_t *range_start, unsigned long *range_count)
> +{
> + unsigned long min, max;
> + unsigned long count;
> + uid_t start;
> +
> + assert (range_start != NULL);
> + assert (range_count != NULL);
> +
> + min = getdef_ulong ("SUB_UID_MIN", 100000UL);
> + max = getdef_ulong ("SUB_UID_MAX", 600100000UL);
> + count = getdef_ulong ("SUB_UID_COUNT", 10000);
Same here, of course.
> + /* Is there a preferred range that works? */
> + if ((*range_count != 0) &&
> + (*range_start >= min) &&
> + (((*range_start) + (*range_count) - 1) <= max) &&
> + is_sub_uid_range_free(*range_start, *range_count)) {
> + return 0;
> + }
> +
> + if (max < (min + count)) {
> + (void) fprintf (stderr,
> + _("%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu)\n"),
> + Prog, min, max);
> + return -1;
> + }
> + start = sub_uid_find_free_range(min, max, count);
> + if (start == (uid_t)-1) {
> + fprintf (stderr,
> + _("%s: Can't get unique secondary UID range\n"),
> + Prog);
> + SYSLOG ((LOG_WARN, "no more available secondary UIDs on the system"));
> + return -1;
> + }
> + *range_start = start;
> + *range_count = count;
> + return 0;
> +}
On Tue, Jan 22, 2013 at 01:20:07AM -0800, Eric W. Biederman wrote:
> +struct map_range *get_map_ranges(int ranges, int argc, char **argv)
> +{
> + struct map_range *mappings, *mapping;
> + int idx, argidx;
> +
> + if ((ranges * 3) > argc) {
> + fprintf(stderr, "ranges: %u argc: %d\n",
> + ranges, argc);
> + fprintf(stderr,
> + _( "%s: Not enough arguments to form %u mappings\n"),
> + Prog, ranges);
> + return NULL;
> + }
If 'ranges' is large enough, 3*ranges can wrap around to be less than
'argc', pass this test, and continue to the for loop below, which could
scribble all over memory until running into an unmapped page.
The current use appears safe, and I don't see how this could be exploited
even if it weren't currently safe, but I'd really like to see this test
re-written in a way that does not allow wraparound.
> + mappings = calloc(ranges, sizeof(*mappings));
> + if (!mappings) {
> + fprintf(stderr, _( "%s: Memory allocation failure\n"),
> + Prog);
> + exit(EXIT_FAILURE);
> + }
> +
> + /* Gather up the ranges from the command line */
> + mapping = mappings;
> + for (idx = 0; idx < ranges; idx++, argidx += 3, mapping++) {
> + if (!getulong(argv[argidx + 0], &mapping->upper))
> + return NULL;
> + if (!getulong(argv[argidx + 1], &mapping->lower))
> + return NULL;
> + if (!getulong(argv[argidx + 2], &mapping->count))
> + return NULL;
> + }
> + return mappings;
> +}
Thanks,
Seth
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
[-- Attachment #2: Type: text/plain, Size: 205 bytes --]
_______________________________________________
Containers mailing list
Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
https://lists.linuxfoundation.org/mailman/listinfo/containers
next prev parent reply other threads:[~2013-06-15 0:15 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-22 9:11 [PATCH 00/11] pkg-shadow support subordinate ids with user namespaces Eric W. Biederman
[not found] ` <87d2wxshu0.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-01-22 9:12 ` [PATCH 01/11] Documentation for /etc/subuid and /etc/subgid Eric W. Biederman
2013-01-22 9:12 ` [PATCH 02/11] login.defs.5: Document the new variables in login.defs Eric W. Biederman
2013-01-22 9:13 ` [PATCH 03/11] Implement commonio_append Eric W. Biederman
2013-01-22 9:13 ` Eric W. Biederman
2013-01-22 9:14 ` [PATCH 04/11] Add backend support for suboridnate uids and gids Eric W. Biederman
[not found] ` <87liblr344.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-01-23 18:22 ` Serge E. Hallyn
[not found] ` <20130123182206.GA4468-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2013-01-24 22:42 ` Eric W. Biederman
[not found] ` <87a9ryyzh2.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-01-24 22:50 ` Serge Hallyn
2013-01-24 22:59 ` Eric W. Biederman
2013-01-24 23:13 ` [PATCH] subordinateio: Fix subordinate_parse to have an internal static buffer Eric W. Biederman
2013-01-22 9:15 ` [PATCH 05/11] Implement find_new_sub_uids find_new_sub_gids Eric W. Biederman
2013-01-22 9:16 ` [PATCH 06/11] userdel: Add support for removing subordinate user and group ids Eric W. Biederman
2013-01-22 9:17 ` [PATCH 07/11] useradd: Add support for subordinate user identifiers Eric W. Biederman
2013-01-22 9:17 ` [PATCH 08/11] Add support for detecting busy subordinate user ids Eric W. Biederman
2013-01-22 9:18 ` [PATCH 09/11] usermod: Add support for subordinate uids and gids Eric W. Biederman
2013-01-22 9:19 ` [PATCH 10/11] newusers: Add support for assiging " Eric W. Biederman
2013-01-22 9:20 ` [PATCH 11/11] newuidmap, newgidmap: New suid helpers for using " Eric W. Biederman
[not found] ` <87ehhdpoag.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-02-04 18:31 ` [PATCH 11/11] newuidmap,newgidmap: " Serge E. Hallyn
[not found] ` <20130204183129.GA27179-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2013-02-05 17:20 ` Serge E. Hallyn
2013-02-06 0:28 ` [PATCH 11/11] newuidmap, newgidmap: " Eric W. Biederman
[not found] ` <87sj5ai8us.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-02-06 3:00 ` [PATCH 11/11] newuidmap,newgidmap: " Serge E. Hallyn
[not found] ` <87fw1tr33a.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-06-15 0:15 ` Seth Arnold [this message]
2013-10-25 20:30 ` Serge E. Hallyn
[not found] ` <20131025203025.GA2467-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2013-10-26 0:42 ` [PATCH 11/11] newuidmap, newgidmap: " Eric W. Biederman
[not found] ` <87zjpw278b.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-10-26 2:33 ` Serge Hallyn
2013-10-26 21:50 ` Eric W. Biederman
[not found] ` <87iowjya4j.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-10-27 23:53 ` Serge E. Hallyn
2013-01-29 18:15 ` [PATCH 00/11] pkg-shadow support subordinate ids with user namespaces Rob Landley
2013-01-29 22:28 ` Eric W. Biederman
2013-01-30 5:35 ` Vasily Kulikov
2013-01-30 6:40 ` Eric W. Biederman
[not found] ` <87vcafyy0k.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-01-30 7:38 ` Vasily Kulikov
2013-02-22 12:16 ` Glauber Costa
[not found] ` <51276189.5040803-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-02-22 16:34 ` Eric W. Biederman
[not found] ` <87zjyw489z.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-02-22 17:09 ` Glauber Costa
[not found] ` <5127A657.3010909-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-02-25 14:34 ` Serge Hallyn
[not found] ` <20130225143451.GE4387@sergelap>
2013-02-25 14:38 ` Glauber Costa
[not found] ` <512B7773.9060704-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-02-25 15:15 ` Serge Hallyn
2013-02-26 1:03 ` Eric W. Biederman
2013-02-25 14:30 ` Serge Hallyn
2013-03-03 15:37 ` Serge E. Hallyn
2013-03-07 15:23 ` Dwight Engen
2013-07-28 17:14 ` [Pkg-shadow-devel] " Christian PERRIER
[not found] ` <20130728171451.GX5670-FvNwPcshoeM/MCprI7ZU+I/wHUNs+SP4HZ5vskTnxNA@public.gmane.org>
2013-07-28 17:58 ` Eric W. Biederman
[not found] ` <87r4eilg6y.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-07-29 0:33 ` Serge Hallyn
[not found] ` <11218395-363e-46cd-b7a1-4488079a4986@email.android.com>
[not found] ` <11218395-363e-46cd-b7a1-4488079a4986-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2013-08-06 14:54 ` Serge E. Hallyn
[not found] ` <20130806145403.GA20913-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2013-08-06 22:53 ` Nicolas François
[not found] ` <20130806225332.GA14109-pDMkYksm/NDBVznEOA0nCqMXiC8k1aZu0e7PPNI6Mm0@public.gmane.org>
2013-08-07 15:33 ` Serge Hallyn
2013-08-07 18:04 ` Eric W. Biederman
[not found] ` <87eha5peb8.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-09 18:40 ` Nicolas François
[not found] ` <20130303153726.GA14737@austin.hallyn.com>
[not found] ` <20130303153726.GA14737-anj0Drq5vpzx6HRWoRZK3AC/G2K4zDHf@public.gmane.org>
2013-03-04 5:56 ` Christian PERRIER
[not found] ` <20130304055654.GE2629@mykerinos.kheops.frmug.org>
[not found] ` <20130304055654.GE2629-FvNwPcshoeM/MCprI7ZU+I/wHUNs+SP4HZ5vskTnxNA@public.gmane.org>
2013-03-05 22:05 ` Serge E. Hallyn
[not found] ` <20130307102352.4a5943cd@oracle.com>
[not found] ` <20130307102352.4a5943cd-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2013-03-07 21:54 ` Serge E. Hallyn
[not found] ` <20130307215457.GB9348-anj0Drq5vpzx6HRWoRZK3AC/G2K4zDHf@public.gmane.org>
2013-03-07 22:56 ` Eric W. Biederman
[not found] ` <876212rf9b.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-03-08 6:50 ` [Pkg-shadow-devel] " Christian PERRIER
[not found] ` <20130308065019.GI5885-FvNwPcshoeM/MCprI7ZU+I/wHUNs+SP4HZ5vskTnxNA@public.gmane.org>
2013-06-02 13:48 ` Serge E. Hallyn
[not found] ` <20130602134823.GB8004-anj0Drq5vpzx6HRWoRZK3AC/G2K4zDHf@public.gmane.org>
2013-06-02 14:04 ` Christian PERRIER
[not found] ` <20130602140436.GK9152-FvNwPcshoeM/MCprI7ZU+I/wHUNs+SP4HZ5vskTnxNA@public.gmane.org>
2013-06-02 14:33 ` Serge E. Hallyn
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=20130615001531.GB32705@hunt \
--to=seth.arnold-z7wlfzj8ewms+fvcfc7uqw@public.gmane.org \
--cc=Pkg-shadow-devel-XbBxUvOt3X2LieD7tvxI8l/i77bcL1HB@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \
--cc=mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=nicolas.francois-Fa7rcPG4DJn7nK0/Xc0eeg@public.gmane.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.