Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Jan 2017 17:23:15 +0800 (CST)
From:      sdf <jiejinmv@163.com>
To:        freebsd-questions@freebsd.org
Subject:   when should we lock a process?
Message-ID:  <36a9d461.3f73.1595e7d6e67.Coremail.jiejinmv@163.com>

next in thread | raw e-mail | index | archive | help

Hi, friends. Can you see me?
I am new here and i am reading freebsd 11.0's  kernel code since these days.
I don't know the purpose of this line of code:
=================
PROC_LOCK(p);
================
which is located at sys/kern/kern_exec.c  line:394 function:do_execve().
And let me paste its context here:
 387     /*
 388      * Lock the process and set the P_INEXEC flag to indicate that
 389      * it should be left alone until we're done here.  This is
 390      * necessary to avoid race conditions - e.g. in ptrace() -
 391      * that might allow a local user to illicitly obtain elevated
 392      * privileges.
 393      */
 394     PROC_LOCK(p);
 395     KASSERT((p->p_flag & P_INEXEC) == 0,
 396         ("%s(): process already has P_INEXEC flag", __func__));
 397     p->p_flag |= P_INEXEC;
 398     PROC_UNLOCK(p);

Could some one tell me when to lock a process? In another word, What are we doing when we are locking a process.
I can trace out its definition but i want to know more.
==================================
#define PROC_LOCK(p)    mtx_lock(&(p)->p_mtx)
==================================

Thanks!
BTW:  Is this maillist for kernel questions? If my question is not suitable here, could you  tell me which maillist  is for kernel developers?


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?36a9d461.3f73.1595e7d6e67.Coremail.jiejinmv>