[PATCH v2 6/8] resolv: More types as unknown in ns_sprintrrf (CVE-2026-5435)
Carlos O'Donell
carlos@redhat.com
Wed Jun 17 19:47:11 GMT 2026
On 6/16/26 12:31 PM, Florian Weimer wrote:
> Specifically, CERT, TKEY, TSIG, OPT. This removes the buggy
> implementations of TSIG, fixing bug 34033, and partially
> fixing bug 34069.
LGTM.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> ---
> resolv/ns_print.c | 95 -----------------------------------------------
> 1 file changed, 95 deletions(-)
>
> diff --git a/resolv/ns_print.c b/resolv/ns_print.c
> index e58df5f35a..ab68bf2cb7 100644
> --- a/resolv/ns_print.c
> +++ b/resolv/ns_print.c
> @@ -464,96 +464,6 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
> break;
> }
>
> - case ns_t_cert: {
> - u_int c_type, key_tag, alg;
> - int n;
> - unsigned int siz;
> - char base64_cert[8192], tmp[40];
> - const char *leader;
> -
> - c_type = ns_get16(rdata); rdata += NS_INT16SZ;
> - key_tag = ns_get16(rdata); rdata += NS_INT16SZ;
> - alg = (u_int) *rdata++;
> -
> - len = SPRINTF((tmp, "%d %d %d ", c_type, key_tag, alg));
> - T(addstr(tmp, len, &buf, &buflen));
> - siz = (edata-rdata)*4/3 + 4; /* "+4" accounts for trailing \0 */
> - if (siz > sizeof(base64_cert) * 3/4) {
> - const char *str = "record too long to print";
> - T(addstr(str, strlen(str), &buf, &buflen));
> - }
> - else {
> - len = b64_ntop(rdata, edata-rdata, base64_cert, siz);
> -
> - if (len < 0)
> - goto formerr;
> - else if (len > 15) {
> - T(addstr(" (", 2, &buf, &buflen));
> - leader = "\n\t\t";
> - spaced = 0;
> - }
> - else
> - leader = " ";
> -
> - for (n = 0; n < len; n += 48) {
> - T(addstr(leader, strlen(leader),
> - &buf, &buflen));
> - T(addstr(base64_cert + n, MIN(len - n, 48),
> - &buf, &buflen));
> - }
> - if (len > 15)
> - T(addstr(" )", 2, &buf, &buflen));
> - }
> - break;
> - }
> -
> - case ns_t_tkey: {
> - /* KJD - need to complete this */
> - u_long t;
> - int mode, err, keysize;
> -
> - /* Algorithm name. */
> - T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
> - T(addstr(" ", 1, &buf, &buflen));
> -
> - /* Inception. */
> - t = ns_get32(rdata); rdata += NS_INT32SZ;
> - len = SPRINTF((tmp, "%lu ", t));
> - T(addstr(tmp, len, &buf, &buflen));
> -
> - /* Expiration. */
> - t = ns_get32(rdata); rdata += NS_INT32SZ;
> - len = SPRINTF((tmp, "%lu ", t));
> - T(addstr(tmp, len, &buf, &buflen));
> -
> - /* Mode , Error, Key Size. */
> - /* Priority, Weight, Port. */
> - mode = ns_get16(rdata); rdata += NS_INT16SZ;
> - err = ns_get16(rdata); rdata += NS_INT16SZ;
> - keysize = ns_get16(rdata); rdata += NS_INT16SZ;
> - len = SPRINTF((tmp, "%u %u %u ", mode, err, keysize));
> - T(addstr(tmp, len, &buf, &buflen));
> -
> - /* XXX need to dump key, print otherdata length & other data */
> - break;
> - }
> -
> - case ns_t_tsig: {
> - /* BEW - need to complete this */
> - int n;
> -
> - T(len = addname(msg, msglen, &rdata, origin, &buf, &buflen));
> - T(addstr(" ", 1, &buf, &buflen));
> - rdata += 8; /*%< time */
> - n = ns_get16(rdata); rdata += INT16SZ;
> - rdata += n; /*%< sig */
> - n = ns_get16(rdata); rdata += INT16SZ; /*%< original id */
> - sprintf(buf, "%d", ns_get16(rdata));
> - rdata += INT16SZ;
> - addlen(strlen(buf), &buf, &buflen);
> - break;
> - }
> -
> case ns_t_a6: {
> struct in6_addr a;
> int pbyte, pbit;
> @@ -588,11 +498,6 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
> break;
> }
>
> - case ns_t_opt: {
> - len = SPRINTF((tmp, "%u bytes", class));
> - T(addstr(tmp, len, &buf, &buflen));
> - break;
> - }
OK. All of them go to the default now. CVE is fixed.
> default:
> comment = "";
> goto hexify;
--
Cheers,
Carlos.
More information about the Libc-alpha
mailing list