TTY: tty_buffer, warn on leaks
authorJiri Slaby <jslaby@suse.cz>
Fri, 7 Sep 2018 13:19:06 +0000 (15:19 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Sep 2018 14:07:25 +0000 (16:07 +0200)
When we leak some tty buffer, warn about that. For that we need to
account the memory used also in the tty_buffer_free_all function. On
other locations, the accounting is handled correctly.

Note that we do not account the free list, as that was accounted in
tty_buffer_free before put on the free list.

I have been using this patch for ages, so let's see if anybody else
encounters any issues.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/tty_buffer.c

index c996b68..76151c0 100644 (file)
@@ -118,9 +118,12 @@ void tty_buffer_free_all(struct tty_port *port)
        struct tty_bufhead *buf = &port->buf;
        struct tty_buffer *p, *next;
        struct llist_node *llist;
+       unsigned int freed = 0;
+       int still_used;
 
        while ((p = buf->head) != NULL) {
                buf->head = p->next;
+               freed += p->size;
                if (p->size > 0)
                        kfree(p);
        }
@@ -132,7 +135,9 @@ void tty_buffer_free_all(struct tty_port *port)
        buf->head = &buf->sentinel;
        buf->tail = &buf->sentinel;
 
-       atomic_set(&buf->mem_used, 0);
+       still_used = atomic_xchg(&buf->mem_used, 0);
+       WARN(still_used != freed, "we still have not freed %d bytes!",
+                       still_used - freed);
 }
 
 /**