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

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).