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