Date: Mon, 29 Jun 2009 09:52:49 GMT From: Gabor Pali <pgj@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 165382 for review Message-ID: <200906290952.n5T9qneJ092679@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=165382 Change 165382 by pgj@petymeg-current on 2009/06/29 09:52:22 Add some additional checks to spcblist routine. Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/sys/kern/uipc_usrreq.c#5 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/sys/kern/uipc_usrreq.c#5 (text+ko) ==== @@ -1514,17 +1514,18 @@ UNP_LIST_UNLOCK(); unp_list = malloc(us.us_count * sizeof(*unp_list), M_TEMP, M_WAITOK); + if (unp_list == NULL) + return (ENOMEM); UNP_LIST_LOCK(); for (unp = LIST_FIRST(head), i = 0; (unp != NULL) && (i < us.us_count); unp = LIST_NEXT(unp, unp_link)) { UNP_PCB_LOCK(unp); - if (unp->unp_gencnt <= us.us_gencnt) { - if (cr_cansee(req->td->td_ucred, - unp->unp_socket->so_cred) == 0) { - unp_list[i++] = unp; - unp->unp_refcount++; - } + if (unp->unp_gencnt <= us.us_gencnt && + cr_cansee(req->td->td_ucred, + unp->unp_socket->so_cred) == 0) { + unp_list[i++] = unp; + unp->unp_refcount++; } UNP_PCB_UNLOCK(unp); } @@ -1546,25 +1547,27 @@ unp->unp_refcount--; if (unp->unp_refcount != 0 && unp->unp_gencnt <= us.us_gencnt) { bzero(&ud, sizeof(ud)); + ud.ud_gencnt = unp->unp_gencnt; sock = unp->unp_socket; - ud.ud_gencnt = unp->unp_gencnt; - ud.ud_qlen = sock->so_qlen; - ud.ud_incqlen = sock->so_incqlen; - ud.ud_qlimit = sock->so_qlimit; - ud.ud_snd_cc = sock->so_snd.sb_cc; - ud.ud_snd_mcnt = sock->so_snd.sb_mcnt; - ud.ud_snd_ccnt = sock->so_snd.sb_ccnt; - ud.ud_snd_hiwat = sock->so_snd.sb_hiwat; - ud.ud_snd_lowat = sock->so_snd.sb_lowat; - ud.ud_snd_mbcnt = sock->so_snd.sb_mbcnt; - ud.ud_snd_mbmax = sock->so_snd.sb_mbmax; - ud.ud_rcv_cc = sock->so_rcv.sb_cc; - ud.ud_rcv_mcnt = sock->so_rcv.sb_mcnt; - ud.ud_rcv_ccnt = sock->so_rcv.sb_ccnt; - ud.ud_rcv_hiwat = sock->so_rcv.sb_hiwat; - ud.ud_rcv_lowat = sock->so_rcv.sb_lowat; - ud.ud_rcv_mbcnt = sock->so_rcv.sb_mbcnt; - ud.ud_rcv_mbmax = sock->so_rcv.sb_mbmax; + if (sock != NULL) { + ud.ud_qlen = sock->so_qlen; + ud.ud_incqlen = sock->so_incqlen; + ud.ud_qlimit = sock->so_qlimit; + ud.ud_snd_cc = sock->so_snd.sb_cc; + ud.ud_snd_mcnt = sock->so_snd.sb_mcnt; + ud.ud_snd_ccnt = sock->so_snd.sb_ccnt; + ud.ud_snd_hiwat = sock->so_snd.sb_hiwat; + ud.ud_snd_lowat = sock->so_snd.sb_lowat; + ud.ud_snd_mbcnt = sock->so_snd.sb_mbcnt; + ud.ud_snd_mbmax = sock->so_snd.sb_mbmax; + ud.ud_rcv_cc = sock->so_rcv.sb_cc; + ud.ud_rcv_mcnt = sock->so_rcv.sb_mcnt; + ud.ud_rcv_ccnt = sock->so_rcv.sb_ccnt; + ud.ud_rcv_hiwat = sock->so_rcv.sb_hiwat; + ud.ud_rcv_lowat = sock->so_rcv.sb_lowat; + ud.ud_rcv_mbcnt = sock->so_rcv.sb_mbcnt; + ud.ud_rcv_mbmax = sock->so_rcv.sb_mbmax; + } ud.ud_pcb = (u_long)sock->so_pcb; ud.ud_vnode = (u_long)unp->unp_vnode; ud.ud_conn = (u_long)unp->unp_conn; @@ -1580,7 +1583,7 @@ UNP_PCB_UNLOCK(unp); if (sbuf_bcat(&sbuf, &ud, sizeof(ud)) < 0) { error = ENOMEM; - goto uout; + goto out; } } else { freeunp = (unp->unp_refcount == 0); @@ -1593,9 +1596,8 @@ } sbuf_finish(&sbuf); error = SYSCTL_OUT(req, sbuf_data(&sbuf), sbuf_len(&sbuf)); -uout: +out: free(unp_list, M_TEMP); -out: free(buffer, M_TEMP); return (error); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906290952.n5T9qneJ092679>