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

Reply via email to