binder: avoid user addresses in debug logs
authorCarlos Llamas <cmllamas@google.com>
Fri, 1 Dec 2023 17:21:55 +0000 (17:21 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Dec 2023 00:23:40 +0000 (09:23 +0900)
Prefer logging vma offsets instead of addresses or simply drop the debug
log altogether if not useful. Note this covers the instances affected by
the switch to store addresses as unsigned long. However, there are other
sections in the driver that could do the same.

Signed-off-by: Carlos Llamas <cmllamas@google.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20231201172212.1813387-27-cmllamas@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/android/binder.c
drivers/android/binder_alloc.c

index 45674af6310fe84b31dfd68bad37814459447879..c4bb18305e77b62f8f8a750f737c8b9513694321 100644 (file)
@@ -5980,9 +5980,9 @@ static void print_binder_transaction_ilocked(struct seq_file *m,
        }
        if (buffer->target_node)
                seq_printf(m, " node %d", buffer->target_node->debug_id);
-       seq_printf(m, " size %zd:%zd data %lx\n",
+       seq_printf(m, " size %zd:%zd offset %lx\n",
                   buffer->data_size, buffer->offsets_size,
-                  buffer->user_data);
+                  proc->alloc.buffer - buffer->user_data);
 }
 
 static void print_binder_work_ilocked(struct seq_file *m,
index c3fc9096686770c0151e3007c8fde2fcc0b4e9f2..5783675f297081168da29f8665ac9d2b84ce5979 100644 (file)
@@ -250,8 +250,8 @@ static int binder_install_single_page(struct binder_alloc *alloc,
 
        ret = vm_insert_page(alloc->vma, addr, page);
        if (ret) {
-               pr_err("%d: %s failed to insert page at %lx with %d\n",
-                      alloc->pid, __func__, addr, ret);
+               pr_err("%d: %s failed to insert page at offset %lx with %d\n",
+                      alloc->pid, __func__, addr - alloc->buffer, ret);
                __free_page(page);
                ret = -ENOMEM;
                goto out;
@@ -305,10 +305,6 @@ static void binder_lru_freelist_del(struct binder_alloc *alloc,
        struct binder_lru_page *page;
        unsigned long page_addr;
 
-       binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
-                          "%d: pages %lx-%lx\n",
-                          alloc->pid, start, end);
-
        trace_binder_update_page_range(alloc, true, start, end);
 
        for (page_addr = start; page_addr < end; page_addr += PAGE_SIZE) {
@@ -939,8 +935,8 @@ void binder_alloc_deferred_release(struct binder_alloc *alloc)
                                              &alloc->pages[i].lru);
                        page_addr = alloc->buffer + i * PAGE_SIZE;
                        binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
-                                    "%s: %d: page %d at %lx %s\n",
-                                    __func__, alloc->pid, i, page_addr,
+                                    "%s: %d: page %d %s\n",
+                                    __func__, alloc->pid, i,
                                     on_lru ? "on lru" : "active");
                        __free_page(alloc->pages[i].page_ptr);
                        page_count++;
@@ -974,7 +970,8 @@ void binder_alloc_print_allocated(struct seq_file *m,
        for (n = rb_first(&alloc->allocated_buffers); n; n = rb_next(n)) {
                buffer = rb_entry(n, struct binder_buffer, rb_node);
                seq_printf(m, "  buffer %d: %lx size %zd:%zd:%zd %s\n",
-                          buffer->debug_id, buffer->user_data,
+                          buffer->debug_id,
+                          buffer->user_data - alloc->buffer,
                           buffer->data_size, buffer->offsets_size,
                           buffer->extra_buffers_size,
                           buffer->transaction ? "active" : "delivered");