[PATCH] Initialize the sem->sem_pending list after restoring

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Right now, we leave (effectively) garbage in it after restart.  Not only
must this be re-initialized (since we know it was empty on checkpoint), but
it must be initialized after being copied into the final resting place.

Without this, you get lots of fun crashes in various places :)

Signed-off-by: Dan Smith <danms@xxxxxxxxxx>
---
 ipc/checkpoint_sem.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/ipc/checkpoint_sem.c b/ipc/checkpoint_sem.c
index ab1830e..43e3cdf 100644
--- a/ipc/checkpoint_sem.c
+++ b/ipc/checkpoint_sem.c
@@ -171,7 +171,7 @@ int restore_ipc_sem(struct ckpt_ctx *ctx, struct ipc_namespace *ns)
 	struct sem_array *sem;
 	struct sem *sma = NULL;
 	struct ipc_ids *sem_ids = &ns->ids[IPC_SEM_IDS];
-	int semflag, ret;
+	int semflag, ret, i;
 
 	h = ckpt_read_obj_type(ctx, sizeof(*h), CKPT_HDR_IPC_SEM);
 	if (IS_ERR(h))
@@ -222,6 +222,9 @@ int restore_ipc_sem(struct ckpt_ctx *ctx, struct ipc_namespace *ns)
 	sem = container_of(ipc, struct sem_array, sem_perm);
 	memcpy(sem->sem_base, sma, sem->sem_nsems * sizeof(*sma));
 
+	for (i = 0; i < sem->sem_nsems; i++)
+		INIT_LIST_HEAD(&sem->sem_base[i].sem_pending);
+
 	/* this is safe because no unauthorized access is possible */
 	ipc_unlock(ipc);
 
-- 
1.7.0.4

_______________________________________________
Containers mailing list
Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/containers


[Index of Archives]     [Cgroups]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux