@@ -177,9 +177,10 @@ class MallocChecker : public Checker<check::DeadSymbols,
177
177
II_free (nullptr ), II_realloc(nullptr ), II_calloc(nullptr ),
178
178
II_valloc(nullptr ), II_reallocf(nullptr ), II_strndup(nullptr ),
179
179
II_strdup(nullptr ), II_win_strdup(nullptr ), II_kmalloc(nullptr ),
180
- II_if_nameindex(nullptr ), II_if_freenameindex(nullptr ),
181
- II_wcsdup(nullptr ), II_win_wcsdup(nullptr ), II_g_malloc(nullptr ),
182
- II_g_malloc0(nullptr ), II_g_realloc(nullptr ), II_g_try_malloc(nullptr ),
180
+ II_kfree(nullptr ), II_if_nameindex(nullptr ),
181
+ II_if_freenameindex(nullptr ), II_wcsdup(nullptr ),
182
+ II_win_wcsdup(nullptr ), II_g_malloc(nullptr ), II_g_malloc0(nullptr ),
183
+ II_g_realloc(nullptr ), II_g_try_malloc(nullptr ),
183
184
II_g_try_malloc0(nullptr ), II_g_try_realloc(nullptr ),
184
185
II_g_free(nullptr ), II_g_memdup(nullptr ), II_g_malloc_n(nullptr ),
185
186
II_g_malloc0_n(nullptr ), II_g_realloc_n(nullptr ),
@@ -249,13 +250,13 @@ class MallocChecker : public Checker<check::DeadSymbols,
249
250
mutable IdentifierInfo *II_alloca, *II_win_alloca, *II_malloc, *II_free,
250
251
*II_realloc, *II_calloc, *II_valloc, *II_reallocf,
251
252
*II_strndup, *II_strdup, *II_win_strdup, *II_kmalloc,
252
- *II_if_nameindex , *II_if_freenameindex , *II_wcsdup ,
253
- *II_win_wcsdup , *II_g_malloc , *II_g_malloc0 ,
254
- *II_g_realloc , *II_g_try_malloc , *II_g_try_malloc0 ,
255
- *II_g_try_realloc , *II_g_free , *II_g_memdup ,
256
- *II_g_malloc_n , *II_g_malloc0_n , *II_g_realloc_n ,
257
- *II_g_try_malloc_n , *II_g_try_malloc0_n ,
258
- *II_g_try_realloc_n;
253
+ *II_kfree , *II_if_nameindex , *II_if_freenameindex ,
254
+ *II_wcsdup , *II_win_wcsdup , *II_g_malloc ,
255
+ *II_g_malloc0 , *II_g_realloc , *II_g_try_malloc ,
256
+ *II_g_try_malloc0 , *II_g_try_realloc , *II_g_free ,
257
+ *II_g_memdup , *II_g_malloc_n , *II_g_malloc0_n ,
258
+ *II_g_realloc_n , *II_g_try_malloc_n ,
259
+ *II_g_try_malloc0_n, * II_g_try_realloc_n;
259
260
mutable Optional<uint64_t > KernelZeroFlagVal;
260
261
261
262
void initIdentifierInfo (ASTContext &C) const ;
@@ -598,6 +599,7 @@ void MallocChecker::initIdentifierInfo(ASTContext &Ctx) const {
598
599
II_strndup = &Ctx.Idents .get (" strndup" );
599
600
II_wcsdup = &Ctx.Idents .get (" wcsdup" );
600
601
II_kmalloc = &Ctx.Idents .get (" kmalloc" );
602
+ II_kfree = &Ctx.Idents .get (" kfree" );
601
603
II_if_nameindex = &Ctx.Idents .get (" if_nameindex" );
602
604
II_if_freenameindex = &Ctx.Idents .get (" if_freenameindex" );
603
605
@@ -657,7 +659,7 @@ bool MallocChecker::isCMemFunction(const FunctionDecl *FD,
657
659
658
660
if (Family == AF_Malloc && CheckFree) {
659
661
if (FunI == II_free || FunI == II_realloc || FunI == II_reallocf ||
660
- FunI == II_g_free)
662
+ FunI == II_g_free || FunI == II_kfree )
661
663
return true ;
662
664
}
663
665
@@ -874,7 +876,7 @@ void MallocChecker::checkPostStmt(const CallExpr *CE, CheckerContext &C) const {
874
876
State = CallocMem (C, CE, State);
875
877
State = ProcessZeroAllocation (C, CE, 0 , State);
876
878
State = ProcessZeroAllocation (C, CE, 1 , State);
877
- } else if (FunI == II_free || FunI == II_g_free) {
879
+ } else if (FunI == II_free || FunI == II_g_free || FunI == II_kfree ) {
878
880
State = FreeMemAux (C, CE, State, 0 , false , ReleasedAllocatedMemory);
879
881
} else if (FunI == II_strdup || FunI == II_win_strdup ||
880
882
FunI == II_wcsdup || FunI == II_win_wcsdup) {
0 commit comments