]> Git Repo - linux.git/commitdiff
iscsi-target: chap auth shouldn't match username with trailing garbage
authorEric Seppanen <[email protected]>
Wed, 20 Nov 2013 22:19:52 +0000 (14:19 -0800)
committerNicholas Bellinger <[email protected]>
Thu, 21 Nov 2013 06:03:57 +0000 (22:03 -0800)
In iSCSI negotiations with initiator CHAP enabled, usernames with
trailing garbage are permitted, because the string comparison only
checks the strlen of the configured username.

e.g. "usernameXXXXX" will be permitted to match "username".

Just check one more byte so the trailing null char is also matched.

Signed-off-by: Eric Seppanen <[email protected]>
Cc: <[email protected]> #3.1+
Signed-off-by: Nicholas Bellinger <[email protected]>
drivers/target/iscsi/iscsi_target_auth.c

index 164b87138faf3af6b22e54a0c73236dc4302ac72..de77d9aa22c6329b41d515a157e49d54451edf50 100644 (file)
@@ -146,6 +146,7 @@ static int chap_server_compute_md5(
        unsigned char client_digest[MD5_SIGNATURE_SIZE];
        unsigned char server_digest[MD5_SIGNATURE_SIZE];
        unsigned char chap_n[MAX_CHAP_N_SIZE], chap_r[MAX_RESPONSE_LENGTH];
+       size_t compare_len;
        struct iscsi_chap *chap = conn->auth_protocol;
        struct crypto_hash *tfm;
        struct hash_desc desc;
@@ -184,7 +185,9 @@ static int chap_server_compute_md5(
                goto out;
        }
 
-       if (memcmp(chap_n, auth->userid, strlen(auth->userid)) != 0) {
+       /* Include the terminating NULL in the compare */
+       compare_len = strlen(auth->userid) + 1;
+       if (strncmp(chap_n, auth->userid, compare_len) != 0) {
                pr_err("CHAP_N values do not match!\n");
                goto out;
        }
This page took 0.05656 seconds and 4 git commands to generate.