Re: [PATCHv4 10/17] pps: use BUG_ON for kernel API safety checks

From: Rodolfo Giometti
Date: Sun Nov 21 2010 - 03:41:25 EST


On Sun, Nov 21, 2010 at 03:13:05AM +0300, Alexander Gordeev wrote:
> ?? Sat, 20 Nov 2010 17:13:51 +0100
> Rodolfo Giometti <giometti@xxxxxxxxxxxx> ??????????:
>
> > On Thu, Nov 18, 2010 at 07:01:03PM +0300, Alexander Gordeev wrote:
> > > This way less overhead is involved when running production kernel.
> > > If you want to debug a pps client module please define DEBUG to enable
> > > the checks.
> > >
> > > Signed-off-by: Alexander Gordeev <lasaine@xxxxxxxxxxxxx>
> > > ---
> > > drivers/pps/kapi.c | 33 ++++++++++-----------------------
> > > 1 files changed, 10 insertions(+), 23 deletions(-)
> > >
> > > diff --git a/drivers/pps/kapi.c b/drivers/pps/kapi.c
> > > index fe832aa..54261c4 100644
> > > --- a/drivers/pps/kapi.c
> > > +++ b/drivers/pps/kapi.c
> > > @@ -81,25 +81,14 @@ struct pps_device *pps_register_source(struct pps_source_info *info,
> > > int err;
> > >
> > > /* Sanity checks */
> > > - if ((info->mode & default_params) != default_params) {
> > > - pr_err("pps: %s: unsupported default parameters\n",
> > > - info->name);
> > > - err = -EINVAL;
> > > - goto pps_register_source_exit;
> > > - }
> > > - if ((info->mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) != 0 &&
> > > - info->echo == NULL) {
> > > - pr_err("pps: %s: echo function is not defined\n",
> > > - info->name);
> > > - err = -EINVAL;
> > > - goto pps_register_source_exit;
> > > - }
> > > - if ((info->mode & (PPS_TSFMT_TSPEC | PPS_TSFMT_NTPFP)) == 0) {
> > > - pr_err("pps: %s: unspecified time format\n",
> > > - info->name);
> > > - err = -EINVAL;
> > > - goto pps_register_source_exit;
> > > - }
> > > +
> > > + /* default_params should be supported */
> > > + BUG_ON((info->mode & default_params) != default_params);
> > > + /* echo function should be defined if we are asked to call it */
> > > + BUG_ON((info->mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) != 0 &&
> > > + info->echo == NULL);
> > > + /* time format should be specified */
> > > + BUG_ON((info->mode & (PPS_TSFMT_TSPEC | PPS_TSFMT_NTPFP)) == 0);
> >
> > Nack.
> >
> > If the userland gives us some wrong parameters this is not the same of
> > a kernel bug (which BUG_ON is used for). The userland must be notified
> > about the wrong input.
>
> I agree with what you said completely but this is not a user-space API.
> pps_register_source() can only be called from other kernel code.

Yes, but in turn pps_register_source() is called in a function called
from userspace. The user should know if he/she cannot safely register
his/her new PPS source.

The BUG_ON() should be used for a kernel bug like "Ehi! This can't
happen! Data are corrupted"... but here we are just checking some
input parameters.

Ciao,

Rodolfo

--

GNU/Linux Solutions e-mail: giometti@xxxxxxxxxxxx
Linux Device Driver giometti@xxxxxxxx
Embedded Systems phone: +39 349 2432127
UNIX programming skype: rodolfo.giometti
Freelance ICT Italia - Consulente ICT Italia - www.consulenti-ict.it
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/