Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 65684
b: refs/heads/master
c: 1fab46f
h: refs/heads/master
v: v3
  • Loading branch information
Oliver Endriss authored and Mauro Carvalho Chehab committed Oct 10, 2007
1 parent 15343fb commit 849c3a2
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 36c15f8ee41fbc3d8eaf88bba95be3d50268d5d2
refs/heads/master: 1fab46f0decd226fcbae73b23d7f8ed478416fbb
46 changes: 46 additions & 0 deletions trunk/drivers/media/dvb/dvb-core/dvb_frontend.c
Original file line number Diff line number Diff line change
Expand Up @@ -697,6 +697,47 @@ static int dvb_frontend_start(struct dvb_frontend *fe)
return 0;
}

static int dvb_frontend_check_parameters(struct dvb_frontend *fe,
struct dvb_frontend_parameters *parms)
{
/* range check: frequency */
if ((fe->ops.info.frequency_min &&
parms->frequency < fe->ops.info.frequency_min) ||
(fe->ops.info.frequency_max &&
parms->frequency > fe->ops.info.frequency_max)) {
printk(KERN_WARNING "DVB: frontend %u frequency %u out of range (%u..%u)\n",
fe->dvb->num, parms->frequency,
fe->ops.info.frequency_min, fe->ops.info.frequency_max);
return -EINVAL;
}

/* range check: symbol rate */
if (fe->ops.info.type == FE_QPSK) {
if ((fe->ops.info.symbol_rate_min &&
parms->u.qpsk.symbol_rate < fe->ops.info.symbol_rate_min) ||
(fe->ops.info.symbol_rate_max &&
parms->u.qpsk.symbol_rate > fe->ops.info.symbol_rate_max)) {
printk(KERN_WARNING "DVB: frontend %u symbol rate %u out of range (%u..%u)\n",
fe->dvb->num, parms->u.qpsk.symbol_rate,
fe->ops.info.symbol_rate_min, fe->ops.info.symbol_rate_max);
return -EINVAL;
}

} else if (fe->ops.info.type == FE_QAM) {
if ((fe->ops.info.symbol_rate_min &&
parms->u.qam.symbol_rate < fe->ops.info.symbol_rate_min) ||
(fe->ops.info.symbol_rate_max &&
parms->u.qam.symbol_rate > fe->ops.info.symbol_rate_max)) {
printk(KERN_WARNING "DVB: frontend %u symbol rate %u out of range (%u..%u)\n",
fe->dvb->num, parms->u.qam.symbol_rate,
fe->ops.info.symbol_rate_min, fe->ops.info.symbol_rate_max);
return -EINVAL;
}
}

return 0;
}

static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, void *parg)
{
Expand Down Expand Up @@ -883,6 +924,11 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
case FE_SET_FRONTEND: {
struct dvb_frontend_tune_settings fetunesettings;

if (dvb_frontend_check_parameters(fe, parg) < 0) {
err = -EINVAL;
break;
}

memcpy (&fepriv->parameters, parg,
sizeof (struct dvb_frontend_parameters));

Expand Down

0 comments on commit 849c3a2

Please sign in to comment.