From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932176AbdJWGph (ORCPT ); Mon, 23 Oct 2017 02:45:37 -0400 Received: from mx2.suse.de ([195.135.220.15]:42638 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932131AbdJWGpg (ORCPT ); Mon, 23 Oct 2017 02:45:36 -0400 Subject: Re: [PATCH 1/2 v4] user namespace: use union in {g,u}idmap struct To: Christian Brauner , ebiederm@xmission.com, linux-kernel@vger.kernel.org Cc: serge@hallyn.com, stgraber@ubuntu.com, tycho@tycho.ws References: <20171019191136.21840-1-christian.brauner@ubuntu.com> From: Nikolay Borisov Message-ID: Date: Mon, 23 Oct 2017 09:45:34 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 23.10.2017 09:39, Nikolay Borisov wrote: > > > On 19.10.2017 22:11, Christian Brauner wrote: >> - Add a struct containing two pointer to extents and wrap both the static extent >> array and the struct into a union. This is done in preparation for bumping the >> {g,u}idmap limits for user namespaces. >> - Add brackets around anonymous union when using designated initializers to >> initialize members in order to please gcc <= 4.4. >> >> Signed-off-by: Christian Brauner >> --- >> Changelog 2017-10-19: >> * kernel/user.c: Use brackets around anonymous union when using designated >> initializers to initialize members. This is done to please gcc <= 4.4. >> --- >> include/linux/user_namespace.h | 18 +++++++++++++----- >> kernel/user.c | 30 ++++++++++++++++++------------ >> 2 files changed, 31 insertions(+), 17 deletions(-) >> >> diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h >> index c18e01252346..7c83d7f6289b 100644 >> --- a/include/linux/user_namespace.h >> +++ b/include/linux/user_namespace.h >> @@ -12,13 +12,21 @@ >> >> #define UID_GID_MAP_MAX_EXTENTS 5 >> >> +struct uid_gid_extent { >> + u32 first; >> + u32 lower_first; >> + u32 count; >> +}; >> + >> struct uid_gid_map { /* 64 bytes -- 1 cache line */ >> u32 nr_extents; >> - struct uid_gid_extent { >> - u32 first; >> - u32 lower_first; >> - u32 count; >> - } extent[UID_GID_MAP_MAX_EXTENTS]; >> + union { >> + struct uid_gid_extent extent[UID_GID_MAP_MAX_EXTENTS]; >> + struct { >> + struct uid_gid_extent *forward; >> + struct uid_gid_extent *reverse; >> + }; >> + }; >> }; >> >> #define USERNS_SETGROUPS_ALLOWED 1UL >> diff --git a/kernel/user.c b/kernel/user.c >> index 00281add65b2..9a20acce460d 100644 >> --- a/kernel/user.c >> +++ b/kernel/user.c >> @@ -26,26 +26,32 @@ >> struct user_namespace init_user_ns = { >> .uid_map = { >> .nr_extents = 1, >> - .extent[0] = { >> - .first = 0, >> - .lower_first = 0, >> - .count = 4294967295U, >> + { >> + .extent[0] = { >> + .first = 0, >> + .lower_first = 0, >> + .count = 4294967295U, > > nit: ULONG_MAX ? Well, actually UINT_MAX