Memory leaks?
Dan Yefimov
dan at ns15.lightwave.net.ru
Tue Jul 3 16:26:20 UTC 2007
On Tue, 3 Jul 2007, Evgeniy Khramtsov wrote:
> I've just started to implement PAM support in my application.
> All works well, but looks like I have some memory leaks.
>
> This is a very simplified version of the code to demonstrate the issue:
>
> #include <security/pam_appl.h>
> #include <stdio.h>
>
> static int misc_conv(int num_msg,
> const struct pam_message **msg,
> struct pam_response **resp,
> void *appdata_ptr)
> {
> return PAM_CONV_ERR;
> }
>
> static int auth(char *service, char *user, char *password)
> {
> int retval;
> struct pam_conv conv = {
> misc_conv,
> password
> };
> pam_handle_t *pamh = NULL;
> retval = pam_start(service, user, &conv, &pamh);
> if (retval == PAM_SUCCESS)
> retval = pam_authenticate(pamh, 0);
> printf("%s\n", pam_strerror(pamh, retval));
> pam_end(pamh, retval);
> return retval;
> }
>
> int main(int argc, char *argv[])
> {
> if (argc != 4)
> {
> printf("Usage: %s service user password\n", argv[0]);
> return 1;
> }
> char *service = argv[1];
> char *user = argv[2];
> char *password = argv[3];
> for (;;) auth(service, user, password);
> return 0;
> }
>
> As you can see I don't use malloc/calloc here. However, the memory is
> leaking and valgrind shows this (451 bytes per iteration in my case).
> The doc says that it is the caller's responsibility to release the
> responses, but I just can't understand where should I free() it.
It's meant by caller some function in the PAM module calling your conversation
function.
> Could you point me to my fault?
>
As for me, there seems to be no your fault. It looks like some module in the
module stack just didn't release memory occupied by pam_message structure(s) on
the error returned from your conversation function.
--
Sincerely Your, Dan.
More information about the Pam-list
mailing list