You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.9 KiB
						
					
					
				# --- SDE-COPYRIGHT-NOTE-BEGIN --- | 
						|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. | 
						|
# | 
						|
# Filename: package/.../uclibc/uClibc-0.9.31-dnslookup-use-after-free.patch | 
						|
# Copyright (C) 2010 The OpenSDE Project | 
						|
# | 
						|
# More information can be found in the files COPYING and README. | 
						|
# | 
						|
# This patch file is dual-licensed. It is available under the license the | 
						|
# patched project is licensed under, as long as it is an OpenSource license | 
						|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms | 
						|
# of the GNU General Public License as published by the Free Software | 
						|
# Foundation; either version 2 of the License, or (at your option) any later | 
						|
# version. | 
						|
# --- SDE-COPYRIGHT-NOTE-END --- | 
						|
 | 
						|
From eb1d8c8289f466ba3ad10b9a88ab2e426b8a9dc7 Mon Sep 17 00:00:00 2001 | 
						|
From: Gabor Juhos <[email protected]> | 
						|
Date: Tue, 6 Apr 2010 09:55:19 +0200 | 
						|
Subject: [PATCH] Fix use-after-free bug in __dns_lookup | 
						|
 | 
						|
If the type of the first answer does not match with the requested type, | 
						|
then the dotted name was freed. If there are no further answers in | 
						|
the DNS reply, this pointer was used later on in the same function. | 
						|
Additionally it is passed to the caller, and caused strange | 
						|
behaviour. | 
						|
 | 
						|
Signed-off-by: Gabor Juhos <[email protected]> | 
						|
Signed-off-by: Bernhard Reutner-Fischer <[email protected]> | 
						|
--- | 
						|
 libc/inet/resolv.c |    4 +--- | 
						|
 1 files changed, 1 insertions(+), 3 deletions(-) | 
						|
 | 
						|
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c | 
						|
index 056539f..9459199 100644 | 
						|
--- a/libc/inet/resolv.c | 
						|
+++ b/libc/inet/resolv.c | 
						|
@@ -1517,10 +1517,8 @@ int attribute_hidden __dns_lookup(const char *name, | 
						|
 				memcpy(a, &ma, sizeof(ma)); | 
						|
 				if (a->atype != T_SIG && (NULL == a->buf || (type != T_A && type != T_AAAA))) | 
						|
 					break; | 
						|
-				if (a->atype != type) { | 
						|
-					free(a->dotted); | 
						|
+				if (a->atype != type) | 
						|
 					continue; | 
						|
-				} | 
						|
 				a->add_count = h.ancount - j - 1; | 
						|
 				if ((a->rdlength + sizeof(struct in_addr*)) * a->add_count > a->buflen) | 
						|
 					break; | 
						|
--  | 
						|
1.7.0 | 
						|
 | 
						|
 |