Resolves: #1882606 - in.telnetd needs to tolerate temporary EIO errors
This commit is contained in:
		
							parent
							
								
									b0d878d6ae
								
							
						
					
					
						commit
						7fe48cbcb5
					
				
							
								
								
									
										42
									
								
								telnet-0.17-pty-retry.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								telnet-0.17-pty-retry.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| --- a/telnetd/telnetd.c
 | ||||
| +++ b/telnetd/telnetd.c
 | ||||
| @@ -772,7 +772,6 @@ void telnet(int f, int p)
 | ||||
|      int on = 1; | ||||
|      char *HE; | ||||
|      const char *IM; | ||||
| -    int pty_read_ok = 0; /* track whether the pty read has worked yet */
 | ||||
|   | ||||
|      /* | ||||
|       * Initialize the slc mapping table. | ||||
| @@ -1086,19 +1085,24 @@ void telnet(int f, int p)
 | ||||
|  	 * Something to read from the pty... | ||||
|  	 */ | ||||
|  	if (FD_ISSET(p, &ibits)) { | ||||
| +	    int eio = 0;
 | ||||
| +read_pty:
 | ||||
|  	    pcc = read(p, ptyibuf, BUFSIZ); | ||||
| -	    /*
 | ||||
| -	     * On some systems, if we try to read something
 | ||||
| -	     * off the master side before the slave side is
 | ||||
| -	     * opened, we get EIO.
 | ||||
| -	     */
 | ||||
| -	    if (pcc < 0 && (errno == EWOULDBLOCK || (errno == EIO && pty_read_ok == 0))) {
 | ||||
| +	    if (pcc < 0 && errno == EWOULDBLOCK) {
 | ||||
|  		pcc = 0; | ||||
|  	    }  | ||||
| +	    /*
 | ||||
| +	     * If we try to read something off the master side while the slave
 | ||||
| +	     * side is temporarily closed by login process, we get EIO.
 | ||||
| +	     */
 | ||||
| +	    else if (pcc < 0 && errno == EIO && eio < 1000) {
 | ||||
| +		    eio++;
 | ||||
| +		    poll(NULL, 0, 10);
 | ||||
| +		    goto read_pty;
 | ||||
| +	    }
 | ||||
|  	    else { | ||||
|  		if (pcc <= 0) | ||||
|  		    break; | ||||
| -		pty_read_ok = 1;	/* mark connection up for read */
 | ||||
|  #ifdef	LINEMODE | ||||
|  				/* | ||||
|  				 * If ioctl from pty, pass it through net | ||||
| @ -3,7 +3,7 @@ | ||||
| Summary: The client program for the Telnet remote login protocol | ||||
| Name: telnet | ||||
| Version: 0.17 | ||||
| Release: 80%{?dist} | ||||
| Release: 81%{?dist} | ||||
| Epoch: 1 | ||||
| License: BSD | ||||
| Source0: ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/netkit-telnet-%{version}.tar.gz | ||||
| @ -41,6 +41,7 @@ Patch30: netkit-telnet-0.17-manpage.patch | ||||
| Patch31: netkit-telnet-0.17-telnetrc.patch | ||||
| Patch32: telnet-log-address.patch | ||||
| Patch33: telnet-0.17-overflow-exploit.patch | ||||
| Patch34: telnet-0.17-pty-retry.patch | ||||
| 
 | ||||
| BuildRequires: ncurses-devel systemd gcc gcc-c++ | ||||
| BuildRequires: perl-interpreter | ||||
| @ -97,6 +98,7 @@ mv telnet telnet-NETKIT | ||||
| %patch31 -p1 -b .telnetrc | ||||
| %patch32 -p1 -b .log-address | ||||
| %patch33 -p1 -b .overflow | ||||
| %patch34 -p1 -b .pty-retry | ||||
| 
 | ||||
| %build | ||||
| %ifarch s390 s390x | ||||
| @ -161,10 +163,13 @@ install -p -m644 %SOURCE6 ${RPM_BUILD_ROOT}%{_unitdir}/telnet.socket | ||||
| %{_mandir}/man8/telnetd.8* | ||||
| 
 | ||||
| %changelog | ||||
| * Fri Sep 25 2020 Michal Ruprich <mruprich@redhat.com> - 1:0.17-81 | ||||
| - Resolves: #1882606 - in.telnetd needs to tolerate temporary EIO errors | ||||
| 
 | ||||
| * Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-80 | ||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild | ||||
| 
 | ||||
| * Fri Mar 27 2020 Michal Ruprich <michalruprich@gmail.com> - 1:0.17-79 | ||||
| * Fri Mar 27 2020 Michal Ruprich <mruprich@redhat.com> - 1:0.17-79 | ||||
| - Resolves: #1814478 - Arbitrary remote code execution in utility.c via short writes or urgent data | ||||
| 
 | ||||
| * Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:0.17-78 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user