Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Feb 2012 15:08:38 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Hiroki Sato <hrs@freebsd.org>
Cc:        stable@freebsd.org
Subject:   Re: another panic in 8.3-PRERELEASE
Message-ID:  <20120228130838.GN55074@deviant.kiev.zoral.com.ua>
In-Reply-To: <20120225.025828.128418237042325597.hrs@allbsd.org>
References:  <20120223.234558.1101656075598772176.hrs@allbsd.org> <20120224143336.GS55074@deviant.kiev.zoral.com.ua> <20120224150259.GV55074@deviant.kiev.zoral.com.ua> <20120225.025828.128418237042325597.hrs@allbsd.org>

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

--sEASj6BbPXAOAu+u
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sat, Feb 25, 2012 at 02:58:28AM +0900, Hiroki Sato wrote:
> Konstantin Belousov <kostikbel@gmail.com> wrote
>   in <20120224150259.GV55074@deviant.kiev.zoral.com.ua>:
>=20
> ko> > > #19 0x0000000800abecfc in ?? ()
> ko> > > Previous frame inner to this frame (corrupt stack?)
> ko> > > (kgdb)
> ko> > Can you, please, print out the content of *td, e.g. from the frame =
16 ?
> ko>=20
> ko> And *req from the frame 11, please.
>=20
>  Here:
>=20
> (kgdb) f 16
> #16 0xffffffff80675e3a in __sysctl (td=3D0xffffff0396ec5460,=20
>     uap=3D0xffffff86c6389bc0) at /usr/src/sys/kern/kern_sysctl.c:1491
> 1491		error =3D userland_sysctl(td, name, uap->namelen,
> (kgdb) print *td
> $2 =3D {td_lock =3D 0xffffffff80d7f540, td_proc =3D 0xffffff03969bf470, t=
d_plist =3D {
>     tqe_next =3D 0x0, tqe_prev =3D 0xffffff03969bf480}, td_runq =3D {tqe_=
next =3D 0x0,=20
>     tqe_prev =3D 0xffffffff80d7f788}, td_slpq =3D {tqe_next =3D 0x0,=20
>     tqe_prev =3D 0xffffff0396ebe800}, td_lockq =3D {tqe_next =3D 0x0,=20
>     tqe_prev =3D 0xffffff86c57b48a0}, td_cpuset =3D 0xffffff0005789dc8,=
=20
>   td_sel =3D 0xffffff01b5dd0500, td_sleepqueue =3D 0xffffff0396ebe800,=20
>   td_turnstile =3D 0xffffff01334cf600, td_umtxq =3D 0xffffff0396ec3a80,=
=20
>   td_tid =3D 100763, td_sigqueue =3D {sq_signals =3D {__bits =3D {0, 0, 0=
, 0}},=20
>     sq_kill =3D {__bits =3D {0, 0, 0, 0}}, sq_list =3D {tqh_first =3D 0x0=
,=20
>       tqh_last =3D 0xffffff0396ec5500}, sq_proc =3D 0xffffff03969bf470,=
=20
>     sq_flags =3D 1}, td_flags =3D 65540, td_inhibitors =3D 0, td_pflags =
=3D 0,=20
>   td_dupfd =3D 0, td_sqqueue =3D 0, td_wchan =3D 0x0, td_wmesg =3D 0x0,=
=20
>   td_lastcpu =3D 4 '\004', td_oncpu =3D 4 '\004', td_owepreempt =3D 0 '\0=
',=20
>   td_tsqueue =3D 255 '?', td_locks =3D 4, td_rw_rlocks =3D 0, td_lk_slock=
s =3D 0,=20
>   td_blocked =3D 0x0, td_lockname =3D 0x0, td_contested =3D {lh_first =3D=
 0x0},=20
>   td_sleeplocks =3D 0xffffffff80ecebf0, td_intr_nesting_level =3D 0,=20
>   td_pinned =3D 0, td_ucred =3D 0xffffff007d537b00, td_estcpu =3D 0, td_s=
lptick =3D 0,=20
>   td_blktick =3D 0, td_ru =3D {ru_utime =3D {tv_sec =3D 0, tv_usec =3D 0}=
, ru_stime =3D {
>       tv_sec =3D 0, tv_usec =3D 0}, ru_maxrss =3D 1864, ru_ixrss =3D 6628=
8,=20
>     ru_idrss =3D 1347856, ru_isrss =3D 176768, ru_minflt =3D 263901, ru_m=
ajflt =3D 10,=20
>     ru_nswap =3D 0, ru_inblock =3D 0, ru_oublock =3D 0, ru_msgsnd =3D 0,=
=20
>     ru_msgrcv =3D 0, ru_nsignals =3D 0, ru_nvcsw =3D 14937, ru_nivcsw =3D=
 3286},=20
>   td_incruntime =3D 0, td_runtime =3D 15204044088, td_pticks =3D 15, td_s=
ticks =3D 15,=20
>   td_iticks =3D 0, td_uticks =3D 0, td_intrval =3D 0, td_oldsigmask =3D {=
__bits =3D {0,=20
>       0, 0, 0}}, td_sigmask =3D {__bits =3D {0, 0, 0, 0}}, td_generation =
=3D 18223,=20
>   td_sigstk =3D {ss_sp =3D 0x0, ss_size =3D 0, ss_flags =3D 4}, td_xsig =
=3D 0,=20
>   td_profil_addr =3D 0, td_profil_ticks =3D 0,=20
>   td_name =3D "top", '\0' <repeats 16 times>, td_fpop =3D 0x0, td_dbgflag=
s =3D 0,=20
>   td_dbgksi =3D {ksi_link =3D {tqe_next =3D 0x0, tqe_prev =3D 0x0}, ksi_i=
nfo =3D {
>       si_signo =3D 0, si_errno =3D 0, si_code =3D 0, si_pid =3D 0, si_uid=
 =3D 0,=20
>       si_status =3D 0, si_addr =3D 0x0, si_value =3D {sival_int =3D 0,=20
>         sival_ptr =3D 0x0, sigval_int =3D 0, sigval_ptr =3D 0x0}, _reason=
 =3D {
>         _fault =3D {_trapno =3D 0}, _timer =3D {_timerid =3D 0, _overrun =
=3D 0},=20
>         _mesgq =3D {_mqd =3D 0}, _poll =3D {_band =3D 0}, __spare__ =3D {=
__spare1__ =3D 0,=20
>           __spare2__ =3D {0, 0, 0, 0, 0, 0, 0}}}}, ksi_flags =3D 0,=20
>     ksi_sigq =3D 0x0}, td_ng_outbound =3D 0, td_osd =3D {osd_nslots =3D 0=
,=20
>     osd_slots =3D 0x0, osd_next =3D {le_next =3D 0x0, le_prev =3D 0x0}},=
=20
>   td_rqindex =3D 32 ' ', td_base_pri =3D 128 '\200', td_priority =3D 128 =
'\200',=20
>   td_pri_class =3D 3 '\003', td_user_pri =3D 129 '\201',=20
>   td_base_user_pri =3D 129 '\201', td_pcb =3D 0xffffff86c6389d10,=20
>   td_state =3D TDS_RUNNING, td_retval =3D {0, 34375032832}, td_slpcallout=
 =3D {
>     c_links =3D {sle =3D {sle_next =3D 0x0}, tqe =3D {tqe_next =3D 0x0,=
=20
>         tqe_prev =3D 0xffffff800042ccd0}}, c_time =3D 51568077,=20
>     c_arg =3D 0xffffff0396ec5460, c_func =3D 0xffffffff806a84c0 <sleepq_t=
imeout>,=20
>     c_lock =3D 0x0, c_flags =3D 18, c_cpu =3D 4}, td_frame =3D 0xffffff86=
c6389c50,=20
>   td_kstack_obj =3D 0xffffff03410b20d8, td_kstack =3D 1844674355304912486=
4,=20
>   td_kstack_pages =3D 4, td_unused1 =3D 0x0, td_unused2 =3D 0, td_unused3=
 =3D 0,=20
>   td_critnest =3D 0, td_md =3D {md_spinlock_count =3D 0, md_saved_flags =
=3D 70},=20
>   td_sched =3D 0xffffff0396ec5890, td_ar =3D 0x0, td_syscalls =3D 469926,=
=20
>   td_lprof =3D {{lh_first =3D 0x0}, {lh_first =3D 0x0}}, td_dtrace =3D 0x=
0,=20
>   td_errno =3D 0, td_vnet =3D 0x0, td_vnet_lpush =3D 0x0, td_rux =3D {
>     rux_runtime =3D 15204044088, rux_uticks =3D 226, rux_sticks =3D 1140,=
=20
>     rux_iticks =3D 0, rux_uu =3D 0, rux_su =3D 0, rux_tu =3D 0},=20
>   td_map_def_user =3D 0x0, td_dbg_forked =3D 0}
> (kgdb) f 11
> #11 0xffffffff8065f6a6 in sysctl_out_proc_copyout (ki=3D0xffffff86c638947=
0,=20
>     req=3D0xffffff86c63899c0) at /usr/src/sys/kern/kern_proc.c:1085
> 1085			error =3D SYSCTL_OUT(req, ki, sizeof(struct kinfo_proc));
> (kgdb) print *req
> $3 =3D {td =3D 0xffffff0396ec5460, lock =3D 2, oldptr =3D 0x800e96000, ol=
dlen =3D 68217,=20
>   oldidx =3D 1088, oldfunc =3D 0xffffffff80675e80 <sysctl_old_user>, newp=
tr =3D 0x0,=20
>   newlen =3D 0, newidx =3D 0, newfunc =3D 0xffffffff80675d10 <sysctl_new_=
user>,=20
>   validlen =3D 68217, flags =3D 0}
> (kgdb) quit
>=20
> -- Hiroki

I can see the race in how the wiring of the sysctl buffers is done, but the
race can only realize for the multithreaded process.

Can you, please, further show me two things:
- the p/x *(td->td_pcb)
- (this is somewhat laborous) Please find the vm map entry in the process
  vm_map which covers the range [0x800e96000, 0x800ea6a79) and print it out.
  You need to walk the td->td_proc->p_vmspace.vm_map.header list using
  the next link, looking for the entry start/end values.

--sEASj6BbPXAOAu+u
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (FreeBSD)

iEYEARECAAYFAk9M0dYACgkQC3+MBN1Mb4i6LACcDG0tVBwEKUVuW19H7LVlPDXx
uxsAoLa6r2njpLUhYaUbhhrHc3eiQ9UE
=VBMZ
-----END PGP SIGNATURE-----

--sEASj6BbPXAOAu+u--



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