Date: Fri, 5 Sep 2025 02:43:24 +0300 From: Konstantin Belousov <kostikbel@gmail.com> To: Jamie Gritton <jamie@freebsd.org> Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 851dc7f859c2 - main - jail: add jail descriptors Message-ID: <aLokHDP-EMa1LR0D@kib.kiev.ua> In-Reply-To: <202509042031.584KVpxY000408@gitrepo.freebsd.org> References: <202509042031.584KVpxY000408@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Sep 04, 2025 at 08:31:51PM +0000, Jamie Gritton wrote: > The branch main has been updated by jamie: > > URL: https://cgit.FreeBSD.org/src/commit/?id=851dc7f859c23cab09a348bca03ab655534fb7e0 > > commit 851dc7f859c23cab09a348bca03ab655534fb7e0 > Author: Jamie Gritton <jamie@FreeBSD.org> > AuthorDate: 2025-09-04 20:27:47 +0000 > Commit: Jamie Gritton <jamie@FreeBSD.org> > CommitDate: 2025-09-04 20:27:47 +0000 > > jail: add jail descriptors > > Similar to process descriptors, jail desriptors are allow jail > administration using the file descriptor interface instead of JIDs. > They come from and can be used by jail_set(2) and jail_get(2), > and there are two new system calls, jail_attach_jd(2) and > jail_remove_jd(2). > > Reviewed by: bz, brooks The code is from jaildesc_alloc(): jd = malloc(sizeof(*jd), M_JAILDESC, M_WAITOK | M_ZERO); error = falloc_caps(td, &fp, fdp, 0, NULL); finit(fp, priv_check_cred(fp->f_cred, PRIV_JAIL_SET) == 0 ? FREAD | FWRITE : FREAD, DTYPE_JAILDESC, jd, &jaildesc_ops); ^^^^^^^^^^^ '?' should be placed on the previous line if (error != 0) { free(jd, M_JAILDESC); return (error); } If falloc_caps() returned error, fp does not point to a valid file. Then finit() operates on random memory. Generated files should have been committed as a follow-up, not in the same commit as written code. jaildesc_find() returns EBADF when passed file type is not DTYPE_JAIL. Normally EBADF means that the object underlying the file is invalidated, like vnode is reclaimed, tty is revoked, etc. For the wrong type, EINVAL should be returned. jaildesc_close() does finit(fp, 0, DTYPE_NONE, NULL, &badfileops); that is not needed, same as cleaning f_data. There are fo_chown/fo_chmod methods that are semantically applied to the jail files, instead of the underlying object. This is quite strange, files do not have concept of owner.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?aLokHDP-EMa1LR0D>