From owner-freebsd-bugs@freebsd.org Wed Jun 14 15:17:36 2017 Return-Path: Delivered-To: freebsd-bugs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D27D9B9439A for ; Wed, 14 Jun 2017 15:17:36 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A86BD67C23 for ; Wed, 14 Jun 2017 15:17:36 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id v5EFHZBo035867 for ; Wed, 14 Jun 2017 15:17:36 GMT (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 219988] [kernel] sys/kern/kern_sysctl.c:a sleep-under-rmlock bug in sysctl_add_oid Date: Wed, 14 Jun 2017 15:17:36 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: kern X-Bugzilla-Version: CURRENT X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Only Me X-Bugzilla-Who: cem@freebsd.org X-Bugzilla-Status: New X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: freebsd-bugs@FreeBSD.org X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc version rep_platform Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Jun 2017 15:17:37 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D219988 Conrad Meyer changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |cem@freebsd.org Version|11.0-RELEASE |CURRENT Hardware|i386 |Any --- Comment #1 from Conrad Meyer --- I suggest moving the allocation out from under the lock rather than convert= ing an M_WAITOK allocation to M_NOWAIT. E.g., --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -698,11 +698,12 @@ sysctl_add_oid(struct sysctl_ctx_list *clist, struct sysctl_oid_list *parent, int (*handler)(SYSCTL_HANDLER_ARGS), const char *fmt, const char *descr, const char *label) { - struct sysctl_oid *oidp; + struct sysctl_oid *oidp, *storage; /* You have to hook up somewhere.. */ if (parent =3D=3D NULL) return(NULL); + storage =3D malloc(sizeof(*storage), M_SYSCTLOID, M_WAITOK|M_ZERO); /* Check if the node already exists, otherwise create it */ SYSCTL_WLOCK(); oidp =3D sysctl_find_oidname(name, parent); @@ -713,14 +714,16 @@ sysctl_add_oid(struct sysctl_ctx_list *clist, struct sysctl_oid_list *parent, if (clist !=3D NULL) sysctl_ctx_entry_add(clist, oidp); SYSCTL_WUNLOCK(); + free(storage); return (oidp); } else { SYSCTL_WUNLOCK(); printf("can't re-use a leaf (%s)!\n", name); + free(storage); return (NULL); } } - oidp =3D malloc(sizeof(struct sysctl_oid), M_SYSCTLOID, M_WAITOK|M_= ZERO); + oidp =3D storage; oidp->oid_parent =3D parent; SLIST_INIT(&oidp->oid_children); oidp->oid_number =3D number; --=20 You are receiving this mail because: You are the assignee for the bug.=