The CONST_CAST macro is a cleaner and more reliable way to write to the const
task_struct::pid.

Cc: Oleg Nesterov <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Signed-off-by: Richard Guy Briggs <[email protected]>
---
 fs/exec.c     |    4 +---
 kernel/fork.c |    5 +----
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/fs/exec.c b/fs/exec.c
index a6b585e..1d2369d 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -906,8 +906,6 @@ static int de_thread(struct task_struct *tsk)
         */
        if (!thread_group_leader(tsk)) {
                struct task_struct *leader = tsk->group_leader;
-               /* tast_struct::pid is const pid_t, hence the ugly cast */
-               pid_t *pid_p = (pid_t*)&(tsk->pid);
 
                sig->notify_count = -1; /* for exit_notify() */
                for (;;) {
@@ -950,7 +948,7 @@ static int de_thread(struct task_struct *tsk)
                 * Note: The old leader also uses this pid until release_task
                 *       is called.  Odd but simple and correct.
                 */
-               *pid_p = leader->pid;
+               CONST_CAST(pid_t, tsk->pid) = leader->pid;
                change_pid(tsk, PIDTYPE_PID, task_pid(leader));
                transfer_pid(leader, tsk, PIDTYPE_PGID);
                transfer_pid(leader, tsk, PIDTYPE_SID);
diff --git a/kernel/fork.c b/kernel/fork.c
index 296e564..207c543 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1135,7 +1135,6 @@ static struct task_struct *copy_process(unsigned long 
clone_flags,
 {
        int retval;
        struct task_struct *p;
-       pid_t *pid_p;
 
        if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
                return ERR_PTR(-EINVAL);
@@ -1391,9 +1390,7 @@ static struct task_struct *copy_process(unsigned long 
clone_flags,
 
        /* ok, now we should be set up.. */
 
-       /* tast_struct::pid is const pid_t, hence the ugly cast */
-       pid_p = (pid_t*)&(p->pid);
-       *pid_p = pid_nr(pid);
+       CONST_CAST(pid_t, p->pid) = pid_nr(pid);
        if (clone_flags & CLONE_THREAD) {
                p->exit_signal = -1;
                p->group_leader = current->group_leader;
-- 
1.7.1

--
Linux-audit mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/linux-audit

Reply via email to