|
|
d2813a |
diff -urNp a/snmplib/snmp_api.c b/snmplib/snmp_api.c
|
|
|
d2813a |
--- a/snmplib/snmp_api.c 2020-09-29 14:08:09.821479662 +0200
|
|
|
d2813a |
+++ b/snmplib/snmp_api.c 2020-10-01 10:15:46.607374362 +0200
|
|
|
d2813a |
@@ -769,7 +769,7 @@ snmp_sess_init(netsnmp_session * session
|
|
|
d2813a |
session->retries = SNMP_DEFAULT_RETRIES;
|
|
|
d2813a |
session->version = SNMP_DEFAULT_VERSION;
|
|
|
d2813a |
session->securityModel = SNMP_DEFAULT_SECMODEL;
|
|
|
d2813a |
- session->rcvMsgMaxSize = SNMP_MAX_MSG_SIZE;
|
|
|
d2813a |
+ session->rcvMsgMaxSize = netsnmp_max_send_msg_size();
|
|
|
d2813a |
session->sndMsgMaxSize = netsnmp_max_send_msg_size();
|
|
|
d2813a |
session->flags |= SNMP_FLAGS_DONT_PROBE;
|
|
|
d2813a |
}
|
|
|
d2813a |
@@ -2731,7 +2731,7 @@ snmpv3_packet_build(netsnmp_session * se
|
|
|
d2813a |
/*
|
|
|
d2813a |
* build a scopedPDU structure into spdu_buf
|
|
|
d2813a |
*/
|
|
|
d2813a |
- spdu_buf_len = SNMP_MAX_MSG_SIZE;
|
|
|
d2813a |
+ spdu_buf_len = sizeof(spdu_buf);
|
|
|
d2813a |
DEBUGDUMPSECTION("send", "ScopedPdu");
|
|
|
d2813a |
cp = snmpv3_scopedPDU_header_build(pdu, spdu_buf, &spdu_buf_len,
|
|
|
d2813a |
&spdu_hdr_e);
|
|
|
d2813a |
@@ -2743,6 +2743,11 @@ snmpv3_packet_build(netsnmp_session * se
|
|
|
d2813a |
*/
|
|
|
d2813a |
DEBUGPRINTPDUTYPE("send", ((pdu_data) ? *pdu_data : 0x00));
|
|
|
d2813a |
if (pdu_data) {
|
|
|
d2813a |
+ if (cp + pdu_data_len > spdu_buf + sizeof(spdu_buf)) {
|
|
|
d2813a |
+ snmp_log(LOG_ERR, "%s: PDU too big (%" NETSNMP_PRIz "d > %" NETSNMP_PRIz "d)\n",
|
|
|
d2813a |
+ __func__, pdu_data_len, sizeof(spdu_buf));
|
|
|
d2813a |
+ return -1;
|
|
|
d2813a |
+ }
|
|
|
d2813a |
memcpy(cp, pdu_data, pdu_data_len);
|
|
|
d2813a |
cp += pdu_data_len;
|
|
|
d2813a |
} else {
|
|
|
d2813a |
@@ -2756,7 +2761,7 @@ snmpv3_packet_build(netsnmp_session * se
|
|
|
d2813a |
* re-encode the actual ASN.1 length of the scopedPdu
|
|
|
d2813a |
*/
|
|
|
d2813a |
spdu_len = cp - spdu_hdr_e; /* length of scopedPdu minus ASN.1 headers */
|
|
|
d2813a |
- spdu_buf_len = SNMP_MAX_MSG_SIZE;
|
|
|
d2813a |
+ spdu_buf_len = sizeof(spdu_buf);
|
|
|
d2813a |
if (asn_build_sequence(spdu_buf, &spdu_buf_len,
|
|
|
d2813a |
(u_char) (ASN_SEQUENCE | ASN_CONSTRUCTOR),
|
|
|
d2813a |
spdu_len) == NULL)
|
|
|
d2813a |
@@ -2769,7 +2774,7 @@ snmpv3_packet_build(netsnmp_session * se
|
|
|
d2813a |
* message - the entire message to transmitted on the wire is returned
|
|
|
d2813a |
*/
|
|
|
d2813a |
cp = NULL;
|
|
|
d2813a |
- *out_length = SNMP_MAX_MSG_SIZE;
|
|
|
d2813a |
+ *out_length = sizeof(spdu_buf);
|
|
|
d2813a |
DEBUGDUMPSECTION("send", "SM msgSecurityParameters");
|
|
|
d2813a |
sptr = find_sec_mod(pdu->securityModel);
|
|
|
d2813a |
if (sptr && sptr->encode_forward) {
|