URL: https://github.com/SSSD/sssd/pull/792 Title: #792: PAM: add initial prompting configuration
jhrozek commented: """ There are some Coverity warnings: ``` Error: CLANG_WARNING: sssd-2.1.1/src/responder/pam/pam_prompting_config.c:65:5: warning: Value stored to 'ret' is never read # ret = confdb_get_bool(cdb, section, CONFDB_PC_2FA_SINGLE_PROMPT, false, # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/responder/pam/pam_prompting_config.c:65:5: note: Value stored to 'ret' is never read # ret = confdb_get_bool(cdb, section, CONFDB_PC_2FA_SINGLE_PROMPT, false, # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 63| # 64| # 65|-> ret = confdb_get_bool(cdb, section, CONFDB_PC_2FA_SINGLE_PROMPT, false, # 66| &single_2fa_prompt); # 67| ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_1ST_PROMPT, Error: CLANG_WARNING: sssd-2.1.1/src/responder/pam/pam_prompting_config.c:67:5: warning: Value stored to 'ret' is never read # ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_1ST_PROMPT, # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/responder/pam/pam_prompting_config.c:67:5: note: Value stored to 'ret' is never read # ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_1ST_PROMPT, # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 65| ret = confdb_get_bool(cdb, section, CONFDB_PC_2FA_SINGLE_PROMPT, false, # 66| &single_2fa_prompt); # 67|-> ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_1ST_PROMPT, # 68| NULL, &first_prompt); # 69| if (single_2fa_prompt) { Error: CLANG_WARNING: sssd-2.1.1/src/responder/pam/pam_prompting_config.c:70:9: warning: Value stored to 'ret' is never read # ret = pc_list_add_2fa_single(pc_list, first_prompt); # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/responder/pam/pam_prompting_config.c:70:9: note: Value stored to 'ret' is never read # ret = pc_list_add_2fa_single(pc_list, first_prompt); # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 68| NULL, &first_prompt); # 69| if (single_2fa_prompt) { # 70|-> ret = pc_list_add_2fa_single(pc_list, first_prompt); # 71| } else { # 72| ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_2ND_PROMPT, Error: CLANG_WARNING: sssd-2.1.1/src/responder/pam/pam_prompting_config.c:72:9: warning: Value stored to 'ret' is never read # ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_2ND_PROMPT, # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/responder/pam/pam_prompting_config.c:72:9: note: Value stored to 'ret' is never read # ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_2ND_PROMPT, # ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 70| ret = pc_list_add_2fa_single(pc_list, first_prompt); # 71| } else { # 72|-> ret = confdb_get_string(cdb, tmp_ctx, section, CONFDB_PC_2FA_2ND_PROMPT, # 73| NULL, &second_prompt); # 74| Error: CLANG_WARNING: sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:427:9: warning: Potential leak of memory pointed to by 'pl' # SAFEALIGN_COPY_UINT32_CHECK(&type, buf + rp, size, &rp); # ^ sssd-2.1.1/src/shared/safealign.h:105:62: note: expanded from macro 'SAFEALIGN_COPY_UINT32_CHECK' # SIZE_T_OVERFLOW(*(pctr), sizeof(uint32_t))) { return EINVAL; } \ # ^ /usr/include/asm-generic/errno-base.h:26:17: note: expanded from macro 'EINVAL' ##define EINVAL 22 /* Invalid argument */ # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:9: note: Assuming 'buf' is not equal to NULL # if (buf == NULL || size < 3 * sizeof(uint32_t)) { # ^~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:9: note: Left side of '||' is false sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:24: note: Assuming the condition is false # if (buf == NULL || size < 3 * sizeof(uint32_t)) { # ^~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:5: note: Taking false branch # if (buf == NULL || size < 3 * sizeof(uint32_t)) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:17: note: Assuming 'c' is < 'count' # for (c = 0; c < count; c++) { # ^~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:5: note: Loop condition is true. Entering loop body # for (c = 0; c < count; c++) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:428:9: note: Control jumps to 'case PC_TYPE_SC_PIN:' at line 484 # switch (type) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:485:13: note: Execution continues on line 426 # break; # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:17: note: Assuming 'c' is < 'count' # for (c = 0; c < count; c++) { # ^~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:5: note: Loop condition is true. Entering loop body # for (c = 0; c < count; c++) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:428:9: note: Control jumps to 'case PC_TYPE_2FA_SINGLE:' at line 469 # switch (type) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:472:17: note: Assuming 'str' is not equal to NULL # if (str == NULL) { # ^~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:472:13: note: Taking false branch # if (str == NULL) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:478:19: note: Calling 'pc_list_add_2fa_single' # ret = pc_list_add_2fa_single(&pl, str); # ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:276:5: note: Taking false branch # if (pc_list == NULL) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:281:9: note: Assuming 'pc' is not equal to NULL # if (pc == NULL) { # ^~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:281:5: note: Taking false branch # if (pc == NULL) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:286:44: note: '?' condition is true # pc->data.two_fa_single.prompt = strdup(prompt != NULL ? prompt # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:288:9: note: Assuming the condition is false # if (pc->data.two_fa_single.prompt == NULL) { # ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:288:5: note: Taking false branch # if (pc->data.two_fa_single.prompt == NULL) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:293:11: note: Calling 'pc_list_add_pc' # ret = pc_list_add_pc(pc_list, pc); # ^~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:166:34: note: Left side of '&&' is false # for (c = 0; *pc_list != NULL && (*pc_list)[c] != NULL; c++); /* just counting */ # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:168:11: note: Memory is allocated # pcl = realloc(*pc_list, (c + 2) * sizeof(struct prompt_config *)); # ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:169:9: note: Assuming 'pcl' is not equal to NULL # if (pcl == NULL) { # ^~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:169:5: note: Taking false branch # if (pcl == NULL) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:293:11: note: Returned allocated memory via 1st parameter # ret = pc_list_add_pc(pc_list, pc); # ^~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:294:5: note: Taking false branch # if (ret != EOK) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:301:5: note: Taking false branch # if (ret != EOK) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:478:19: note: Returned allocated memory via 1st parameter # ret = pc_list_add_2fa_single(&pl, str); # ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:480:13: note: Taking false branch # if (ret != EOK) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:483:13: note: Execution continues on line 426 # break; # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:17: note: Assuming 'c' is < 'count' # for (c = 0; c < count; c++) { # ^~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:5: note: Loop condition is true. Entering loop body # for (c = 0; c < count; c++) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:427:9: note: Left side of '||' is true # SAFEALIGN_COPY_UINT32_CHECK(&type, buf + rp, size, &rp); # ^ sssd-2.1.1/src/shared/safealign.h:104:46: note: expanded from macro 'SAFEALIGN_COPY_UINT32_CHECK' # if ((*(pctr) + sizeof(uint32_t)) > (len) || \ # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:427:9: note: Potential leak of memory pointed to by 'pl' sssd-2.1.1/src/shared/safealign.h:105:62: note: expanded from macro 'SAFEALIGN_COPY_UINT32_CHECK' # SIZE_T_OVERFLOW(*(pctr), sizeof(uint32_t))) { return EINVAL; } \ # ^ /usr/include/asm-generic/errno-base.h:26:17: note: expanded from macro 'EINVAL' ##define EINVAL 22 /* Invalid argument */ # ^ # 425| # 426| for (c = 0; c < count; c++) { # 427|-> SAFEALIGN_COPY_UINT32_CHECK(&type, buf + rp, size, &rp); # 428| switch (type) { # 429| case PC_TYPE_PASSWORD: Error: RESOURCE_LEAK (CWE-772): sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:446: alloc_fn: Storage is returned from allocation function "strndup". sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:446: var_assign: Assigning: "str" = storage returned from "strndup((char *)buf + rp, l)". sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:453: leaked_storage: Variable "str" going out of scope leaks the storage it points to. # 451| rp += l; # 452| # 453|-> SAFEALIGN_COPY_UINT32_CHECK(&l, buf + rp, size, &rp); # 454| str2 = strndup((char *) buf + rp, l); # 455| if (str2 == NULL) { Error: CLANG_WARNING: sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:453:13: warning: Potential leak of memory pointed to by 'str' # SAFEALIGN_COPY_UINT32_CHECK(&l, buf + rp, size, &rp); # ^ sssd-2.1.1/src/shared/safealign.h:105:62: note: expanded from macro 'SAFEALIGN_COPY_UINT32_CHECK' # SIZE_T_OVERFLOW(*(pctr), sizeof(uint32_t))) { return EINVAL; } \ # ^ /usr/include/asm-generic/errno-base.h:26:17: note: expanded from macro 'EINVAL' ##define EINVAL 22 /* Invalid argument */ # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:9: note: Assuming 'buf' is not equal to NULL # if (buf == NULL || size < 3 * sizeof(uint32_t)) { # ^~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:9: note: Left side of '||' is false sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:24: note: Assuming the condition is false # if (buf == NULL || size < 3 * sizeof(uint32_t)) { # ^~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:419:5: note: Taking false branch # if (buf == NULL || size < 3 * sizeof(uint32_t)) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:17: note: Assuming 'c' is < 'count' # for (c = 0; c < count; c++) { # ^~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:426:5: note: Loop condition is true. Entering loop body # for (c = 0; c < count; c++) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:428:9: note: Control jumps to 'case PC_TYPE_2FA:' at line 444 # switch (type) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:446:19: note: Memory is allocated # str = strndup((char *) buf + rp, l); # ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:447:17: note: Assuming 'str' is not equal to NULL # if (str == NULL) { # ^~~~~~~~~~~ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:447:13: note: Taking false branch # if (str == NULL) { # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:453:13: note: Left side of '||' is true # SAFEALIGN_COPY_UINT32_CHECK(&l, buf + rp, size, &rp); # ^ sssd-2.1.1/src/shared/safealign.h:104:46: note: expanded from macro 'SAFEALIGN_COPY_UINT32_CHECK' # if ((*(pctr) + sizeof(uint32_t)) > (len) || \ # ^ sssd-2.1.1/src/sss_client/pam_sss_prompt_config.c:453:13: note: Potential leak of memory pointed to by 'str' sssd-2.1.1/src/shared/safealign.h:105:62: note: expanded from macro 'SAFEALIGN_COPY_UINT32_CHECK' # SIZE_T_OVERFLOW(*(pctr), sizeof(uint32_t))) { return EINVAL; } \ # ^ /usr/include/asm-generic/errno-base.h:26:17: note: expanded from macro 'EINVAL' ##define EINVAL 22 /* Invalid argument */ # ^ # 451| rp += l; # 452| # 453|-> SAFEALIGN_COPY_UINT32_CHECK(&l, buf + rp, size, &rp); # 454| str2 = strndup((char *) buf + rp, l); # 455| if (str2 == NULL) { ``` """ See the full comment at https://github.com/SSSD/sssd/pull/792#issuecomment-477368290
_______________________________________________ sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org