Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Feb 2018 16:38:25 +0100
From:      Mariusz Zaborski <oshogbo@freebsd.org>
To:        Mateusz Guzik <mjguzik@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Where KASASERT fd < fdp->fd_nfiles should be?
Message-ID:  <20180217153825.GB61118@x-wing>
In-Reply-To: <CAGudoHHikxaGiB4NvADDGubkXuHLR8rOys2hUvcOd%2BZ0K22=Tw@mail.gmail.com>
References:  <20180217150224.GA61118@x-wing> <CAGudoHHikxaGiB4NvADDGubkXuHLR8rOys2hUvcOd%2BZ0K22=Tw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--6sX45UoQRIJXqkqR
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sat, Feb 17, 2018 at 04:23:40PM +0100, Mateusz Guzik wrote:
> On Sat, Feb 17, 2018 at 04:02:24PM +0100, Mariusz Zaborski wrote:
> >
> >         KASSERT(fd >=3D 0 && fd < fdp->fd_nfiles,
> >             ("%s: invalid fd=3D%d", __func__, fd));
> >
> >
> > My question and problem is do we need this KASSERT?
> > The fdget_locked checks if the fd is not larger then fd_lastfile.
> > But the code from fdinit suggest that fd_lastfile can be larger then
> fd_nfiles.
> > pjd@ suggested that it can go over size of the table fd_ofiles array:
> >         while (fdp->fd_lastfile >=3D newfdp->fd_nfiles) {
> >                 FILEDESC_SUNLOCK(fdp);
> >                 fdgrowtable(newfdp, fdp->fd_lastfile + 1);
> >                 FILEDESC_SLOCK(fdp);
> >         }
> >
> > So the question is do we need this assertion here or maybe should we mo=
ve
> it to
> > the fget_locked()/fdget_locked() functions?
> >
>=20
> While the assertion arguably can be removed, it is most definitely
> valid.
>=20
> fd_nfiles signifies the size of the table, while fd_lastfile the highest
> used slot. By definition it must fit the table.
>=20
> The code sample is used on fork where the existing table is duplicated.
> Allocation of the new table is performed with locks dropped, which means
> the old one can grow in the meantime. The while loop ensures the new
> table will have the right size no matter what.
So maybe we should go in more general approach and move this KASSERT to the
fget_locked and fdget_locked functions?

Thanks,
--=20
Mariusz Zaborski
oshogbo//vx		| http://oshogbo.vexillium.org
FreeBSD commiter	| https://freebsd.org
Software developer	| http://wheelsystems.com
If it's not broken, let's fix it till it is!!1

--6sX45UoQRIJXqkqR
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEkD1x0xkJXVVY1Gwf38KEGuLGxWQFAlqITG0ACgkQ38KEGuLG
xWRtrQ/+IsfQ4Z3+6tVzIsPzRAlRh6h6dxydBcZn0EsgJDLt+m2IJ/7aKflltWTv
FhC8uf01sY/32f7lBODHDGYcToUS3gxmS/QRNkm4kV86fzXVmz8q2/nsPVajFJZa
Wz0zoBfOIsf/4/BReG89w2kQE9qMXI5fy2H2t/3CWs6MjO38KaEVK7KGhZJtfvjM
eROaJdz6qJeD1lbxvE2jeMWT1HU6pysttoV8ra1MUUJpGs5vVUT1sWD16O3YVSRK
KdtmGIATIjzRHCiaMZoXr1ul1vrKOjV/O8kaF01lptneKkOJ6H7l5t6CSestUfFG
KupLQYhvsUhGXXU+BoPDmIao4tUbwxIjHtR5BRM60lqUFeQr47Rflnyz2u67fQXz
YzeVIr6zXKCzwALmYbPS6CBr/SM9rToUobjQlN+RLNG9qZ5LMAqm7uB9BfXT0gpU
TkgQFvVCRHrrtGt0v3asCJvBCgLVTC4CxzAR1SBfJwv0VOamb5yiaEZ+AF6A2/Fu
psgZUEgnfbsvfj6QWXHMvYO9j3xebCmEFL+xXUc65RyKmeKhXrLy3iVDU6Npsqma
gI7grNnxisVfs/WdR2+3GH85Aoh8dH1ARehq6PXGqfcX/rHlpeiQNvkZpp/TkxJf
10HjrYpoh5jB7fKOpVELMc+BV6ptSh7qeMl1LtJZal/ECvyNsfU=
=LrUW
-----END PGP SIGNATURE-----

--6sX45UoQRIJXqkqR--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180217153825.GB61118>