[LTP] [PATCH] syscalls/setsockopt05: associate receiver with destination address

Martin Doucha mdoucha@suse.cz
Mon Aug 24 16:42:05 CEST 2020


Hi,

On 24. 08. 20 14:10, Jan Stancek wrote:
> to avoid sporadic ECONNREFUSED errors:
>   safe_net.c:202: BROK: setsockopt05.c:70: send(6, 0x3ffcaf7d828, 4000, 32768) failed: ECONNREFUSED (111)
> 
> Signed-off-by: Jan Stancek <jstancek@redhat.com>
> ---
>  testcases/kernel/syscalls/setsockopt/setsockopt05.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/setsockopt/setsockopt05.c b/testcases/kernel/syscalls/setsockopt/setsockopt05.c
> index e78ef236e337..469e5a64bf71 100644
> --- a/testcases/kernel/syscalls/setsockopt/setsockopt05.c
> +++ b/testcases/kernel/syscalls/setsockopt/setsockopt05.c
> @@ -37,6 +37,7 @@ static void setup(void)
>  	int real_uid = getuid();
>  	int real_gid = getgid();
>  	int sock;
> +	int port = TST_GET_UNUSED_PORT(AF_INET, SOCK_DGRAM);
>  	struct ifreq ifr;
>  
>  	SAFE_UNSHARE(CLONE_NEWUSER);
> @@ -45,14 +46,14 @@ static void setup(void)
>  	SAFE_FILE_PRINTF("/proc/self/uid_map", "0 %d 1", real_uid);
>  	SAFE_FILE_PRINTF("/proc/self/gid_map", "0 %d 1", real_gid);
>  
> -	tst_init_sockaddr_inet_bin(&addr, INADDR_LOOPBACK, 12345);
> +	tst_init_sockaddr_inet_bin(&addr, INADDR_LOOPBACK, port);

Please don't use TST_GET_UNUSED_PORT() this way. The correct way to do
this is to set port to 0 and then read the address back using
SAFE_GETSOCKNAME() after bind(). It's the same amount of code but
without any race conditions.

>  	sock = SAFE_SOCKET(AF_INET, SOCK_DGRAM, 0);
>  	strcpy(ifr.ifr_name, "lo");
>  	ifr.ifr_mtu = 1500;
>  	SAFE_IOCTL(sock, SIOCSIFMTU, &ifr);
>  	ifr.ifr_flags = IFF_UP;
>  	SAFE_IOCTL(sock, SIOCSIFFLAGS, &ifr);
> -	SAFE_CLOSE(sock);

Don't forget to close the socket in cleanup().

> +	SAFE_BIND(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr));
>  }
>  
>  static void run(void)
> 

Though I wonder whether setsockopt(SO_NO_CHECK, 1) is really supposed to
flush the partial packet. Are you sure it's not a bug in the kernel?

-- 
Martin Doucha   mdoucha@suse.cz
QA Engineer for Software Maintenance
SUSE LINUX, s.r.o.
CORSO IIa
Krizikova 148/34
186 00 Prague 8
Czech Republic


More information about the ltp mailing list