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. _______________________________________________ Pam-list mailing list Pam-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/pam-list