diff mbox series

mm/cma: change print format of pointer in pr_debug() With %p, the pointer will be hashed and print (____ptrval____) instead.

Message ID 20231227061825.116177-1-luoxiaobing0926@gmail.com (mailing list archive)
State New
Headers show
Series mm/cma: change print format of pointer in pr_debug() With %p, the pointer will be hashed and print (____ptrval____) instead. | expand

Commit Message

Xiaobing Luo Dec. 27, 2023, 6:18 a.m. UTC
[    0.070467] cma: cma_alloc(cma (____ptrval____), count 256, align 8)
 [    0.073003] cma: cma_alloc(): returned (____ptrval____)

Use 0x%px instead of %p to print the pointer. Then the print will be like:

 [    0.054963] cma: cma_alloc(cma 0xffffffde9ad42a60, count 256, align 8)
 [    0.057385] cma: cma_alloc(): returned 0xfffffffe003b0000

Signed-off-by: Xiaobing Luo <luoxiaobing0926@gmail.com>
---
 mm/cma.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Matthew Wilcox Dec. 27, 2023, 9:56 a.m. UTC | #1
On Wed, Dec 27, 2023 at 06:18:25AM +0000, Xiaobing Luo wrote:
>  [    0.070467] cma: cma_alloc(cma (____ptrval____), count 256, align 8)
>  [    0.073003] cma: cma_alloc(): returned (____ptrval____)
> 
> Use 0x%px instead of %p to print the pointer. Then the print will be like:
> 
>  [    0.054963] cma: cma_alloc(cma 0xffffffde9ad42a60, count 256, align 8)
>  [    0.057385] cma: cma_alloc(): returned 0xfffffffe003b0000

Please explain why we should leak this information to userspace,
making it easy for an attacker?
diff mbox series

Patch

diff --git a/mm/cma.c b/mm/cma.c
index 2b2494fd6b59..4559f903df8f 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -440,7 +440,7 @@  struct page *cma_alloc(struct cma *cma, unsigned long count,
 	if (!cma || !cma->count || !cma->bitmap)
 		goto out;
 
-	pr_debug("%s(cma %p, name: %s, count %lu, align %d)\n", __func__,
+	pr_debug("%s(cma 0x%px, name: %s, count %lu, align %d)\n", __func__,
 		(void *)cma, cma->name, count, align);
 
 	if (!count)
@@ -487,7 +487,7 @@  struct page *cma_alloc(struct cma *cma, unsigned long count,
 		if (ret != -EBUSY)
 			break;
 
-		pr_debug("%s(): memory range at pfn 0x%lx %p is busy, retrying\n",
+		pr_debug("%s(): memory range at pfn 0x%lx 0x%px is busy, retrying\n",
 			 __func__, pfn, pfn_to_page(pfn));
 
 		trace_cma_alloc_busy_retry(cma->name, pfn, pfn_to_page(pfn),
@@ -514,7 +514,7 @@  struct page *cma_alloc(struct cma *cma, unsigned long count,
 		cma_debug_show_areas(cma);
 	}
 
-	pr_debug("%s(): returned %p\n", __func__, page);
+	pr_debug("%s(): returned 0x%px\n", __func__, page);
 out:
 	if (page) {
 		count_vm_event(CMA_ALLOC_SUCCESS);
@@ -539,7 +539,7 @@  bool cma_pages_valid(struct cma *cma, const struct page *pages,
 	pfn = page_to_pfn(pages);
 
 	if (pfn < cma->base_pfn || pfn >= cma->base_pfn + cma->count) {
-		pr_debug("%s(page %p, count %lu)\n", __func__,
+		pr_debug("%s(page 0x%px, count %lu)\n", __func__,
 						(void *)pages, count);
 		return false;
 	}
@@ -565,7 +565,7 @@  bool cma_release(struct cma *cma, const struct page *pages,
 	if (!cma_pages_valid(cma, pages, count))
 		return false;
 
-	pr_debug("%s(page %p, count %lu)\n", __func__, (void *)pages, count);
+	pr_debug("%s(page 0x%px, count %lu)\n", __func__, (void *)pages, count);
 
 	pfn = page_to_pfn(pages);