X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/b29ebe97fb5acced24e8ce9bb30e5d4dcad58815..3c47a7cd435662f7e2daa006596722271f5dd090:/lincan/src/open.c diff --git a/lincan/src/open.c b/lincan/src/open.c index 942225a..266aed4 100644 --- a/lincan/src/open.c +++ b/lincan/src/open.c @@ -50,15 +50,21 @@ int can_open(struct inode *inode, struct file *file) struct canque_edge_t *edge; can_spin_irqflags_t iflags; char openflag; // Martin Petera: Object already opened + int minor_nr = INODE2MINOR_NR(inode); - if ( ((obj=objects_p[MINOR_NR]) == NULL) || - ((chip=objects_p[MINOR_NR]->hostchip) == NULL) ) { - CANMSG("There is no hardware support for the device file with minor nr.: %d\n",MINOR_NR); + if ((minor_nr < 0) || (minor_nr >= MAX_TOT_MSGOBJS)) { + CANMSG("can_open: bad minor %d\n", minor_nr); + return -ENODEV; + } + + if ( ((obj=objects_p[minor_nr]) == NULL) || + ((chip=objects_p[minor_nr]->hostchip) == NULL) ) { + CANMSG("There is no hardware support for the device file with minor nr.: %d\n", minor_nr); return -ENODEV; } atomic_inc(&obj->obj_used); - DEBUGMSG("Device %d opened %d times.\n", MINOR_NR, atomic_read(&obj->obj_used)); + DEBUGMSG("Device %d opened %d times.\n", minor_nr, atomic_read(&obj->obj_used)); openflag = can_msgobj_test_fl(obj,OPENED); // Martin Petera: store previous status can_msgobj_set_fl(obj,OPENED);