All of lore.kernel.org
 help / color / mirror / Atom feed
* [mkl-can-next:bcm 3/3] net/can/bcm.c:1327 bcm_sendmsg() warn: bitwise AND condition is false here
@ 2023-05-28 21:55 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2023-05-28 21:55 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-can@vger.kernel.org
TO: "Marc Kleine-Budde" <mkl@pengutronix.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git bcm
head:   78f1f58dba2bfcafe5affbedd074a0a84dea2dc6
commit: 78f1f58dba2bfcafe5affbedd074a0a84dea2dc6 [3/3] can: bcm: add support for MSG_CMSG_COMPAT
:::::: branch date: 5 days ago
:::::: commit date: 5 days ago
config: i386-randconfig-m021-20230525 (https://download.01.org/0day-ci/archive/20230529/202305290502.yglyCoui-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202305290502.yglyCoui-lkp@intel.com/

New smatch warnings:
net/can/bcm.c:1327 bcm_sendmsg() warn: bitwise AND condition is false here
net/can/bcm.c:1719 bcm_recvmsg() warn: bitwise AND condition is false here

Old smatch warnings:
net/can/bcm.c:1205 bcm_rx_setup() warn: is 'op->frames' large enough for 'struct canfd_frame'? 0

vim +1327 net/can/bcm.c

ffd980f976e7fd Oliver Hartkopp   2007-11-16  1311  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1312  /*
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1313   * bcm_sendmsg - process BCM commands (opcodes) from the userspace
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1314   */
1b784140474e4f Ying Xue          2015-03-02  1315  static int bcm_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1316  {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1317  	struct sock *sk = sock->sk;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1318  	struct bcm_sock *bo = bcm_sk(sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1319  	int ifindex = bo->ifindex; /* default ifindex for this bcm_op */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1320  	struct bcm_msg_head msg_head;
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1321  	int cfsiz, msg_head_size;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1322  	int ret; /* read bytes or error codes as return value */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1323  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1324  	if (!bo->bound)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1325  		return -ENOTCONN;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1326  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18 @1327  	if (msg->msg_flags & MSG_CMSG_COMPAT) {
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1328  		struct bcm_msg_head_compat msg_head_compat;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1329  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1330  		msg_head_size = sizeof(msg_head_compat);
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1331  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1332  		/* check for valid message length from userspace */
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1333  		if (size < msg_head_size)
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1334  			return -EINVAL;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1335  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1336  		/* read message head information */
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1337  		ret = memcpy_from_msg(&msg_head_compat, msg, msg_head_size);
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1338  		if (ret < 0)
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1339  			return ret;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1340  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1341  		msg_head.opcode = msg_head_compat.opcode;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1342  		msg_head.flags = msg_head_compat.flags;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1343  		msg_head.count = msg_head_compat.count;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1344  		msg_head.ival1.tv_sec = msg_head_compat.ival1.tv_sec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1345  		msg_head.ival1.tv_usec = msg_head_compat.ival1.tv_usec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1346  		msg_head.ival2.tv_sec = msg_head_compat.ival2.tv_sec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1347  		msg_head.ival2.tv_usec = msg_head_compat.ival2.tv_usec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1348  		msg_head.can_id = msg_head_compat.can_id;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1349  		msg_head.nframes = msg_head_compat.nframes;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1350  	} else {
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1351  		msg_head_size = sizeof(msg_head);
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1352  
7f2d38eb7a42be Oliver Hartkopp   2008-07-05  1353  		/* check for valid message length from userspace */
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1354  		if (size < msg_head_size)
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1355  			return -EINVAL;
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1356  
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1357  		/* read message head information */
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1358  		ret = memcpy_from_msg((u8 *)&msg_head, msg, msg_head_size);
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1359  		if (ret < 0)
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1360  			return ret;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1361  	}
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1362  
6f3b911d5f29b9 Oliver Hartkopp   2016-06-17  1363  	cfsiz = CFSIZ(msg_head.flags);
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1364  	if ((size - msg_head_size) % cfsiz)
7f2d38eb7a42be Oliver Hartkopp   2008-07-05  1365  		return -EINVAL;
7f2d38eb7a42be Oliver Hartkopp   2008-07-05  1366  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1367  	/* check for alternative ifindex for this bcm_op */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1368  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1369  	if (!ifindex && msg->msg_name) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1370  		/* no bound device as default => check msg_name */
342dfc306fb321 Steffen Hurrle    2014-01-17  1371  		DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1372  
9e9714742fb704 Oliver Hartkopp   2021-03-25  1373  		if (msg->msg_namelen < BCM_MIN_NAMELEN)
5e5073280379d3 Kurt Van Dijck    2011-01-15  1374  			return -EINVAL;
5e5073280379d3 Kurt Van Dijck    2011-01-15  1375  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1376  		if (addr->can_family != AF_CAN)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1377  			return -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1378  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1379  		/* ifindex from sendto() */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1380  		ifindex = addr->can_ifindex;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1381  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1382  		if (ifindex) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1383  			struct net_device *dev;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1384  
384317ef4187f5 Oliver Hartkopp   2017-04-25  1385  			dev = dev_get_by_index(sock_net(sk), ifindex);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1386  			if (!dev)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1387  				return -ENODEV;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1388  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1389  			if (dev->type != ARPHRD_CAN) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1390  				dev_put(dev);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1391  				return -ENODEV;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1392  			}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1393  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1394  			dev_put(dev);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1395  		}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1396  	}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1397  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1398  	lock_sock(sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1399  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1400  	switch (msg_head.opcode) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1401  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1402  	case TX_SETUP:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1403  		ret = bcm_tx_setup(&msg_head, msg, ifindex, sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1404  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1405  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1406  	case RX_SETUP:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1407  		ret = bcm_rx_setup(&msg_head, msg, ifindex, sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1408  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1409  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1410  	case TX_DELETE:
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1411  		if (bcm_delete_tx_op(&bo->tx_ops, &msg_head, ifindex))
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1412  			ret = 0;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1413  		else
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1414  			ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1415  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1416  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1417  	case RX_DELETE:
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1418  		if (bcm_delete_rx_op(&bo->rx_ops, &msg_head, ifindex))
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1419  			ret = 0;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1420  		else
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1421  			ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1422  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1423  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1424  	case TX_READ:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1425  		/* reuse msg_head for the reply to TX_READ */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1426  		msg_head.opcode  = TX_STATUS;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1427  		ret = bcm_read_op(&bo->tx_ops, &msg_head, ifindex);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1428  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1429  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1430  	case RX_READ:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1431  		/* reuse msg_head for the reply to RX_READ */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1432  		msg_head.opcode  = RX_STATUS;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1433  		ret = bcm_read_op(&bo->rx_ops, &msg_head, ifindex);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1434  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1435  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1436  	case TX_SEND:
72c8a89ad2e4de Oliver Hartkopp   2016-06-17  1437  		/* we need exactly one CAN frame behind the msg head */
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1438  		if ((msg_head.nframes != 1) || (size != cfsiz + msg_head_size))
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1439  			ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1440  		else
6f3b911d5f29b9 Oliver Hartkopp   2016-06-17  1441  			ret = bcm_tx_send(msg, ifindex, sk, cfsiz);
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1442  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1443  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1444  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1445  	default:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1446  		ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1447  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1448  	}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1449  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1450  	release_sock(sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1451  
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1452  	if (ret < 0)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1453  		return ret;
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1454  
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1455  	return ret + msg_head_size;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1456  }
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1457  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [mkl-can-next:bcm 3/3] net/can/bcm.c:1327 bcm_sendmsg() warn: bitwise AND condition is false here
@ 2023-05-27  2:22 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2023-05-27  2:22 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-can@vger.kernel.org
TO: "Marc Kleine-Budde" <mkl@pengutronix.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git bcm
head:   78f1f58dba2bfcafe5affbedd074a0a84dea2dc6
commit: 78f1f58dba2bfcafe5affbedd074a0a84dea2dc6 [3/3] can: bcm: add support for MSG_CMSG_COMPAT
:::::: branch date: 4 days ago
:::::: commit date: 4 days ago
config: i386-randconfig-m021-20230525 (https://download.01.org/0day-ci/archive/20230527/202305271026.THIYEmYX-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202305271026.THIYEmYX-lkp@intel.com/

New smatch warnings:
net/can/bcm.c:1327 bcm_sendmsg() warn: bitwise AND condition is false here
net/can/bcm.c:1719 bcm_recvmsg() warn: bitwise AND condition is false here

Old smatch warnings:
net/can/bcm.c:1205 bcm_rx_setup() warn: is 'op->frames' large enough for 'struct canfd_frame'? 0

vim +1327 net/can/bcm.c

ffd980f976e7fd Oliver Hartkopp   2007-11-16  1311  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1312  /*
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1313   * bcm_sendmsg - process BCM commands (opcodes) from the userspace
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1314   */
1b784140474e4f Ying Xue          2015-03-02  1315  static int bcm_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1316  {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1317  	struct sock *sk = sock->sk;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1318  	struct bcm_sock *bo = bcm_sk(sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1319  	int ifindex = bo->ifindex; /* default ifindex for this bcm_op */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1320  	struct bcm_msg_head msg_head;
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1321  	int cfsiz, msg_head_size;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1322  	int ret; /* read bytes or error codes as return value */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1323  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1324  	if (!bo->bound)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1325  		return -ENOTCONN;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1326  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18 @1327  	if (msg->msg_flags & MSG_CMSG_COMPAT) {
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1328  		struct bcm_msg_head_compat msg_head_compat;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1329  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1330  		msg_head_size = sizeof(msg_head_compat);
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1331  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1332  		/* check for valid message length from userspace */
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1333  		if (size < msg_head_size)
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1334  			return -EINVAL;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1335  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1336  		/* read message head information */
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1337  		ret = memcpy_from_msg(&msg_head_compat, msg, msg_head_size);
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1338  		if (ret < 0)
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1339  			return ret;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1340  
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1341  		msg_head.opcode = msg_head_compat.opcode;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1342  		msg_head.flags = msg_head_compat.flags;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1343  		msg_head.count = msg_head_compat.count;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1344  		msg_head.ival1.tv_sec = msg_head_compat.ival1.tv_sec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1345  		msg_head.ival1.tv_usec = msg_head_compat.ival1.tv_usec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1346  		msg_head.ival2.tv_sec = msg_head_compat.ival2.tv_sec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1347  		msg_head.ival2.tv_usec = msg_head_compat.ival2.tv_usec;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1348  		msg_head.can_id = msg_head_compat.can_id;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1349  		msg_head.nframes = msg_head_compat.nframes;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1350  	} else {
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1351  		msg_head_size = sizeof(msg_head);
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1352  
7f2d38eb7a42be Oliver Hartkopp   2008-07-05  1353  		/* check for valid message length from userspace */
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1354  		if (size < msg_head_size)
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1355  			return -EINVAL;
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1356  
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1357  		/* read message head information */
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1358  		ret = memcpy_from_msg((u8 *)&msg_head, msg, msg_head_size);
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1359  		if (ret < 0)
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1360  			return ret;
78f1f58dba2bfc Marc Kleine-Budde 2023-05-18  1361  	}
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1362  
6f3b911d5f29b9 Oliver Hartkopp   2016-06-17  1363  	cfsiz = CFSIZ(msg_head.flags);
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1364  	if ((size - msg_head_size) % cfsiz)
7f2d38eb7a42be Oliver Hartkopp   2008-07-05  1365  		return -EINVAL;
7f2d38eb7a42be Oliver Hartkopp   2008-07-05  1366  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1367  	/* check for alternative ifindex for this bcm_op */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1368  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1369  	if (!ifindex && msg->msg_name) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1370  		/* no bound device as default => check msg_name */
342dfc306fb321 Steffen Hurrle    2014-01-17  1371  		DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1372  
9e9714742fb704 Oliver Hartkopp   2021-03-25  1373  		if (msg->msg_namelen < BCM_MIN_NAMELEN)
5e5073280379d3 Kurt Van Dijck    2011-01-15  1374  			return -EINVAL;
5e5073280379d3 Kurt Van Dijck    2011-01-15  1375  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1376  		if (addr->can_family != AF_CAN)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1377  			return -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1378  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1379  		/* ifindex from sendto() */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1380  		ifindex = addr->can_ifindex;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1381  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1382  		if (ifindex) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1383  			struct net_device *dev;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1384  
384317ef4187f5 Oliver Hartkopp   2017-04-25  1385  			dev = dev_get_by_index(sock_net(sk), ifindex);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1386  			if (!dev)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1387  				return -ENODEV;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1388  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1389  			if (dev->type != ARPHRD_CAN) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1390  				dev_put(dev);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1391  				return -ENODEV;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1392  			}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1393  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1394  			dev_put(dev);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1395  		}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1396  	}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1397  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1398  	lock_sock(sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1399  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1400  	switch (msg_head.opcode) {
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1401  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1402  	case TX_SETUP:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1403  		ret = bcm_tx_setup(&msg_head, msg, ifindex, sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1404  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1405  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1406  	case RX_SETUP:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1407  		ret = bcm_rx_setup(&msg_head, msg, ifindex, sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1408  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1409  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1410  	case TX_DELETE:
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1411  		if (bcm_delete_tx_op(&bo->tx_ops, &msg_head, ifindex))
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1412  			ret = 0;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1413  		else
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1414  			ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1415  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1416  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1417  	case RX_DELETE:
2b5f5f5dc11421 Oliver Hartkopp   2016-06-17  1418  		if (bcm_delete_rx_op(&bo->rx_ops, &msg_head, ifindex))
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1419  			ret = 0;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1420  		else
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1421  			ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1422  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1423  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1424  	case TX_READ:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1425  		/* reuse msg_head for the reply to TX_READ */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1426  		msg_head.opcode  = TX_STATUS;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1427  		ret = bcm_read_op(&bo->tx_ops, &msg_head, ifindex);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1428  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1429  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1430  	case RX_READ:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1431  		/* reuse msg_head for the reply to RX_READ */
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1432  		msg_head.opcode  = RX_STATUS;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1433  		ret = bcm_read_op(&bo->rx_ops, &msg_head, ifindex);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1434  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1435  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1436  	case TX_SEND:
72c8a89ad2e4de Oliver Hartkopp   2016-06-17  1437  		/* we need exactly one CAN frame behind the msg head */
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1438  		if ((msg_head.nframes != 1) || (size != cfsiz + msg_head_size))
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1439  			ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1440  		else
6f3b911d5f29b9 Oliver Hartkopp   2016-06-17  1441  			ret = bcm_tx_send(msg, ifindex, sk, cfsiz);
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1442  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1443  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1444  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1445  	default:
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1446  		ret = -EINVAL;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1447  		break;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1448  	}
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1449  
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1450  	release_sock(sk);
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1451  
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1452  	if (ret < 0)
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1453  		return ret;
1194c6955f0c82 Marc Kleine-Budde 2023-05-18  1454  
b3cfa83eaa4ae2 Marc Kleine-Budde 2023-05-18  1455  	return ret + msg_head_size;
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1456  }
ffd980f976e7fd Oliver Hartkopp   2007-11-16  1457  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-05-28 21:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-28 21:55 [mkl-can-next:bcm 3/3] net/can/bcm.c:1327 bcm_sendmsg() warn: bitwise AND condition is false here kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2023-05-27  2:22 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.