linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] mm/damon: Hide unnecessary information disclosures
@ 2021-12-29 13:10 SeongJae Park
  2021-12-29 13:10 ` [PATCH 1/4] mm/damon/dbgfs: Remove a unnecessary variable SeongJae Park
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: SeongJae Park @ 2021-12-29 13:10 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, SeongJae Park

DAMON is exposing some unnecessary information including kernel pointer
in kernel log and tracepoint.  This patchset hides such information.
The first patch is only for a trivial cleanup, though.

SeongJae Park (4):
  mm/damon/dbgfs: Remove a unnecessary variable
  mm/damon/vaddr: Use pr_debug() for damon_va_three_regions() failure
    logging
  mm/damon/vaddr: Hide kernel pointer from damon_va_three_regions()
    failure log
  mm/damon: Hide kernel pointer from tracepoint event

 include/trace/events/damon.h |  8 ++++----
 mm/damon/core.c              |  4 +++-
 mm/damon/dbgfs.c             |  5 ++---
 mm/damon/vaddr.c             | 10 ++++++++--
 4 files changed, 17 insertions(+), 10 deletions(-)

-- 
2.17.1



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/4] mm/damon/dbgfs: Remove a unnecessary variable
  2021-12-29 13:10 [PATCH 0/4] mm/damon: Hide unnecessary information disclosures SeongJae Park
@ 2021-12-29 13:10 ` SeongJae Park
  2021-12-29 13:10 ` [PATCH 2/4] mm/damon/vaddr: Use pr_debug() for damon_va_three_regions() failure logging SeongJae Park
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: SeongJae Park @ 2021-12-29 13:10 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, SeongJae Park

This commit removes a unnecessarily used variable in
dbgfs_target_ids_write().

Fixes: 4bc05954d007 ("mm/damon: implement a debugfs-based user space interface")
Signed-off-by: SeongJae Park <sj@kernel.org>
---
 mm/damon/dbgfs.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/mm/damon/dbgfs.c b/mm/damon/dbgfs.c
index 751c7b835684..5b899601e56c 100644
--- a/mm/damon/dbgfs.c
+++ b/mm/damon/dbgfs.c
@@ -364,7 +364,7 @@ static ssize_t dbgfs_target_ids_write(struct file *file,
 	struct damon_ctx *ctx = file->private_data;
 	struct damon_target *t, *next_t;
 	bool id_is_pid = true;
-	char *kbuf, *nrs;
+	char *kbuf;
 	unsigned long *targets;
 	ssize_t nr_targets;
 	ssize_t ret;
@@ -374,14 +374,13 @@ static ssize_t dbgfs_target_ids_write(struct file *file,
 	if (IS_ERR(kbuf))
 		return PTR_ERR(kbuf);
 
-	nrs = kbuf;
 	if (!strncmp(kbuf, "paddr\n", count)) {
 		id_is_pid = false;
 		/* target id is meaningless here, but we set it just for fun */
 		scnprintf(kbuf, count, "42    ");
 	}
 
-	targets = str_to_target_ids(nrs, count, &nr_targets);
+	targets = str_to_target_ids(kbuf, count, &nr_targets);
 	if (!targets) {
 		ret = -ENOMEM;
 		goto out;
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/4] mm/damon/vaddr: Use pr_debug() for damon_va_three_regions() failure logging
  2021-12-29 13:10 [PATCH 0/4] mm/damon: Hide unnecessary information disclosures SeongJae Park
  2021-12-29 13:10 ` [PATCH 1/4] mm/damon/dbgfs: Remove a unnecessary variable SeongJae Park
@ 2021-12-29 13:10 ` SeongJae Park
  2021-12-29 13:10 ` [PATCH 3/4] mm/damon/vaddr: Hide kernel pointer from damon_va_three_regions() failure log SeongJae Park
  2021-12-29 13:10 ` [PATCH 4/4] mm/damon: Hide kernel pointer from tracepoint event SeongJae Park
  3 siblings, 0 replies; 5+ messages in thread
From: SeongJae Park @ 2021-12-29 13:10 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, SeongJae Park

Failure of 'damon_va_three_regions()' is logged using 'pr_err()'.  But,
the function can fail in legal situations.  To avoid making users be
surprised and to keep the kernel clean, this commit makes the log to be
printed using 'pr_debug()'.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 mm/damon/vaddr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c
index 9e213a1d60c9..7997e1c000ed 100644
--- a/mm/damon/vaddr.c
+++ b/mm/damon/vaddr.c
@@ -238,7 +238,7 @@ static void __damon_va_init_regions(struct damon_ctx *ctx,
 	int i;
 
 	if (damon_va_three_regions(t, regions)) {
-		pr_err("Failed to get three regions of target %lu\n", t->id);
+		pr_debug("Failed to get three regions of target %lu\n", t->id);
 		return;
 	}
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/4] mm/damon/vaddr: Hide kernel pointer from damon_va_three_regions() failure log
  2021-12-29 13:10 [PATCH 0/4] mm/damon: Hide unnecessary information disclosures SeongJae Park
  2021-12-29 13:10 ` [PATCH 1/4] mm/damon/dbgfs: Remove a unnecessary variable SeongJae Park
  2021-12-29 13:10 ` [PATCH 2/4] mm/damon/vaddr: Use pr_debug() for damon_va_three_regions() failure logging SeongJae Park
@ 2021-12-29 13:10 ` SeongJae Park
  2021-12-29 13:10 ` [PATCH 4/4] mm/damon: Hide kernel pointer from tracepoint event SeongJae Park
  3 siblings, 0 replies; 5+ messages in thread
From: SeongJae Park @ 2021-12-29 13:10 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, SeongJae Park

The failure log message for 'damon_va_three_regions()' prints the target
id, which is a 'struct pid' pointer in the case.  To avoid exposing the
kernel pointer via the log, this commit makes the log to use the index
of the target in the context's targets list instead.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 mm/damon/vaddr.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c
index 7997e1c000ed..73ee9719f8ba 100644
--- a/mm/damon/vaddr.c
+++ b/mm/damon/vaddr.c
@@ -232,13 +232,19 @@ static int damon_va_three_regions(struct damon_target *t,
 static void __damon_va_init_regions(struct damon_ctx *ctx,
 				     struct damon_target *t)
 {
+	struct damon_target *ti;
 	struct damon_region *r;
 	struct damon_addr_range regions[3];
 	unsigned long sz = 0, nr_pieces;
-	int i;
+	int i, tidx = 0;
 
 	if (damon_va_three_regions(t, regions)) {
-		pr_debug("Failed to get three regions of target %lu\n", t->id);
+		damon_for_each_target(ti, ctx) {
+			if (ti == t)
+				break;
+			tidx++;
+		}
+		pr_debug("Failed to get three regions of %dth target\n", tidx);
 		return;
 	}
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 4/4] mm/damon: Hide kernel pointer from tracepoint event
  2021-12-29 13:10 [PATCH 0/4] mm/damon: Hide unnecessary information disclosures SeongJae Park
                   ` (2 preceding siblings ...)
  2021-12-29 13:10 ` [PATCH 3/4] mm/damon/vaddr: Hide kernel pointer from damon_va_three_regions() failure log SeongJae Park
@ 2021-12-29 13:10 ` SeongJae Park
  3 siblings, 0 replies; 5+ messages in thread
From: SeongJae Park @ 2021-12-29 13:10 UTC (permalink / raw)
  To: akpm; +Cc: linux-mm, linux-kernel, SeongJae Park

DAMON's virtual address spaces monitoring primitive uses 'struct pid *'
of the target process as its monitoring target id.  The kernel address
is exposed as-is to the user space via the DAMON tracepoint,
'damon_aggregated'.  Though primarily only privileged users are allowed
to access that, it would be better to avoid unnecessarily exposing
kernel pointers so.  Because the trace result is only required to be
able to distinguish each target, we aren't need to use the pointer
as-is.  This commit makes the tracepoint to use the index of the target
in the context's targets list as its id in the tracepoint, to hide the
kernel space address.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 include/trace/events/damon.h | 8 ++++----
 mm/damon/core.c              | 4 +++-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/include/trace/events/damon.h b/include/trace/events/damon.h
index 99ffa601e351..c79f1d4c39af 100644
--- a/include/trace/events/damon.h
+++ b/include/trace/events/damon.h
@@ -11,10 +11,10 @@
 
 TRACE_EVENT(damon_aggregated,
 
-	TP_PROTO(struct damon_target *t, struct damon_region *r,
-		unsigned int nr_regions),
+	TP_PROTO(struct damon_target *t, unsigned int target_id,
+		struct damon_region *r, unsigned int nr_regions),
 
-	TP_ARGS(t, r, nr_regions),
+	TP_ARGS(t, target_id, r, nr_regions),
 
 	TP_STRUCT__entry(
 		__field(unsigned long, target_id)
@@ -26,7 +26,7 @@ TRACE_EVENT(damon_aggregated,
 	),
 
 	TP_fast_assign(
-		__entry->target_id = t->id;
+		__entry->target_id = target_id;
 		__entry->nr_regions = nr_regions;
 		__entry->start = r->ar.start;
 		__entry->end = r->ar.end;
diff --git a/mm/damon/core.c b/mm/damon/core.c
index 6482d510dcbe..1dd153c31c9e 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -514,15 +514,17 @@ static bool kdamond_aggregate_interval_passed(struct damon_ctx *ctx)
 static void kdamond_reset_aggregated(struct damon_ctx *c)
 {
 	struct damon_target *t;
+	unsigned int ti = 0;	/* target's index */
 
 	damon_for_each_target(t, c) {
 		struct damon_region *r;
 
 		damon_for_each_region(r, t) {
-			trace_damon_aggregated(t, r, damon_nr_regions(t));
+			trace_damon_aggregated(t, ti, r, damon_nr_regions(t));
 			r->last_nr_accesses = r->nr_accesses;
 			r->nr_accesses = 0;
 		}
+		ti++;
 	}
 }
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-12-29 13:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-29 13:10 [PATCH 0/4] mm/damon: Hide unnecessary information disclosures SeongJae Park
2021-12-29 13:10 ` [PATCH 1/4] mm/damon/dbgfs: Remove a unnecessary variable SeongJae Park
2021-12-29 13:10 ` [PATCH 2/4] mm/damon/vaddr: Use pr_debug() for damon_va_three_regions() failure logging SeongJae Park
2021-12-29 13:10 ` [PATCH 3/4] mm/damon/vaddr: Hide kernel pointer from damon_va_three_regions() failure log SeongJae Park
2021-12-29 13:10 ` [PATCH 4/4] mm/damon: Hide kernel pointer from tracepoint event SeongJae Park

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).