mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	This PR backports upstream fix for CVE-2020-8037. This fix is only relevant for tcpdump package, tcpdump-mini is not affeted by this issue. Signed-off-by: Jan Pavlinec <jan.pavlinec@nic.cz> [added missing commit description] Signed-off-by: Petr Štetiar <ynezz@true.cz>
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/print-ppp.c
 | |
| +++ b/print-ppp.c
 | |
| @@ -1368,19 +1368,29 @@ trunc:
 | |
|  }
 | |
|  
 | |
|  #ifndef TCPDUMP_MINI
 | |
| +/*
 | |
| + * Un-escape RFC 1662 PPP in HDLC-like framing, with octet escapes.
 | |
| + * The length argument is the on-the-wire length, not the captured
 | |
| + * length; we can only un-escape the captured part.
 | |
| + */
 | |
|  static void
 | |
|  ppp_hdlc(netdissect_options *ndo,
 | |
|           const u_char *p, int length)
 | |
|  {
 | |
| +	u_int caplen = ndo->ndo_snapend - p;
 | |
|  	u_char *b, *t, c;
 | |
|  	const u_char *s;
 | |
| -	int i, proto;
 | |
| +	u_int i;
 | |
| +	int proto;
 | |
|  	const void *se;
 | |
|  
 | |
| +	if (caplen == 0)
 | |
| +		return;
 | |
| +
 | |
|          if (length <= 0)
 | |
|                  return;
 | |
|  
 | |
| -	b = (u_char *)malloc(length);
 | |
| +	b = (u_char *)malloc(caplen);
 | |
|  	if (b == NULL)
 | |
|  		return;
 | |
|  
 | |
| @@ -1389,10 +1399,10 @@ ppp_hdlc(netdissect_options *ndo,
 | |
|  	 * Do this so that we dont overwrite the original packet
 | |
|  	 * contents.
 | |
|  	 */
 | |
| -	for (s = p, t = b, i = length; i > 0 && ND_TTEST(*s); i--) {
 | |
| +	for (s = p, t = b, i = caplen; i != 0; i--) {
 | |
|  		c = *s++;
 | |
|  		if (c == 0x7d) {
 | |
| -			if (i <= 1 || !ND_TTEST(*s))
 | |
| +			if (i <= 1)
 | |
|  				break;
 | |
|  			i--;
 | |
|  			c = *s++ ^ 0x20;
 |