Date: Mon, 14 Oct 2002 22:18:10 +0300 From: Maxim Sobolev <sobomax@FreeBSD.ORG> To: Robert Watson <rwatson@FreeBSD.ORG> Cc: "Vladimir B. Grebenschikov,Moscow,408-7227,123-4567,Some-info" <vova@express.ru>, freebsd-arch@FreeBSD.ORG, freebsd-current@FreeBSD.ORG Subject: Re: short uid/gid Message-ID: <20021014191810.GA338@vega.vega.com> In-Reply-To: <Pine.NEB.3.96L.1021014132336.56465H-100000@fledge.watson.org> References: <E180zjq-000OrL-00@vbook.express.ru> <Pine.NEB.3.96L.1021014132336.56465H-100000@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Linux solved the problem by introducing a new flag for {msg,shm,sem}ctl(3) interfaces (IPC_64), which if set tells the kernel that user supplies new version of the structure. The kernel itself internally keeps all relevant information already in IPC_64 format, doing conversion before returning it to user if IPC_64 isn't set. I think that for portability reasons we should at least consider the same or similar route. -Maxim On Mon, Oct 14, 2002 at 01:27:57PM -0400, Robert Watson wrote: > Yeah, this is a Known Problem, and it's quite unfortunate, actually. I > looked at trying to solve it -- changing the types respectively to uid_t, > gid_t, and mode_t, but it involved a lot of ABI munging because the > structures are shared between the userland interface and the kernel > implementation. The result is that any change in the kernel structure > really requires you to break out the user structures from the kernel > structure, which requires a lot of work. Also, ipc_perm is shared between > all three SysVIPC services, and to compound things, there are already > ofoo() interfaces for older versions of the structures. My belief is that > seperating the user and kernel structures is really necessary -- making a > kipc_perm, etc, so we can better support fine-grained locking and > extensible security. However, someone has to do the grunt work, and last > time I tried, I spent several days and only made a bit of progress. If > you want to give a first pass at breaking out the user and kernel > structures and send a patch, I'll be happy to work with you to get it > integrated. I think the steps are: > > (1) Divorce user and kernel structures for all of the SysVIPC interfaces, > and provide functions to map between them as necessary. > > (2) Remove the original compatibility interfaces left over from eons ago > (and figure out how many eons ago so we know what ABIs we're finally > removing). > > (3) Define new userland versions of necessary structures and create a new > set of ofoo() and foo() interfaces based on the change. > > (4) Go back through and dribble the kernel structures with new toys, such > as 'struct label', etc. > > Robert N M Watson FreeBSD Core Team, TrustedBSD Projects > robert@fledge.watson.org Network Associates Laboratories > > On Mon, 14 Oct 2002, Vladimir B. Grebenschikov,Moscow,408-7227,123-4567,Some-info wrote: > > > > > Hi > > > > I have found that SysVIPC functions uses structure with short uid/gid types. > > > > What is valid solution ? > > > > Change types to uid_t/gid_t (but this will broke binary compatibility) > > Change syscalls to old_* and add new with "right" structures, > > or something else ? > > > > struct ipc_perm { > > ushort cuid; /* creator user id */ > > ushort cgid; /* creator group id */ > > ushort uid; /* user id */ > > ushort gid; /* group id */ > > ushort mode; /* r/w permission */ > > ushort seq; /* sequence # (to generate unique msg/sem/shm id) */ > > key_t key; /* user specified msg/sem/shm key */ > > }; > > > > -- > > Vladimir B. Grebenschikov > > vova@sw.ru, SWsoft, Inc. > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > > with "unsubscribe freebsd-arch" in the body of the message > > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-current" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021014191810.GA338>