File fix-CVE-2025-26465.patch of Package openssh.37508


diff --git a/krl.c b/krl.c
index 51a2871..4ecb2c7 100644
--- a/krl.c
+++ b/krl.c
@@ -672,6 +672,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf)
 			break;
 		case KRL_SECTION_CERT_SERIAL_BITMAP:
 			if (rs->lo - bitmap_start > INT_MAX) {
+				r = SSH_ERR_INVALID_FORMAT;
 				error("%s: insane bitmap gap", __func__);
 				goto out;
 			}
@@ -1057,6 +1058,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp)
 		goto out;
 
 	if ((krl = ssh_krl_init()) == NULL) {
+		r = SSH_ERR_ALLOC_FAIL;
 		error("%s: alloc failed", __func__);
 		goto out;
 	}
#diff --git a/packet.c b/packet.c
#index 72803fd..fa0f7ca 100644
#--- a/packet.c
#+++ b/packet.c
#@@ -1839,6 +1839,14 @@ ssh_packet_read_poll_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
# 			if ((r = sshpkt_get_string_direct(ssh, &d, &len)) != 0)
# 				return r;
# 			DBG(debug("Received SSH2_MSG_PING len %zu", len));
#+			if (!ssh->state->after_authentication) {
#+				DBG(debug("Won't reply to PING in preauth"));
#+				break;
#+			}
#+			if (ssh_packet_is_rekeying(ssh)) {
#+				DBG(debug("Won't reply to PING during KEX"));
#+				break;
#+			}
# 			if ((r = sshpkt_start(ssh, SSH2_MSG_PONG)) != 0 ||
# 			    (r = sshpkt_put_string(ssh, d, len)) != 0 ||
# 			    (r = sshpkt_send(ssh)) != 0)
#diff --git a/ssh-agent.c b/ssh-agent.c
#index 73276f6..607c4a0 100644
#--- a/ssh-agent.c
#+++ b/ssh-agent.c
#@@ -1207,6 +1207,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
# 	    "restrict-destination-v00@openssh.com") == 0) {
# 		if (*dcsp != NULL) {
# 			error_f("%s already set", ext_name);
#+			r = SSH_ERR_INVALID_FORMAT;
# 			goto out;
# 		}
# 		if ((r = sshbuf_froms(m, &b)) != 0) {
#@@ -1216,6 +1217,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
# 		while (sshbuf_len(b) != 0) {
# 			if (*ndcsp >= AGENT_MAX_DEST_CONSTRAINTS) {
# 				error_f("too many %s constraints", ext_name);
#+				r = SSH_ERR_INVALID_FORMAT;
# 				goto out;
# 			}
# 			*dcsp = xrecallocarray(*dcsp, *ndcsp, *ndcsp + 1,
#@@ -1233,6 +1235,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
# 		}
# 		if (*certs != NULL) {
# 			error_f("%s already set", ext_name);
#+			r = SSH_ERR_INVALID_FORMAT;
# 			goto out;
# 		}
# 		if ((r = sshbuf_get_u8(m, &v)) != 0 ||
#@@ -1244,6 +1247,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
# 		while (sshbuf_len(b) != 0) {
# 			if (*ncerts >= AGENT_MAX_EXT_CERTS) {
# 				error_f("too many %s constraints", ext_name);
#+				r = SSH_ERR_INVALID_FORMAT;
# 				goto out;
# 			}
# 			*certs = xrecallocarray(*certs, *ncerts, *ncerts + 1,
#@@ -1744,6 +1748,7 @@ process_ext_session_bind(SocketEntry *e)
# 	/* record new key/sid */
# 	if (e->nsession_ids >= AGENT_MAX_SESSION_IDS) {
# 		error_f("too many session IDs recorded");
#+		r = -1;
# 		goto out;
# 	}
# 	e->session_ids = xrecallocarray(e->session_ids, e->nsession_ids,
diff --git a/ssh-sk-client.c b/ssh-sk-client.c
index c00c633..27d27a2 100644
--- a/ssh-sk-client.c
+++ b/ssh-sk-client.c
#@@ -429,6 +429,7 @@ sshsk_load_resident(const char *provider_path, const char *device,
# 		}
# 		if ((srk = calloc(1, sizeof(*srk))) == NULL) {
# 			error_f("calloc failed");
#+			r = SSH_ERR_ALLOC_FAIL;
# 			goto out;
# 		}
# 		srk->key = key;
@@ -440,6 +440,7 @@ sshsk_load_resident(const char *provider_path, const char *device,
 		if ((tmp = recallocarray(keys, nkeys, nkeys + 1,
 		    sizeof(*keys))) == NULL) {
 			error("%s: recallocarray keys failed", __func__);
+			r = SSH_ERR_ALLOC_FAIL;
 			goto out;
 		}
 		debug("%s: keys[%zu]: %s %s", __func__,
diff --git a/sshconnect2.c b/sshconnect2.c
index 9940833..9751b68 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -94,7 +94,7 @@ verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh)
 static int
 verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh)
 {
-	if (verify_host_key(xxx_host, xxx_hostaddr, hostkey) == -1)
+	if (verify_host_key(xxx_host, xxx_hostaddr, hostkey) != 0)
 		fatal("Host key verification failed.");
 	return 0;
 }
@@ -692,6 +692,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
 
 	if ((pktype = sshkey_type_from_name(pkalg)) == KEY_UNSPEC) {
 		debug("%s: server sent unknown pkalg %s", __func__, pkalg);
+		r = SSH_ERR_INVALID_FORMAT;
 		goto done;
 	}
 	if ((r = sshkey_from_blob(pkblob, blen, &key)) != 0) {
@@ -702,6 +703,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
 		error("input_userauth_pk_ok: type mismatch "
 		    "for decoded key (received %d, expected %d)",
 		    key->type, pktype);
+		r = SSH_ERR_INVALID_FORMAT;
 		goto done;
 	}
 
@@ -721,6 +723,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
 		    SSH_FP_DEFAULT);
 		error("%s: server replied with unknown key: %s %s", __func__,
 		    sshkey_type(key), fp == NULL ? "<ERROR>" : fp);
+		r = SSH_ERR_INVALID_FORMAT;
 		goto done;
 	}
 	ident = format_identity(id);
diff --git a/sshsig.c b/sshsig.c
index 72bbf73..a88e939 100644
--- a/sshsig.c
+++ b/sshsig.c
@@ -877,6 +877,7 @@ cert_filter_principals(const char *path, u_long linenum,
 	}
 	if ((principals = sshbuf_dup_string(nprincipals)) == NULL) {
 		error("%s: buffer error", __func__);
+		r = SSH_ERR_ALLOC_FAIL;
 		goto out;
 	}
 	/* success */
openSUSE Build Service is sponsored by