1 /* 2 * Copyright (c) 2022-2022 Huawei Device Co., Ltd. All rights reserved. 3 * Redistribution and use in source and binary forms, with or without modification, 4 * are permitted provided that the following conditions are met: 5 * 6 * 1. Redistributions of source code must retain the above copyright notice, this list of 7 * conditions and the following disclaimer. 8 * 9 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 10 * of conditions and the following disclaimer in the documentation and/or other materials 11 * provided with the distribution. 12 * 13 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 14 * to endorse or promote products derived from this software without specific prior written 15 * permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 19 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 24 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 27 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef _LOS_USER_CONTAINER_PRI_H 31 #define _LOS_USER_CONTAINER_PRI_H 32 33 #include "los_atomic.h" 34 #include "los_credentials_pri.h" 35 36 #define UID_GID_MAP_MAX_EXTENTS 5 37 38 #ifdef LOSCFG_USER_CONTAINER 39 struct ProcFile; 40 41 typedef struct UidGidExtent { 42 UINT32 first; 43 UINT32 lowerFirst; 44 UINT32 count; 45 } UidGidExtent; 46 47 typedef struct UidGidMap { 48 UINT32 extentCount; 49 union { 50 UidGidExtent extent[UID_GID_MAP_MAX_EXTENTS]; 51 }; 52 } UidGidMap; 53 54 typedef struct UserContainer { 55 Atomic rc; 56 INT32 level; 57 UINT32 owner; 58 UINT32 group; 59 struct UserContainer *parent; 60 UidGidMap uidMap; 61 UidGidMap gidMap; 62 UINT32 containerID; 63 } UserContainer; 64 65 UINT32 OsCreateUserContainer(Credentials *newCredentials, UserContainer *parentUserContainer); 66 67 VOID FreeUserContainer(UserContainer *userContainer); 68 69 UINT32 OsFromKuidMunged(UserContainer *userContainer, UINT32 kuid); 70 71 UINT32 OsFromKgidMunged(UserContainer *userContainer, UINT32 kgid); 72 73 UINT32 OsMakeKuid(UserContainer *userContainer, UINT32 uid); 74 75 UINT32 OsMakeKgid(UserContainer *userContainer, UINT32 gid); 76 77 INT32 OsUserContainerMapWrite(struct ProcFile *fp, CHAR *buf, size_t count, 78 INT32 capSetid, UidGidMap *map, UidGidMap *parentMap); 79 80 UINT32 OsGetUserContainerCount(VOID); 81 #endif 82 #endif 83