diff --git a/modules/memleak/memleak.c b/modules/memleak/memleak.c index 660da77dcb387655f953b5e9ab2b79d5f411d26a..d693b598fc6d2e394e83b11e2696aa9261650fee 100755 --- a/modules/memleak/memleak.c +++ b/modules/memleak/memleak.c @@ -636,7 +636,8 @@ int memleak_handler_cmd(int cmd, unsigned long arg) htab = tab; if (htab->state != MEMLEAK_STATE_OFF && - (cmd == MEMLEAK_CMD_RESULT || cmd == MEMLEAK_CMD_ENALBE)) { + (cmd == MEMLEAK_CMD_RESULT || cmd == MEMLEAK_CMD_ENALBE) && + memleak_ref == 0) { pr_info("htab busy wait\n"); return -EAGAIN; } diff --git a/modules/memleak/objects.c b/modules/memleak/objects.c index 13b0fef951c9523ce7fcc0d9d061cf5693d27580..fda21b6be79158cef38cbee8d9f63a1267e02bd5 100644 --- a/modules/memleak/objects.c +++ b/modules/memleak/objects.c @@ -43,6 +43,8 @@ static int compare_one_object(struct object *object, unsigned char *dst, int siz int i ; int valid_num = 0; unsigned char *src = (unsigned char *)object->ptr; + + if (dst == NULL || src == NULL) return 0; for (i = 0; i < size; i++) { @@ -85,7 +87,7 @@ static int find_similar_object(struct object_info *info, struct object *object, valid++; } - if (valid > max) { + if (valid >= max) { max = valid; *object = tmp; object->valid_object = max;