]> Zhao Yanbai Git Server - minix.git/commitdiff
RS: synchronize priv from kernel after swap 24/3124/1
authorBen Gras <ben@minix3.org>
Fri, 16 Jan 2015 13:24:24 +0000 (14:24 +0100)
committerDavid van Moolenbroek <david@minix3.org>
Thu, 17 Sep 2015 13:43:49 +0000 (13:43 +0000)
. 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

index 49e45f8eee03f9c6698f992ceffb98ebe76fb399..f6c6f200e842df4fcd7e139ed64e0230a7a26d3e 100644 (file)
@@ -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;