Skip to content

Commit e7a94d4

Browse files
authored
Fix a double-free bug (#2112)
* Fix a double-free bug * Also fix the externally-managed-memory case * Try to get tests to pass using cwd
1 parent 5befc7d commit e7a94d4

4 files changed

Lines changed: 144 additions & 0 deletions

File tree

cuda_bindings/cuda/bindings/driver.pyx.in

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11081,6 +11081,7 @@ cdef class CUDA_BATCH_MEM_OP_NODE_PARAMS_v1_st:
1108111081
{{if 'CUDA_BATCH_MEM_OP_NODE_PARAMS_v1_st.paramArray' in found_struct}}
1108211082
if self._paramArray is not NULL:
1108311083
free(self._paramArray)
11084+
self._pvt_ptr[0].paramArray = NULL
1108411085
{{endif}}
1108511086
def getPtr(self):
1108611087
return <void_ptr>self._pvt_ptr
@@ -11148,6 +11149,7 @@ cdef class CUDA_BATCH_MEM_OP_NODE_PARAMS_v1_st:
1114811149
def paramArray(self, val):
1114911150
if len(val) == 0:
1115011151
free(self._paramArray)
11152+
self._paramArray = NULL
1115111153
self._paramArray_length = 0
1115211154
self._pvt_ptr[0].paramArray = NULL
1115311155
else:
@@ -11216,6 +11218,7 @@ cdef class CUDA_BATCH_MEM_OP_NODE_PARAMS_v2_st:
1121611218
{{if 'CUDA_BATCH_MEM_OP_NODE_PARAMS_v2_st.paramArray' in found_struct}}
1121711219
if self._paramArray is not NULL:
1121811220
free(self._paramArray)
11221+
self._pvt_ptr[0].paramArray = NULL
1121911222
{{endif}}
1122011223
def getPtr(self):
1122111224
return <void_ptr>self._pvt_ptr
@@ -11283,6 +11286,7 @@ cdef class CUDA_BATCH_MEM_OP_NODE_PARAMS_v2_st:
1128311286
def paramArray(self, val):
1128411287
if len(val) == 0:
1128511288
free(self._paramArray)
11289+
self._paramArray = NULL
1128611290
self._paramArray_length = 0
1128711291
self._pvt_ptr[0].paramArray = NULL
1128811292
else:
@@ -14623,6 +14627,7 @@ cdef class CUlaunchConfig_st:
1462314627
{{if 'CUlaunchConfig_st.attrs' in found_struct}}
1462414628
if self._attrs is not NULL:
1462514629
free(self._attrs)
14630+
self._pvt_ptr[0].attrs = NULL
1462614631
{{endif}}
1462714632
def getPtr(self):
1462814633
return <void_ptr>self._pvt_ptr
@@ -14774,6 +14779,7 @@ cdef class CUlaunchConfig_st:
1477414779
def attrs(self, val):
1477514780
if len(val) == 0:
1477614781
free(self._attrs)
14782+
self._attrs = NULL
1477714783
self._attrs_length = 0
1477814784
self._pvt_ptr[0].attrs = NULL
1477914785
else:
@@ -15084,10 +15090,12 @@ cdef class CUctxCreateParams_st:
1508415090
{{if 'CUctxCreateParams_st.execAffinityParams' in found_struct}}
1508515091
if self._execAffinityParams is not NULL:
1508615092
free(self._execAffinityParams)
15093+
self._pvt_ptr[0].execAffinityParams = NULL
1508715094
{{endif}}
1508815095
{{if 'CUctxCreateParams_st.cigParams' in found_struct}}
1508915096
if self._cigParams is not NULL:
1509015097
free(self._cigParams)
15098+
self._pvt_ptr[0].cigParams = NULL
1509115099
{{endif}}
1509215100
def getPtr(self):
1509315101
return <void_ptr>self._pvt_ptr
@@ -15124,6 +15132,7 @@ cdef class CUctxCreateParams_st:
1512415132
def execAffinityParams(self, val):
1512515133
if len(val) == 0:
1512615134
free(self._execAffinityParams)
15135+
self._execAffinityParams = NULL
1512715136
self._execAffinityParams_length = 0
1512815137
self._pvt_ptr[0].execAffinityParams = NULL
1512915138
else:
@@ -15155,6 +15164,7 @@ cdef class CUctxCreateParams_st:
1515515164
def cigParams(self, val):
1515615165
if len(val) == 0:
1515715166
free(self._cigParams)
15167+
self._cigParams = NULL
1515815168
self._cigParams_length = 0
1515915169
self._pvt_ptr[0].cigParams = NULL
1516015170
else:
@@ -15272,6 +15282,7 @@ cdef class CUstreamCigCaptureParams_st:
1527215282
{{if 'CUstreamCigCaptureParams_st.streamCigParams' in found_struct}}
1527315283
if self._streamCigParams is not NULL:
1527415284
free(self._streamCigParams)
15285+
self._pvt_ptr[0].streamCigParams = NULL
1527515286
{{endif}}
1527615287
def getPtr(self):
1527715288
return <void_ptr>self._pvt_ptr
@@ -15296,6 +15307,7 @@ cdef class CUstreamCigCaptureParams_st:
1529615307
def streamCigParams(self, val):
1529715308
if len(val) == 0:
1529815309
free(self._streamCigParams)
15310+
self._streamCigParams = NULL
1529915311
self._streamCigParams_length = 0
1530015312
self._pvt_ptr[0].streamCigParams = NULL
1530115313
else:
@@ -20485,10 +20497,12 @@ cdef class CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st:
2048520497
{{if 'CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st.extSemArray' in found_struct}}
2048620498
if self._extSemArray is not NULL:
2048720499
free(self._extSemArray)
20500+
self._pvt_ptr[0].extSemArray = NULL
2048820501
{{endif}}
2048920502
{{if 'CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st.paramsArray' in found_struct}}
2049020503
if self._paramsArray is not NULL:
2049120504
free(self._paramsArray)
20505+
self._pvt_ptr[0].paramsArray = NULL
2049220506
{{endif}}
2049320507
def getPtr(self):
2049420508
return <void_ptr>self._pvt_ptr
@@ -20525,6 +20539,7 @@ cdef class CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st:
2052520539
def extSemArray(self, val):
2052620540
if len(val) == 0:
2052720541
free(self._extSemArray)
20542+
self._extSemArray = NULL
2052820543
self._extSemArray_length = 0
2052920544
self._pvt_ptr[0].extSemArray = NULL
2053020545
else:
@@ -20548,6 +20563,7 @@ cdef class CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st:
2054820563
def paramsArray(self, val):
2054920564
if len(val) == 0:
2055020565
free(self._paramsArray)
20566+
self._paramsArray = NULL
2055120567
self._paramsArray_length = 0
2055220568
self._pvt_ptr[0].paramsArray = NULL
2055320569
else:
@@ -20610,10 +20626,12 @@ cdef class CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st:
2061020626
{{if 'CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st.extSemArray' in found_struct}}
2061120627
if self._extSemArray is not NULL:
2061220628
free(self._extSemArray)
20629+
self._pvt_ptr[0].extSemArray = NULL
2061320630
{{endif}}
2061420631
{{if 'CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st.paramsArray' in found_struct}}
2061520632
if self._paramsArray is not NULL:
2061620633
free(self._paramsArray)
20634+
self._pvt_ptr[0].paramsArray = NULL
2061720635
{{endif}}
2061820636
def getPtr(self):
2061920637
return <void_ptr>self._pvt_ptr
@@ -20650,6 +20668,7 @@ cdef class CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st:
2065020668
def extSemArray(self, val):
2065120669
if len(val) == 0:
2065220670
free(self._extSemArray)
20671+
self._extSemArray = NULL
2065320672
self._extSemArray_length = 0
2065420673
self._pvt_ptr[0].extSemArray = NULL
2065520674
else:
@@ -20673,6 +20692,7 @@ cdef class CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st:
2067320692
def paramsArray(self, val):
2067420693
if len(val) == 0:
2067520694
free(self._paramsArray)
20695+
self._paramsArray = NULL
2067620696
self._paramsArray_length = 0
2067720697
self._pvt_ptr[0].paramsArray = NULL
2067820698
else:
@@ -20735,10 +20755,12 @@ cdef class CUDA_EXT_SEM_WAIT_NODE_PARAMS_st:
2073520755
{{if 'CUDA_EXT_SEM_WAIT_NODE_PARAMS_st.extSemArray' in found_struct}}
2073620756
if self._extSemArray is not NULL:
2073720757
free(self._extSemArray)
20758+
self._pvt_ptr[0].extSemArray = NULL
2073820759
{{endif}}
2073920760
{{if 'CUDA_EXT_SEM_WAIT_NODE_PARAMS_st.paramsArray' in found_struct}}
2074020761
if self._paramsArray is not NULL:
2074120762
free(self._paramsArray)
20763+
self._pvt_ptr[0].paramsArray = NULL
2074220764
{{endif}}
2074320765
def getPtr(self):
2074420766
return <void_ptr>self._pvt_ptr
@@ -20775,6 +20797,7 @@ cdef class CUDA_EXT_SEM_WAIT_NODE_PARAMS_st:
2077520797
def extSemArray(self, val):
2077620798
if len(val) == 0:
2077720799
free(self._extSemArray)
20800+
self._extSemArray = NULL
2077820801
self._extSemArray_length = 0
2077920802
self._pvt_ptr[0].extSemArray = NULL
2078020803
else:
@@ -20798,6 +20821,7 @@ cdef class CUDA_EXT_SEM_WAIT_NODE_PARAMS_st:
2079820821
def paramsArray(self, val):
2079920822
if len(val) == 0:
2080020823
free(self._paramsArray)
20824+
self._paramsArray = NULL
2080120825
self._paramsArray_length = 0
2080220826
self._pvt_ptr[0].paramsArray = NULL
2080320827
else:
@@ -20860,10 +20884,12 @@ cdef class CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st:
2086020884
{{if 'CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st.extSemArray' in found_struct}}
2086120885
if self._extSemArray is not NULL:
2086220886
free(self._extSemArray)
20887+
self._pvt_ptr[0].extSemArray = NULL
2086320888
{{endif}}
2086420889
{{if 'CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st.paramsArray' in found_struct}}
2086520890
if self._paramsArray is not NULL:
2086620891
free(self._paramsArray)
20892+
self._pvt_ptr[0].paramsArray = NULL
2086720893
{{endif}}
2086820894
def getPtr(self):
2086920895
return <void_ptr>self._pvt_ptr
@@ -20900,6 +20926,7 @@ cdef class CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st:
2090020926
def extSemArray(self, val):
2090120927
if len(val) == 0:
2090220928
free(self._extSemArray)
20929+
self._extSemArray = NULL
2090320930
self._extSemArray_length = 0
2090420931
self._pvt_ptr[0].extSemArray = NULL
2090520932
else:
@@ -20923,6 +20950,7 @@ cdef class CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st:
2092320950
def paramsArray(self, val):
2092420951
if len(val) == 0:
2092520952
free(self._paramsArray)
20953+
self._paramsArray = NULL
2092620954
self._paramsArray_length = 0
2092720955
self._pvt_ptr[0].paramsArray = NULL
2092820956
else:
@@ -23290,6 +23318,7 @@ cdef class CUDA_MEM_ALLOC_NODE_PARAMS_v1_st:
2329023318
{{if 'CUDA_MEM_ALLOC_NODE_PARAMS_v1_st.accessDescs' in found_struct}}
2329123319
if self._accessDescs is not NULL:
2329223320
free(self._accessDescs)
23321+
self._pvt_ptr[0].accessDescs = NULL
2329323322
{{endif}}
2329423323
def getPtr(self):
2329523324
return <void_ptr>self._pvt_ptr
@@ -23346,6 +23375,7 @@ cdef class CUDA_MEM_ALLOC_NODE_PARAMS_v1_st:
2334623375
def accessDescs(self, val):
2334723376
if len(val) == 0:
2334823377
free(self._accessDescs)
23378+
self._accessDescs = NULL
2334923379
self._accessDescs_length = 0
2335023380
self._pvt_ptr[0].accessDescs = NULL
2335123381
else:
@@ -23451,6 +23481,7 @@ cdef class CUDA_MEM_ALLOC_NODE_PARAMS_v2_st:
2345123481
{{if 'CUDA_MEM_ALLOC_NODE_PARAMS_v2_st.accessDescs' in found_struct}}
2345223482
if self._accessDescs is not NULL:
2345323483
free(self._accessDescs)
23484+
self._pvt_ptr[0].accessDescs = NULL
2345423485
{{endif}}
2345523486
def getPtr(self):
2345623487
return <void_ptr>self._pvt_ptr
@@ -23507,6 +23538,7 @@ cdef class CUDA_MEM_ALLOC_NODE_PARAMS_v2_st:
2350723538
def accessDescs(self, val):
2350823539
if len(val) == 0:
2350923540
free(self._accessDescs)
23541+
self._accessDescs = NULL
2351023542
self._accessDescs_length = 0
2351123543
self._pvt_ptr[0].accessDescs = NULL
2351223544
else:
@@ -24465,6 +24497,7 @@ cdef class CUcheckpointRestoreArgs_st:
2446524497
{{if 'CUcheckpointRestoreArgs_st.gpuPairs' in found_struct}}
2446624498
if self._gpuPairs is not NULL:
2446724499
free(self._gpuPairs)
24500+
self._pvt_ptr[0].gpuPairs = NULL
2446824501
{{endif}}
2446924502
def getPtr(self):
2447024503
return <void_ptr>self._pvt_ptr
@@ -24507,6 +24540,7 @@ cdef class CUcheckpointRestoreArgs_st:
2450724540
def gpuPairs(self, val):
2450824541
if len(val) == 0:
2450924542
free(self._gpuPairs)
24543+
self._gpuPairs = NULL
2451024544
self._gpuPairs_length = 0
2451124545
self._pvt_ptr[0].gpuPairs = NULL
2451224546
else:
@@ -25231,6 +25265,7 @@ cdef class CUdevResource_st:
2523125265
{{if 'CUdevResource_st.nextResource' in found_struct}}
2523225266
if self._nextResource is not NULL:
2523325267
free(self._nextResource)
25268+
self._pvt_ptr[0].nextResource = NULL
2523425269
{{endif}}
2523525270
def getPtr(self):
2523625271
return <void_ptr>self._pvt_ptr
@@ -25345,6 +25380,7 @@ cdef class CUdevResource_st:
2534525380
def nextResource(self, val):
2534625381
if len(val) == 0:
2534725382
free(self._nextResource)
25383+
self._nextResource = NULL
2534825384
self._nextResource_length = 0
2534925385
self._pvt_ptr[0].nextResource = NULL
2535025386
else:

0 commit comments

Comments
 (0)