Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Oct 1998 16:19:28 +0300 (EET DST)
From:      "Jukka A. Ukkonen" <jau@jau.tmt.tele.fi>
To:        hackers@FreeBSD.ORG
Subject:   question about getsid()
Message-ID:  <199810211319.QAA15509@jau.tmt.tele.fi>

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

	Howdy, everybody!

	When looking at the 3.0 getsid() code in kern_prot.c I became
	a little hesitant about whether the following code will always
	work...

int
getsid(p, uap)
        struct proc *p;
        struct getsid_args *uap;
{
        if (uap->pid == 0)
                goto found;

        if ((p == pfind(uap->pid)) == 0)
                return ESRCH;
found:
        p->p_retval[0] = p->p_pgrp->pg_session->s_leader->p_pid;
        return 0;
}

	What will happen if the process leader has already died?
	Will the original session leader's process struct still be
	around available for reference or will the code fail?

	My own implementation of the same thing added a new field
	`s_sid' to the session struct, because I suspected problems
	doing it the way the current 3.0 code does.
	This new field is in my version initialized during setsid()
	using the PID of the session leader, but the code does not
	assume the process struct for the session leader being
	available later, because `s_sid' content will be returned
	by getsid().

	Maybe my version has been playing extra safe in vain, but at
	least that way there is no way to make the kernel panic just
	by calling getsid(). Now I would like to know whether it had
	been quite as safe to write my own version the way it is now
	done in 3.0 or is 3.0 relying on something which is not really
	guaranteed. Any comments?


	Cheers,
		// jau
.---  ..-  -.-  -.-  .-    .-  .-.-.-    ..-  -.-  -.-  ---  -.  .  -.
  /    Jukka A. Ukkonen,           Internet Services R&D / Sonera Ltd.
 /__   M.Sc. (sw-eng & cs)                     (Phone) +358-2040-4025
   /   Internet: Jukka.Ukkonen@sonera.fi         (Fax) +358-2040-64724
  /    Internet: jau@iki.fi                   (Mobile) +358-400-606671
 v     Internet: ukkonen@nic.funet.fi       (Home&Fax) +358-9-6215280

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810211319.QAA15509>