[11/28] seccomp: Move filter position into seccomp_entry

Submitted by Cyrill Gorcunov on March 20, 2018, 9:42 p.m.

Details

Message ID 20180320214313.25326-12-gorcunov@gmail.com
State Rejected
Series "seccomp, v2: Add support for per-thread tracking"
Headers show

Commit Message

Cyrill Gorcunov March 20, 2018, 9:42 p.m.
From: Cyrill Gorcunov <gorcunov@virtuozzo.com>

Since it will serve per-thread offsets.

Signed-off-by: Cyrill Gorcunov <gorcunov@virtuozzo.com>
---
 criu/cr-dump.c         |  2 +-
 criu/include/seccomp.h |  1 +
 criu/seccomp.c         | 12 +++++++-----
 3 files changed, 9 insertions(+), 6 deletions(-)

Patch hide | download patch | download mbox

diff --git a/criu/cr-dump.c b/criu/cr-dump.c
index 3bc07e6c5cf3..7aabd4736905 100644
--- a/criu/cr-dump.c
+++ b/criu/cr-dump.c
@@ -775,7 +775,7 @@  static int dump_task_core_all(struct parasite_ctl *ctl,
 
 		if (entry->mode == SECCOMP_MODE_FILTER) {
 			thread_core->has_seccomp_filter = true;
-			thread_core->seccomp_filter = dmpi(item)->last_filter;
+			thread_core->seccomp_filter = entry->last_filter;
 		}
 	}
 
diff --git a/criu/include/seccomp.h b/criu/include/seccomp.h
index f21f493e17a0..7e38ee2ea7fd 100644
--- a/criu/include/seccomp.h
+++ b/criu/include/seccomp.h
@@ -31,6 +31,7 @@  struct pstree_item;
 
 struct seccomp_entry {
 	pid_t			tid_real;
+	size_t			last_filter;
 	unsigned int		mode;
 };
 
diff --git a/criu/seccomp.c b/criu/seccomp.c
index 1f525633d3c2..4256f8d2ca12 100644
--- a/criu/seccomp.c
+++ b/criu/seccomp.c
@@ -93,8 +93,8 @@  static int collect_filter_for_pstree(struct pstree_item *item)
 {
 	struct seccomp_metadata meta_buf, *meta = &meta_buf;
 	struct seccomp_info *infos = NULL, *cursor;
-	struct seccomp_entry *entry;
-	int info_count, i, last_filter, ret = -1;
+	struct seccomp_entry *entry, *entry_parent;
+	int info_count, i, ret = -1;
 	struct sock_filter buf[BPF_MAXINSNS];
 	void *m;
 
@@ -139,8 +139,10 @@  static int collect_filter_for_pstree(struct pstree_item *item)
 			}
 		}
 
-		last_filter = dmpi(item->parent)->last_filter;
-		inherited = find_inherited(last_filter, buf, len, meta);
+		entry_parent = seccomp_find_entry(item->parent, item->parent->pid->real);
+		if (!entry_parent)
+			goto out;
+		inherited = find_inherited(entry_parent->last_filter, buf, len, meta);
 		if (inherited) {
 			bool found = false;
 
@@ -200,7 +202,7 @@  static int collect_filter_for_pstree(struct pstree_item *item)
 
 	next_filter_id += info_count;
 
-	dmpi(item)->last_filter = infos->id;
+	entry->last_filter = infos->id;
 
 	/* Don't free the part of the tree we just successfully acquired */
 	infos = NULL;