Commit ff53bac
committed
Fix leak and use-after-free of session objects on session close
SessionObjects were kept alive in allObjects as tombstones with
valid=false after their session closed, so every object ever created
lingered until C_Finalize, holding its Mutex*. Long-running clients
saw unbounded memory growth dominated by mutex objects.
Add refcounting to OSObject and have SessionObjectStore, HandleManager,
and C_FindObjectsInit acquire/release across the boundaries where
session-object pointers escape the store mutex. Releases happen outside
the relevant lock to avoid widening critical sections. Also erase from
allObjects in the store cleanup paths to avoid a double-free against
the destructor.1 parent 679f33d commit ff53bac
11 files changed
Lines changed: 434 additions & 312 deletions
File tree
- src/lib
- handle_mgr
- test
- object_store
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2048 | 2048 | | |
2049 | 2049 | | |
2050 | 2050 | | |
| 2051 | + | |
| 2052 | + | |
| 2053 | + | |
| 2054 | + | |
| 2055 | + | |
| 2056 | + | |
| 2057 | + | |
| 2058 | + | |
| 2059 | + | |
| 2060 | + | |
| 2061 | + | |
| 2062 | + | |
| 2063 | + | |
| 2064 | + | |
2051 | 2065 | | |
2052 | | - | |
2053 | | - | |
| 2066 | + | |
| 2067 | + | |
2054 | 2068 | | |
2055 | 2069 | | |
2056 | 2070 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
| 38 | + | |
38 | 39 | | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
42 | | - | |
| 43 | + | |
| 44 | + | |
43 | 45 | | |
44 | 46 | | |
45 | 47 | | |
46 | 48 | | |
47 | | - | |
| 49 | + | |
| 50 | + | |
48 | 51 | | |
49 | 52 | | |
50 | 53 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
| 38 | + | |
37 | 39 | | |
38 | 40 | | |
39 | 41 | | |
| |||
54 | 56 | | |
55 | 57 | | |
56 | 58 | | |
57 | | - | |
| 59 | + | |
| 60 | + | |
58 | 61 | | |
59 | 62 | | |
60 | 63 | | |
| |||
0 commit comments