Re: [PATCH v2] scsi: target: iscsi: validate CHAP_R length before base64 decode
Alexandru Hossu <[email protected]> Wed, 20 May 2026 09:53:16 -0700 (PDT)
| Newsgroups | org.kernel.vger.target-devel,org.kernel.vger.linux-scsi,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
On Wed, May 20, 2026, Maurizio Lombardi <[email protected]> wrote: > There is something that doesn't totally convince me about this length check. > Couldn't chap_r contain those Base64 padding '=' characters that > would make strlen(chap_r) too big to pass this check? Correct. For SHA-256, a padded encoding of the 32-byte digest is 44 characters (43 data + one '='), but DIV_ROUND_UP(32 * 4, 3) = 43, so a legitimate padded response would be incorrectly rejected. v3 strips trailing '=' before the comparison: size_t r_len = strlen(chap_r); while (r_len > 0 && chap_r[r_len - 1] == '=') r_len--; if (r_len > DIV_ROUND_UP(chap->digest_size * 4, 3)) { pr_err("Malformed CHAP_R: base64 payload too long\n"); goto out; } chap_base64_decode() already handles '=' by returning early, so stripping them from the pre-check does not affect decoding. v3 below. Alexandru