From owner-p4-projects@FreeBSD.ORG Mon Jun 29 09:52:50 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B13E0106567C; Mon, 29 Jun 2009 09:52:49 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6866E1065670 for ; Mon, 29 Jun 2009 09:52:49 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 567128FC14 for ; Mon, 29 Jun 2009 09:52:49 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5T9qnwQ092681 for ; Mon, 29 Jun 2009 09:52:49 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5T9qneJ092679 for perforce@freebsd.org; Mon, 29 Jun 2009 09:52:49 GMT (envelope-from pgj@FreeBSD.org) Date: Mon, 29 Jun 2009 09:52:49 GMT Message-Id: <200906290952.n5T9qneJ092679@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 165382 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2009 09:52:51 -0000 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); }