[krbdev.mit.edu #9109] memory leak on macos
Anthony Sottile via RT
rt-comment at kerborg-prod-app-1.mit.edu
Thu Jan 11 01:21:50 EST 2024
Thu Jan 11 01:21:50 2024: Request 9109 was acted upon.
Transaction: Ticket created by anthony.sottile at sentry.io
Queue: krb5
Subject: memory leak on macos
Owner: Nobody
Requestors: anthony.sottile at sentry.io
Status: new
Ticket <URL: http://kerborg-prod-app-1.mit.edu/rt/Ticket/Display.html?id=9109 >
hello, I've found what I believe to be a memory leak on macos -- I've
tried to narrow it down to a simple reproduction:
```c
#include <stdbool.h>
#include <stdio.h>
#include <gssapi.h>
int main(void) {
for (int i = 0; i < 10; i += 1) {
gss_cred_id_t cred = 0;
OM_uint32 minor = 0;
OM_uint32 ret = gss_acquire_cred(
&minor, GSS_C_NO_NAME, 0, GSS_C_NO_OID_SET,
GSS_C_INITIATE, &cred, NULL, NULL
);
if (ret == GSS_S_COMPLETE) {
printf("no error\n");
gss_release_cred(&minor, &cred);
} else {
printf("got error: %d\n", ret);
}
}
}
```
compiled using:
```bash
gcc $(PKG_CONFIG_PATH=/opt/homebrew/Cellar/krb5/1.21.2/lib/pkgconfig/
pkg-config krb5-gssapi --cflags --libs) t.c
```
leaks shown using:
```bash
leaks --atExit -- ./a.out
```
note: I don't have gss set up in any way so the expected path of my
program above is the error case:
```console
$ ./a.out
got error: 458752
got error: 458752
got error: 458752
got error: 458752
got error: 458752
got error: 458752
got error: 458752
got error: 458752
got error: 458752
got error: 458752
```
this leak is the important one (the other is sort of expected, a
global error message retrievable later and is not per-call):
```
STACK OF 8 INSTANCES OF 'ROOT CYCLE: <OS_xpc_connection>':
19 dyld 0x1822eff28 start + 2236
18 a.out 0x102af7f00 main + 88
17 libgssapi_krb5.2.2.dylib 0x102bdac2c gss_acquire_cred + 36
16 libgssapi_krb5.2.2.dylib 0x102bdadc8
gss_acquire_cred_from + 400
15 libgssapi_krb5.2.2.dylib 0x102bdb180 gss_add_cred_from + 624
14 libgssapi_krb5.2.2.dylib 0x102bf8d30
spnego_gss_acquire_cred_from + 128
13 libgssapi_krb5.2.2.dylib 0x102bf8e8c get_available_mechs + 228
12 libgssapi_krb5.2.2.dylib 0x102bdadc8
gss_acquire_cred_from + 400
11 libgssapi_krb5.2.2.dylib 0x102bdb180 gss_add_cred_from + 624
10 libgssapi_krb5.2.2.dylib 0x102be919c acquire_cred_from + 68
9 libgssapi_krb5.2.2.dylib 0x102be9894
acquire_cred_context + 1664
8 libkrb5.3.3.dylib 0x102cf1a70
krb5_cccol_have_content + 92
7 libkrb5.3.3.dylib 0x102cf1788
krb5_cccol_cursor_next + 76
6 libkrb5.3.3.dylib 0x102cf44dc
api_macos_ptcursor_next + 240
5 libkrb5.3.3.dylib 0x102cf49d4 get_primary_name + 124
4 libxpc.dylib 0x182388850
xpc_connection_create_mach_service + 40
3 libxpc.dylib 0x182398f80
_xpc_connection_create + 136
2 libdispatch.dylib 0x182497838
_os_object_alloc_realized + 32
1 libobjc.A.dylib 0x1822abe00 class_createInstance + 64
0 libsystem_malloc.dylib 0x182488eb0
_malloc_zone_calloc_instrumented_or_legacy + 92
====
47 (5.98K) << TOTAL >>
----
6 (784 bytes) ROOT CYCLE: <OS_xpc_connection 0x13e0065e0> [240]
"com.apple.GSSCred" (from libkrb5.3.3.dylib) pid 599 [GSSCred]
3 (368 bytes) ROOT CYCLE: <OS_dispatch_mach 0x13e008400>
[160] "com.apple.GSSCred" (from libkrb5.3.3.dylib)
1 (64 bytes) ROOT CYCLE: <calloc in _dispatch_unote_create
0x13e0076f0> [64]
CYCLE BACK TO <OS_xpc_connection 0x13e0065e0> [240]
"com.apple.GSSCred" (from libkrb5.3.3.dylib) pid 599 [GSSCred]
1 (144 bytes) <calloc in _dispatch_unote_create 0x13e0084a0> [144]
2 (176 bytes) <calloc in _xpc_connection_cancel 0x13e0066d0> [32]
1 (144 bytes) <malloc in _vasprintf 0x13e0088b0> [144]
```
seemingly from this code here:
https://github.com/krb5/krb5/blob/ec71ac1cabbb3926f8ffaf71e1ad007e4e56e0e5/src/lib/krb5/ccache/cc_api_macos.c#L161-L224
I'm on macos 13.5.2 arm64 and using krb5 1.21.2 from homebrew
```
$ uname -a
Darwin FJJ4YYCWYX.local 22.6.0 Darwin Kernel Version 22.6.0: Wed Jul
5 22:22:05 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T6000 arm64
arm Darwin
```
anthony
More information about the krb5-bugs
mailing list