linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [mkl-can-next:j1939 1/1] net/can/j1939/socket.c:707:2: error: too few arguments to function 'sock_tx_timestamp'
@ 2016-09-06 11:58 kbuild test robot
  2016-09-06 11:58 ` [PATCH] can-j1939: fix memdup_user.cocci warnings kbuild test robot
  2016-09-06 11:58 ` [PATCH] can-j1939: fix ifnullfree.cocci warnings kbuild test robot
  0 siblings, 2 replies; 3+ messages in thread
From: kbuild test robot @ 2016-09-06 11:58 UTC (permalink / raw)
  To: Kurt Van Dijck; +Cc: kbuild-all, linux-can, Marc Kleine-Budde

[-- Attachment #1: Type: text/plain, Size: 8653 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git j1939
head:   126ad77985046d48218f25ed6f18d06bf1fa78dd
commit: 126ad77985046d48218f25ed6f18d06bf1fa78dd [1/1] can-j1939: Import SAE J1939
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        git checkout 126ad77985046d48218f25ed6f18d06bf1fa78dd
        # save the attached .config to linux build tree
        make ARCH=i386 

All error/warnings (new ones prefixed by >>):

   net/can/j1939/socket.c: In function 'j1939sk_sendmsg':
>> net/can/j1939/socket.c:707:24: warning: passing argument 2 of 'sock_tx_timestamp' makes integer from pointer without a cast [-Wint-conversion]
     sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
                           ^
   In file included from include/linux/can/skb.h:16:0,
                    from net/can/j1939/socket.c:22:
   include/net/sock.h:2159:20: note: expected '__u16 {aka short unsigned int}' but argument is of type '__u8 * {aka unsigned char *}'
    static inline void sock_tx_timestamp(const struct sock *sk, __u16 tsflags,
                       ^~~~~~~~~~~~~~~~~
>> net/can/j1939/socket.c:707:2: error: too few arguments to function 'sock_tx_timestamp'
     sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
     ^~~~~~~~~~~~~~~~~
   In file included from include/linux/can/skb.h:16:0,
                    from net/can/j1939/socket.c:22:
   include/net/sock.h:2159:20: note: declared here
    static inline void sock_tx_timestamp(const struct sock *sk, __u16 tsflags,
                       ^~~~~~~~~~~~~~~~~

coccinelle warnings: (new ones prefixed by >>)

>> net/can/j1939/socket.c:528:3-8: WARNING: NULL check before freeing functions like kfree, debugfs_remove, debugfs_remove_recursive or usb_free_urb is not needed. Maybe consider reorganizing relevant code to avoid passing NULL values.
--
>> net/can/j1939/socket.c:510:13-20: WARNING opportunity for memdup_user

Please review and possibly fold the followup patch.

vim +/sock_tx_timestamp +707 net/can/j1939/socket.c

   504		switch (optname) {
   505		case SO_J1939_FILTER:
   506			if (optval) {
   507				if (optlen % sizeof(*filters) != 0)
   508					return -EINVAL;
   509				count = optlen / sizeof(*filters);
 > 510				filters = kmalloc(optlen, GFP_KERNEL);
   511				if (!filters)
   512					return -ENOMEM;
   513				if (copy_from_user(filters, optval, optlen)) {
   514					kfree(filters);
   515					return -EFAULT;
   516				}
   517			} else {
   518				filters = NULL;
   519				count = 0;
   520			}
   521	
   522			spin_lock_bh(&j1939_socks_lock);
   523			ofilters = jsk->filters;
   524			jsk->filters = filters;
   525			jsk->nfilters = count;
   526			spin_unlock_bh(&j1939_socks_lock);
   527			if (ofilters)
 > 528				kfree(ofilters);
   529			return 0;
   530		case SO_J1939_PROMISC:
   531			return j1939sk_setsockopt_flag(jsk, optval, optlen, PROMISC);
   532		case SO_J1939_RECV_OWN:
   533			return j1939sk_setsockopt_flag(jsk, optval, optlen, RECV_OWN);
   534		case SO_J1939_SEND_PRIO:
   535			if (optlen != sizeof(tmp))
   536				return -EINVAL;
   537			if (copy_from_user(&tmp, optval, optlen))
   538				return -EFAULT;
   539			if ((tmp < 0) || (tmp > 7))
   540				return -EDOM;
   541			if ((tmp < 2) && !capable(CAP_NET_ADMIN))
   542				return -EPERM;
   543			lock_sock(&jsk->sk);
   544			jsk->sk.sk_priority = j1939_to_sk_priority(tmp);
   545			release_sock(&jsk->sk);
   546			return 0;
   547		default:
   548			return -ENOPROTOOPT;
   549		}
   550	}
   551	
   552	static int j1939sk_getsockopt(struct socket *sock, int level, int optname,
   553			char __user *optval, int __user *optlen)
   554	{
   555		struct sock *sk = sock->sk;
   556		struct j1939_sock *jsk = j1939_sk(sk);
   557		int ret, ulen;
   558		/* set defaults for using 'int' properties */
   559		int tmp = 0;
   560		int len = sizeof(tmp);
   561		void *val = &tmp;
   562	
   563		if (level != SOL_CAN_J1939)
   564			return -EINVAL;
   565		if (get_user(ulen, optlen))
   566			return -EFAULT;
   567		if (ulen < 0)
   568			return -EINVAL;
   569	
   570		lock_sock(&jsk->sk);
   571		switch (optname) {
   572		case SO_J1939_PROMISC:
   573			tmp = (jsk->state & PROMISC) ? 1 : 0;
   574			break;
   575		case SO_J1939_RECV_OWN:
   576			tmp = (jsk->state & RECV_OWN) ? 1 : 0;
   577			break;
   578		case SO_J1939_SEND_PRIO:
   579			tmp = j1939_prio(jsk->sk.sk_priority);
   580			break;
   581		default:
   582			ret = -ENOPROTOOPT;
   583			goto no_copy;
   584		}
   585	
   586		/*
   587		 * copy to user, based on 'len' & 'val'
   588		 * but most sockopt's are 'int' properties, and have 'len' & 'val'
   589		 * left unchanged, but instead modified 'tmp'
   590		 */
   591		if (len > ulen)
   592			ret = -EFAULT;
   593		else if (put_user(len, optlen))
   594			ret = -EFAULT;
   595		else if (copy_to_user(optval, val, len))
   596			ret = -EFAULT;
   597		else
   598			ret = 0;
   599	no_copy:
   600		release_sock(&jsk->sk);
   601		return ret;
   602	}
   603	
   604	static int j1939sk_recvmsg(struct socket *sock, struct msghdr *msg,
   605			size_t size, int flags)
   606	{
   607		struct sock *sk = sock->sk;
   608		struct sk_buff *skb;
   609		struct j1939_sk_buff_cb *skcb;
   610		int ret = 0;
   611	
   612		skb = skb_recv_datagram(sk, flags, 0, &ret);
   613		if (!skb)
   614			return ret;
   615	
   616		if (size < skb->len)
   617			msg->msg_flags |= MSG_TRUNC;
   618		else
   619			size = skb->len;
   620	
   621		ret = memcpy_to_msg(msg, skb->data, size);
   622		if (ret < 0) {
   623			skb_free_datagram(sk, skb);
   624			return ret;
   625		}
   626	
   627		skcb = (void *)skb->cb;
   628		if (j1939_address_is_valid(skcb->dstaddr))
   629			put_cmsg(msg, SOL_CAN_J1939, SCM_J1939_DEST_ADDR,
   630					sizeof(skcb->dstaddr), &skcb->dstaddr);
   631	
   632		if (skcb->dstname)
   633			put_cmsg(msg, SOL_CAN_J1939, SCM_J1939_DEST_NAME,
   634					sizeof(skcb->dstname), &skcb->dstname);
   635	
   636		put_cmsg(msg, SOL_CAN_J1939, SCM_J1939_PRIO,
   637				sizeof(skcb->priority), &skcb->priority);
   638	
   639		if (msg->msg_name) {
   640			struct sockaddr_can *paddr = msg->msg_name;
   641	
   642			msg->msg_namelen = J1939_MIN_NAMELEN;
   643			memset(msg->msg_name, 0, msg->msg_namelen);
   644			paddr->can_family = AF_CAN;
   645			paddr->can_ifindex = skb->skb_iif;
   646			paddr->can_addr.j1939.name = skcb->srcname;
   647			paddr->can_addr.j1939.addr = skcb->srcaddr;
   648			paddr->can_addr.j1939.pgn = skcb->pgn;
   649		}
   650	
   651		sock_recv_ts_and_drops(msg, sk, skb);
   652		msg->msg_flags |= skcb->msg_flags;
   653		skb_free_datagram(sk, skb);
   654	
   655		return size;
   656	}
   657	
   658	static int j1939sk_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
   659	{
   660		struct sock *sk = sock->sk;
   661		struct j1939_sock *jsk = j1939_sk(sk);
   662		struct sockaddr_can *addr = msg->msg_name;
   663		struct j1939_sk_buff_cb *skcb;
   664		struct sk_buff *skb;
   665		struct net_device *dev;
   666		int ifindex;
   667		int ret;
   668	
   669		/* various socket state tests */
   670		if (!(jsk->state & JSK_BOUND))
   671			return -EBADFD;
   672	
   673		ifindex = jsk->ifindex_started;
   674		if (!ifindex)
   675			return -EBADFD;
   676	
   677		if (jsk->addr.sa == J1939_NO_ADDR && !jsk->addr.src)
   678			/* no address assigned yet */
   679			return -EBADFD;
   680	
   681		/* deal with provided address info */
   682		if (msg->msg_name) {
   683			if (msg->msg_namelen < J1939_MIN_NAMELEN)
   684				return -EINVAL;
   685			if (addr->can_family != AF_CAN)
   686				return -EINVAL;
   687			if (addr->can_ifindex && (ifindex != addr->can_ifindex))
   688				return -EBADFD;
   689		}
   690	
   691		dev = dev_get_by_index(&init_net, ifindex);
   692		if (!dev)
   693			return -ENXIO;
   694	
   695		skb = sock_alloc_send_skb(sk, size + sizeof(struct can_frame) - sizeof(((struct can_frame*)NULL)->data) + sizeof(struct can_skb_priv),
   696				msg->msg_flags & MSG_DONTWAIT, &ret);
   697		if (!skb)
   698			goto put_dev;
   699	
   700		can_skb_reserve(skb);
   701		can_skb_prv(skb)->ifindex = dev->ifindex;
   702		skb_reserve(skb, offsetof(struct can_frame, data));
   703	
   704		ret = memcpy_from_msg(skb_put(skb, size), msg, size);
   705		if (ret < 0)
   706			goto free_skb;
 > 707		sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
   708	
   709		skb->dev = dev;
   710	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 55086 bytes --]

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

* [PATCH] can-j1939: fix ifnullfree.cocci warnings
  2016-09-06 11:58 [mkl-can-next:j1939 1/1] net/can/j1939/socket.c:707:2: error: too few arguments to function 'sock_tx_timestamp' kbuild test robot
  2016-09-06 11:58 ` [PATCH] can-j1939: fix memdup_user.cocci warnings kbuild test robot
@ 2016-09-06 11:58 ` kbuild test robot
  1 sibling, 0 replies; 3+ messages in thread
From: kbuild test robot @ 2016-09-06 11:58 UTC (permalink / raw)
  To: Kurt Van Dijck; +Cc: kbuild-all, linux-can, Marc Kleine-Budde

net/can/j1939/socket.c:528:3-8: WARNING: NULL check before freeing functions like kfree, debugfs_remove, debugfs_remove_recursive or usb_free_urb is not needed. Maybe consider reorganizing relevant code to avoid passing NULL values.

 NULL check before some freeing functions is not needed.

 Based on checkpatch warning
 "kfree(NULL) is safe this check is probably not required"
 and kfreeaddr.cocci by Julia Lawall.

Generated by: scripts/coccinelle/free/ifnullfree.cocci

CC: Kurt Van Dijck <kurt.van.dijck@eia.be>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---

 socket.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/net/can/j1939/socket.c
+++ b/net/can/j1939/socket.c
@@ -524,8 +524,7 @@ static int j1939sk_setsockopt(struct soc
 		jsk->filters = filters;
 		jsk->nfilters = count;
 		spin_unlock_bh(&j1939_socks_lock);
-		if (ofilters)
-			kfree(ofilters);
+		kfree(ofilters);
 		return 0;
 	case SO_J1939_PROMISC:
 		return j1939sk_setsockopt_flag(jsk, optval, optlen, PROMISC);

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

* [PATCH] can-j1939: fix memdup_user.cocci warnings
  2016-09-06 11:58 [mkl-can-next:j1939 1/1] net/can/j1939/socket.c:707:2: error: too few arguments to function 'sock_tx_timestamp' kbuild test robot
@ 2016-09-06 11:58 ` kbuild test robot
  2016-09-06 11:58 ` [PATCH] can-j1939: fix ifnullfree.cocci warnings kbuild test robot
  1 sibling, 0 replies; 3+ messages in thread
From: kbuild test robot @ 2016-09-06 11:58 UTC (permalink / raw)
  To: Kurt Van Dijck; +Cc: kbuild-all, linux-can, Marc Kleine-Budde

net/can/j1939/socket.c:510:13-20: WARNING opportunity for memdup_user

 Use memdup_user rather than duplicating its implementation
 This is a little bit restricted to reduce false positives

Generated by: scripts/coccinelle/api/memdup_user.cocci

CC: Kurt Van Dijck <kurt.van.dijck@eia.be>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---

 0 files changed

rule starting on line 17: position variables or mixed modifs interfere with comm_assoc isobool (
(

(
(unknown *to == NULL)
  >>> IS_ERR(rule starting on line 17:to)

|
!unknown *to
  >>> IS_ERR(rule starting on line 17:to)

)
|
(unknown *NULL == unknown *to)
  >>> IS_ERR(rule starting on line 17:to)

) || ...)

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

end of thread, other threads:[~2016-09-06 12:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-06 11:58 [mkl-can-next:j1939 1/1] net/can/j1939/socket.c:707:2: error: too few arguments to function 'sock_tx_timestamp' kbuild test robot
2016-09-06 11:58 ` [PATCH] can-j1939: fix memdup_user.cocci warnings kbuild test robot
2016-09-06 11:58 ` [PATCH] can-j1939: fix ifnullfree.cocci warnings kbuild test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).