From 8f4f859b35498036e1bc56d0b018f38f00a82226 Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Fri, 16 Jan 2015 14:24:24 +0100 Subject: [PATCH] RS: synchronize priv from kernel after swap . make sure the priv id etc is maintained so future privctl talk about the right thing . solves broken IPC after update Change-Id: I17ed0212c22d634e6db1e80f8dcb2fb8bffe82c6 --- minix/servers/rs/update.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/minix/servers/rs/update.c b/minix/servers/rs/update.c index 49e45f8ee..f6c6f200e 100644 --- a/minix/servers/rs/update.c +++ b/minix/servers/rs/update.c @@ -266,6 +266,7 @@ int sys_upd_flags; /* Swap slots here as well. */ pid = src_rp->r_pid; endpoint = src_rpub->endpoint; + swap_slot(&src_rp, &dst_rp); /* Reassign pids and endpoints. */ @@ -276,6 +277,12 @@ int sys_upd_flags; dst_rp->r_pub->endpoint = endpoint; rproc_ptr[_ENDPOINT_P(dst_rp->r_pub->endpoint)] = dst_rp; + /* Update in-RS priv structs */ + if ((r = sys_getpriv(&src_rp->r_priv, src_rp->r_pub->endpoint)) != OK) + panic("RS: update: could not update RS copies of priv of src: %d\n", r); + if ((r = sys_getpriv(&dst_rp->r_priv, dst_rp->r_pub->endpoint)) != OK) + panic("RS: update: could not update RS copies of priv of dst: %d\n", r); + /* Adjust input pointers. */ *src_rpp = src_rp; *dst_rpp = dst_rp; -- 2.44.0