tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pam_krb5.c - -Werror=format-overflow



In article <CACQjD2FQ=7ABLqxrF7GrO8GvRm03OE55G_mRe4zAM4080h_Kiw%mail.gmail.com@localhost>,
Santhosh Raju  <fox%netbsd.org@localhost> wrote:
>-=-=-=-=-=-
>
>Hello
>
>While working with kamil@ on MKLIBCSANITIZER based build, I came
>across a compile error in pam_krb5.c
>
>--- dependall-pam_krb5 ---
>/home/fox/projects/netbsd/obj-wip/destdir.amd64/usr/include/security/pam_modules.h:
>In function 'pam_sm_setcred':
>/home/fox/projects/netbsd/src-wip/lib/libpam/modules/pam_krb5/pam_krb5.c:489:6:
>error: null destination pointer [-Werror=format-overflow=]
>      sprintf(p, "%d", getpid());
>      ^~~~~~~~~~~~~~~~~~~~~~~~~~
>/home/fox/projects/netbsd/src-wip/lib/libpam/modules/pam_krb5/pam_krb5.c:485:6:
>error: null destination pointer [-Werror=format-overflow=]
>      sprintf(p, "%d", pwd->pw_uid);
>      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>This error is reproducible in gcc version 8.3.0, but not in gcc
>version 5.5.0 in NetBSD 8.1/amd4 (my build / test environment). It
>was also reproducible under gcc version 7.4.0 in Ubuntu (thanks to
>help from Ayushi who helped me out in testing the scenario there).
>
>After some contemplation on how to resolve this issue, I decided to
>replace sprintf(3) with snprinft(3) since this would just truncate the
>output in case of an overflow. I have attached a patch showing the
>changes.
>
>The "n" for the snprintf(3) has been chosen as PATH_MAX + 16 since
>this is the argument passed into to the calloc(3) when allocating
>space for "p". In addition to this (not shown in the patch), I think
>we should also keep track of the remaining buffer size left after each
>snprintf(3) invocation and break out of the loop when buffer size
>becomes less than 1 to prevent a buffer overflow.
>
>for example
>
>buffer_size = PATH_MAX  + 16
>
>...
>
>buffer_size -= strlen(p)
>p += strlen(p)
>
>Since this change is in one of the userland tools which is an
>integral part in the NetBSD src tree, I seek advice on this change and it's
>potential implications and if this is the right way to solve it. The
>other option would be to add a -Wno-error=format-overflow and leave
>the code as is.
>
>On a side note, this error happens when the optimization flag is set
>to -O2 and the compile goes through when -O0 is passed in as the flag.

Thanks, should be fixed now.

christos



Home | Main Index | Thread Index | Old Index