All of lore.kernel.org
 help / color / mirror / Atom feed
* [sashal-linux-stable:queue-4.9 13/24] net/ipv6/datagram.c:246:19: sparse: sparse: incorrect type in assignment (different base types)
@ 2021-01-08 14:51 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-01-08 14:51 UTC (permalink / raw)
  To: kbuild-all

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

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git queue-4.9
head:   07b4f6a206099b595f61c1dbaa951ef38ca7bb36
commit: b7893488b12bf8550004d996c65f106916e86c3a [13/24] net: ipv6: keep sk status consistent after datagram connect failure
config: i386-randconfig-s001-20210108 (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-208-g46a52ca4-dirty
        # https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git/commit/?id=b7893488b12bf8550004d996c65f106916e86c3a
        git remote add sashal-linux-stable https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git
        git fetch --no-tags sashal-linux-stable queue-4.9
        git checkout b7893488b12bf8550004d996c65f106916e86c3a
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
>> net/ipv6/datagram.c:246:19: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be32 [usertype] old_dport @@     got restricted __be16 [usertype] skc_dport @@
   net/ipv6/datagram.c:246:19: sparse:     expected restricted __be32 [usertype] old_dport
   net/ipv6/datagram.c:246:19: sparse:     got restricted __be16 [usertype] skc_dport
>> net/ipv6/datagram.c:264:34: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be16 [usertype] skc_dport @@     got restricted __be32 [usertype] old_dport @@
   net/ipv6/datagram.c:264:34: sparse:     expected restricted __be16 [usertype] skc_dport
   net/ipv6/datagram.c:264:34: sparse:     got restricted __be32 [usertype] old_dport

vim +246 net/ipv6/datagram.c

   141	
   142	int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr,
   143				   int addr_len)
   144	{
   145		struct sockaddr_in6	*usin = (struct sockaddr_in6 *) uaddr;
   146		struct inet_sock	*inet = inet_sk(sk);
   147		struct ipv6_pinfo	*np = inet6_sk(sk);
   148		struct in6_addr		*daddr, old_daddr;
   149		__be32			fl6_flowlabel = 0;
   150		__be32			old_fl6_flowlabel;
   151		__be32			old_dport;
   152		int			addr_type;
   153		int			err;
   154	
   155		if (usin->sin6_family == AF_INET) {
   156			if (__ipv6_only_sock(sk))
   157				return -EAFNOSUPPORT;
   158			err = __ip4_datagram_connect(sk, uaddr, addr_len);
   159			goto ipv4_connected;
   160		}
   161	
   162		if (addr_len < SIN6_LEN_RFC2133)
   163			return -EINVAL;
   164	
   165		if (usin->sin6_family != AF_INET6)
   166			return -EAFNOSUPPORT;
   167	
   168		if (np->sndflow)
   169			fl6_flowlabel = usin->sin6_flowinfo & IPV6_FLOWINFO_MASK;
   170	
   171		if (ipv6_addr_any(&usin->sin6_addr)) {
   172			/*
   173			 *	connect to self
   174			 */
   175			if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
   176				ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
   177						       &usin->sin6_addr);
   178			else
   179				usin->sin6_addr = in6addr_loopback;
   180		}
   181	
   182		addr_type = ipv6_addr_type(&usin->sin6_addr);
   183	
   184		daddr = &usin->sin6_addr;
   185	
   186		if (addr_type & IPV6_ADDR_MAPPED) {
   187			struct sockaddr_in sin;
   188	
   189			if (__ipv6_only_sock(sk)) {
   190				err = -ENETUNREACH;
   191				goto out;
   192			}
   193			sin.sin_family = AF_INET;
   194			sin.sin_addr.s_addr = daddr->s6_addr32[3];
   195			sin.sin_port = usin->sin6_port;
   196	
   197			err = __ip4_datagram_connect(sk,
   198						     (struct sockaddr *) &sin,
   199						     sizeof(sin));
   200	
   201	ipv4_connected:
   202			if (err)
   203				goto out;
   204	
   205			ipv6_addr_set_v4mapped(inet->inet_daddr, &sk->sk_v6_daddr);
   206	
   207			if (ipv6_addr_any(&np->saddr) ||
   208			    ipv6_mapped_addr_any(&np->saddr))
   209				ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);
   210	
   211			if (ipv6_addr_any(&sk->sk_v6_rcv_saddr) ||
   212			    ipv6_mapped_addr_any(&sk->sk_v6_rcv_saddr)) {
   213				ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
   214						       &sk->sk_v6_rcv_saddr);
   215				if (sk->sk_prot->rehash)
   216					sk->sk_prot->rehash(sk);
   217			}
   218	
   219			goto out;
   220		}
   221	
   222		if (__ipv6_addr_needs_scope_id(addr_type)) {
   223			if (addr_len >= sizeof(struct sockaddr_in6) &&
   224			    usin->sin6_scope_id) {
   225				if (sk->sk_bound_dev_if &&
   226				    sk->sk_bound_dev_if != usin->sin6_scope_id) {
   227					err = -EINVAL;
   228					goto out;
   229				}
   230				sk->sk_bound_dev_if = usin->sin6_scope_id;
   231			}
   232	
   233			if (!sk->sk_bound_dev_if && (addr_type & IPV6_ADDR_MULTICAST))
   234				sk->sk_bound_dev_if = np->mcast_oif;
   235	
   236			/* Connect to link-local address requires an interface */
   237			if (!sk->sk_bound_dev_if) {
   238				err = -EINVAL;
   239				goto out;
   240			}
   241		}
   242	
   243		/* save the current peer information before updating it */
   244		old_daddr = sk->sk_v6_daddr;
   245		old_fl6_flowlabel = np->flow_label;
 > 246		old_dport = inet->inet_dport;
   247	
   248		sk->sk_v6_daddr = *daddr;
   249		np->flow_label = fl6_flowlabel;
   250		inet->inet_dport = usin->sin6_port;
   251	
   252		/*
   253		 *	Check for a route to destination an obtain the
   254		 *	destination cache for it.
   255		 */
   256	
   257		err = ip6_datagram_dst_update(sk, true);
   258		if (err) {
   259			/* Restore the socket peer info, to keep it consistent with
   260			 * the old socket state
   261			 */
   262			sk->sk_v6_daddr = old_daddr;
   263			np->flow_label = old_fl6_flowlabel;
 > 264			inet->inet_dport = old_dport;
   265			goto out;
   266		}
   267	
   268		sk->sk_state = TCP_ESTABLISHED;
   269		sk_set_txhash(sk);
   270	out:
   271		return err;
   272	}
   273	EXPORT_SYMBOL_GPL(__ip6_datagram_connect);
   274	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26068 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-01-08 14:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-08 14:51 [sashal-linux-stable:queue-4.9 13/24] net/ipv6/datagram.c:246:19: sparse: sparse: incorrect type in assignment (different base types) 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.