lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Sun, 13 Mar 2022 22:35:08 +0800
From:   kernel test robot <lkp@...el.com>
To:     Chuck Lever <chuck.lever@...cle.com>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
        Hannes Reinecke <hare@...e.de>
Subject: [hare-scsi-devel:tls-upcall.v4 121/156] net/tls/af_tlsh.c:452:
 undefined reference to `inet6_getname'

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git tls-upcall.v4
head:   d2416ecdb6b03fc2e4aa40b20cdf919322713224
commit: 33ec82590b0b919215a255fb431d661be4807b45 [121/156] net/tls: Add support for PF_TLSH (a TLS handshake listener)
config: i386-randconfig-a005 (https://download.01.org/0day-ci/archive/20220313/202203132205.eE6eTsBS-lkp@intel.com/config)
compiler: gcc-9 (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0
reproduce (this is a W=1 build):
        # https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git/commit/?id=33ec82590b0b919215a255fb431d661be4807b45
        git remote add hare-scsi-devel https://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel.git
        git fetch --no-tags hare-scsi-devel tls-upcall.v4
        git checkout 33ec82590b0b919215a255fb431d661be4807b45
        # save the config file to linux build tree
        mkdir build_dir
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash

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

All errors (new ones prefixed by >>):

   ld: net/tls/af_tlsh.o: in function `tlsh_getname':
>> net/tls/af_tlsh.c:452: undefined reference to `inet6_getname'
   ld: net/tls/af_tlsh.o: in function `tlsh_release':
>> net/tls/af_tlsh.c:283: undefined reference to `inet6_release'


vim +452 net/tls/af_tlsh.c

   259	
   260	/**
   261	 * tlsh_release - free an AF_TLSH socket
   262	 * @sock: socket to release
   263	 *
   264	 * Return values:
   265	 *   %0: success
   266	 */
   267	static int tlsh_release(struct socket *sock)
   268	{
   269		struct sock *sk = sock->sk;
   270		struct tlsh_sock *tsk = tlsh_sk(sk);
   271	
   272		if (!sk)
   273			return 0;
   274	
   275		switch (sk->sk_family) {
   276		case AF_INET:
   277			if (!tlsh_handshake_done(sk))
   278				return inet_release(sock);
   279			return 0;
   280	#if IS_ENABLED(CONFIG_IPV6)
   281		case AF_INET6:
   282			if (!tlsh_handshake_done(sk))
 > 283				return inet6_release(sock);
   284			return 0;
   285	#endif
   286		case AF_TLSH:
   287			break;
   288		default:
   289			return 0;
   290		}
   291	
   292		sock_hold(sk);	/* Ref: D */
   293		sock_orphan(sk);
   294		lock_sock(sk);
   295	
   296		tlsh_unregister_listener(sk);
   297		tlsh_accept_drain(sk);
   298	
   299		sk->sk_state = TCP_CLOSE;
   300		sk->sk_shutdown |= SEND_SHUTDOWN;
   301		sk->sk_state_change(sk);
   302	
   303		tsk->th_bind_family = AF_UNSPEC;
   304		sock->sk = NULL;
   305		release_sock(sk);
   306		sock_put(sk);	/* Ref: D */
   307	
   308		sock_put(sk);	/* Ref: A */
   309		return 0;
   310	}
   311	
   312	/**
   313	 * tlsh_bind - bind a name to an AF_TLSH socket
   314	 * @sock: socket to be bound
   315	 * @uaddr: address to bind to
   316	 * @addrlen: length in bytes of @uaddr
   317	 *
   318	 * Binding an AF_TLSH socket defines the family of addresses that
   319	 * are able to be accept(2)'d. So, AF_INET for ipv4, AF_INET6 for
   320	 * ipv6.
   321	 *
   322	 * Return values:
   323	 *   %0: binding was successful.
   324	 *   %-EPERM: Caller not privileged
   325	 *   %-EINVAL: Family of @sock or @uaddr not supported
   326	 */
   327	static int tlsh_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
   328	{
   329		struct sock *listener, *sk = sock->sk;
   330		struct tlsh_sock *tsk = tlsh_sk(sk);
   331	
   332		if (!capable(CAP_NET_BIND_SERVICE))
   333			return -EPERM;
   334	
   335		switch (uaddr->sa_family) {
   336		case AF_INET:
   337			if (addrlen != sizeof(struct sockaddr_in))
   338				return -EINVAL;
   339			break;
   340	#if IS_ENABLED(CONFIG_IPV6)
   341		case AF_INET6:
   342			if (addrlen != sizeof(struct sockaddr_in6))
   343				return -EINVAL;
   344			break;
   345	#endif
   346		default:
   347			return -EAFNOSUPPORT;
   348		}
   349	
   350		listener = tlsh_find_listener(sock_net(sk), uaddr->sa_family);
   351		if (listener) {
   352			sock_put(listener);	/* Ref: C */
   353			return -EADDRINUSE;
   354		}
   355	
   356		tsk->th_bind_family = uaddr->sa_family;
   357		return 0;
   358	}
   359	
   360	/**
   361	 * tlsh_accept - return a connection waiting for a TLS handshake
   362	 * @listener: listener socket which connection requests arrive on
   363	 * @newsock: socket to move incoming connection to
   364	 * @flags: SOCK_NONBLOCK and/or SOCK_CLOEXEC
   365	 * @kern: "boolean": 1 for kernel-internal sockets
   366	 *
   367	 * Return values:
   368	 *   %0: @newsock has been initialized.
   369	 *   %-EPERM: caller is not privileged
   370	 */
   371	static int tlsh_accept(struct socket *listener, struct socket *newsock, int flags,
   372			       bool kern)
   373	{
   374		struct sock *sk = listener->sk, *newsk;
   375		DECLARE_WAITQUEUE(wait, current);
   376		long timeo;
   377		int rc;
   378	
   379		rc = -EPERM;
   380		if (!capable(CAP_NET_BIND_SERVICE))
   381			goto out;
   382	
   383		lock_sock(sk);
   384	
   385		if (sk->sk_state != TCP_LISTEN) {
   386			rc = -EBADF;
   387			goto out_release;
   388		}
   389	
   390		timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
   391	
   392		rc = 0;
   393		add_wait_queue_exclusive(sk_sleep(sk), &wait);
   394		while (!(newsk = tlsh_accept_dequeue(sk))) {
   395			set_current_state(TASK_INTERRUPTIBLE);
   396			if (!timeo) {
   397				rc = -EAGAIN;
   398				break;
   399			}
   400			release_sock(sk);
   401	
   402			timeo = schedule_timeout(timeo);
   403	
   404			lock_sock(sk);
   405			if (sk->sk_state != TCP_LISTEN) {
   406				rc = -EBADF;
   407				break;
   408			}
   409			if (signal_pending(current)) {
   410				rc = sock_intr_errno(timeo);
   411				break;
   412			}
   413		}
   414		set_current_state(TASK_RUNNING);
   415		remove_wait_queue(sk_sleep(sk), &wait);
   416		if (rc) {
   417			tlsh_handshake_done(sk);
   418			goto out_release;
   419		}
   420	
   421		sock_graft(newsk, newsock);
   422	
   423		/* prevent user agent close from releasing the kernel socket */
   424		__module_get(THIS_MODULE);
   425		sock_hold(newsk);
   426	
   427	out_release:
   428		release_sock(sk);
   429	out:
   430		return rc;
   431	}
   432	
   433	/**
   434	 * tlsh_getname - retrieve src/dst address information from an AF_TLSH socket
   435	 * @sock: socket to query
   436	 * @uaddr: buffer to fill in
   437	 * @peer: value indicates which address to retrieve
   438	 *
   439	 * Return values:
   440	 *   On success, a positive length of the address in @uaddr
   441	 *   On error, a negative errno
   442	 */
   443	static int tlsh_getname(struct socket *sock, struct sockaddr *uaddr, int peer)
   444	{
   445		struct sock *sk = sock->sk;
   446	
   447		switch (sk->sk_family) {
   448		case AF_INET:
   449			return inet_getname(sock, uaddr, peer);
   450	#if IS_ENABLED(CONFIG_IPV6)
   451		case AF_INET6:
 > 452			return inet6_getname(sock, uaddr, peer);
   453	#endif
   454		default:
   455			return -EOPNOTSUPP;
   456		}
   457	}
   458	

---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ