From 989218c6c2ba15f150dd815acb978b6ca092c85e Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Sat, 25 Jul 2015 22:49:44 +0200 Subject: [PATCH] Use inode open argument to obtain minor number. Signed-off-by: Pavel Pisa --- lincan/include/can_sysdep.h | 8 ++++---- lincan/src/open.c | 14 ++++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lincan/include/can_sysdep.h b/lincan/include/can_sysdep.h index a2a8218..165d4a1 100644 --- a/lincan/include/can_sysdep.h +++ b/lincan/include/can_sysdep.h @@ -133,13 +133,13 @@ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,7)) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) -#define MINOR_NR \ - (MINOR(file->f_dentry->d_inode->i_rdev)) +#define INODE2MINOR_NR(inode) \ + (MINOR(inode->i_rdev)) #else /* Linux kernel < 2.5.7 or >= 2.6.0 */ -#define MINOR_NR \ - (minor(file->f_dentry->d_inode->i_rdev)) +#define INODE2MINOR_NR(inode) \ + (minor(inode->i_rdev)) #endif /* Linux kernel < 2.5.7 or >= 2.6.0 */ diff --git a/lincan/src/open.c b/lincan/src/open.c index f785e2c..219aab9 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); -- 2.39.2