[2846] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

krb5-libs/518: missing malloc return-value checks in lib/krb5

daemon@ATHENA.MIT.EDU (mhpower@MIT.EDU)
Mon Dec 29 03:07:18 1997

Resent-From: gnats@rt-11.MIT.EDU (GNATS Management)
Resent-To: krb5-unassigned@RT-11.MIT.EDU
Resent-Reply-To: krb5-bugs@MIT.EDU, mhpower@MIT.EDU
Date: Mon, 29 Dec 1997 03:06:23 EST
From: mhpower@MIT.EDU
Reply-To: mhpower@MIT.EDU
To: krb5-bugs@MIT.EDU


>Number:         518
>Category:       krb5-libs
>Synopsis:       missing malloc return-value checks in lib/krb5
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    krb5-unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   unknown
>Arrival-Date:   Mon Dec 29 03:07:00 EST 1997
>Last-Modified:
>Originator:     Matt Power
>Organization:
	MIT
>Release:        current
>Environment:
	any
System:	any
Machine:	any
>Description:
	In some portions of the code under lib/krb5, the return
	value of malloc is not checked. This can result in
	anomalous behavior if the return value is NULL.
>How-To-Repeat:
	Call the library functions in an environment in which
	there is little free virtual memory.
>Fix:
*** krb5-current/src/lib/krb5/asn.1/asn1buf.c.old	Sun Dec 28 03:04:45 1997
--- krb5-current/src/lib/krb5/asn.1/asn1buf.c	Mon Dec 29 02:13:06 1997
***************
*** 237,238 ****
--- 237,242 ----
    (*code)->data = (char*)malloc((((*code)->length)+1)*sizeof(char));
+   if ((*code)->data == NULL){
+     free(*code);
+     return ENOMEM;
+   }
    for(i=0; i < (*code)->length; i++)

*** krb5-current/src/lib/krb5/krb/chpw.c.old	Sun Dec 28 03:05:05 1997
--- krb5-current/src/lib/krb5/krb/chpw.c	Mon Dec 29 01:48:46 1997
***************
*** 33,34 ****
--- 33,36 ----
      packet->data = (char *) malloc(packet->length);
+     if (packet->data == NULL)
+ 	return(ENOMEM);        
      ptr = packet->data;
***************
*** 178,179 ****
--- 180,185 ----
  	result_data->data = (char *) malloc(result_data->length);
+ 	if (result_data->data == NULL) {
+ 	    ret = ENOMEM;
+ 	    goto cleanup;
+ 	}
  	memcpy(result_data->data, ptr, result_data->length);

*** krb5-current/src/lib/krb5/krb/preauth.c.old	Sun Dec 28 03:05:09 1997
--- krb5-current/src/lib/krb5/krb/preauth.c	Mon Dec 29 02:00:03 1997
***************
*** 480,481 ****
--- 480,484 ----
  			 prompt_len+ strlen(sep3) + 1);
+     if (p == NULL) {
+ 	return NULL;
+     }
      if (challenge_len) {
***************
*** 542,544 ****
--- 545,554 ----
        char *passcode = malloc(pcsize+1);
+       if (passcode == NULL) {
+ 	return ENOMEM;
+       }
        prompt = handle_sam_labels(sam_challenge);
+       if (prompt == NULL) {
+ 	free(passcode);
+ 	return ENOMEM;
+       }
        retval = krb5_read_password(context, prompt, 0, passcode, &pcsize);
***************
*** 554,555 ****
--- 564,568 ----
        prompt = handle_sam_labels(sam_challenge);
+       if (prompt == NULL) {
+ 	return ENOMEM;
+       }
        retval = sam_get_pass_from_user(context, etype_info, key_proc, 

*** krb5-current/src/lib/krb5/os/changepw.c.old	Sun Dec 28 03:05:13 1997
--- krb5-current/src/lib/krb5/os/changepw.c	Mon Dec 29 02:03:06 1997
***************
*** 127,130 ****
--- 127,132 ----
      
      addr_p = (struct sockaddr *) malloc(sizeof(struct sockaddr) * count);
+     if (addr_p == NULL)
+ 	return ENOMEM; 
  
      host = hostlist[0];
***************
*** 168,171 ****
--- 170,175 ----
  			realloc ((char *)addr_p,
  				 sizeof(struct sockaddr) * count);
+ 		    if (addr_p == NULL)
+ 			return ENOMEM;
  		}
  	    }

*** krb5-current/src/lib/krb5/os/locate_kdc.c.old	Sun Dec 28 03:05:15 1997
--- krb5-current/src/lib/krb5/os/locate_kdc.c	Mon Dec 29 02:03:34 1997
***************
*** 150,153 ****
--- 150,155 ----
  
      addr_p = (struct sockaddr *)malloc (sizeof (struct sockaddr) * count);
+     if (addr_p == NULL)
+ 	return ENOMEM; 
  
      for (i=0, out=0; hostlist[i]; i++) {
***************
*** 196,199 ****
--- 198,203 ----
  			realloc ((char *)addr_p,
  				 sizeof(struct sockaddr) * count);
+ 		    if (addr_p == NULL)
+ 			return ENOMEM; 
  		}
  		if (sec_udpport && !port) {
>Audit-Trail:
>Unformatted:

home help back first fref pref prev next nref lref last post