diff -uNr krb5-1.7.1.orig/src/kadmin/server/network.c krb5-1.7.1/src/kadmin/server/network.c
--- krb5-1.7.1.orig/src/kadmin/server/network.c	2009-01-15 08:36:04.000000000 +0900
+++ krb5-1.7.1/src/kadmin/server/network.c	2011-05-03 12:42:52.000000000 +0900
@@ -1351,6 +1351,10 @@
     if (local_kaddrs != NULL)
 	krb5_free_addresses(server_handle->context, local_kaddrs);
 
+    if ((*response)->data == NULL) {
+        free(*response);
+        *response = NULL;
+    }
     krb5_kt_close(server_handle->context, kt);
 
     return ret;
diff -uNr krb5-1.7.1.orig/src/kadmin/server/schpw.c krb5-1.7.1/src/kadmin/server/schpw.c
--- krb5-1.7.1.orig/src/kadmin/server/schpw.c	2009-01-28 09:04:15.000000000 +0900
+++ krb5-1.7.1/src/kadmin/server/schpw.c	2011-05-03 12:43:36.000000000 +0900
@@ -73,8 +73,13 @@
     plen = (*ptr++ & 0xff);
     plen = (plen<<8) | (*ptr++ & 0xff);
 
-    if (plen != req->length)
-	return(KRB5KRB_AP_ERR_MODIFIED);
+    if (plen != req->length) {
+        ret = KRB5KRB_AP_ERR_MODIFIED;
+        numresult = KRB5_KPASSWD_MALFORMED;
+        strlcpy(strresult, "Request length was inconsistent",
+                sizeof(strresult));
+        goto chpwfail;
+    }
 
     /* verify version number */
 
