[Devel] Re: [PATCH] Initialize the sem->sem_pending list after restoring
Oren Laadan
orenl at cs.columbia.edu
Wed Jun 16 13:32:46 PDT 2010
Good catch - applied.
Oren.
On 06/16/2010 12:54 PM, Dan Smith wrote:
> 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 at us.ibm.com>
> ---
> 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);
>
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list