Date: Tue, 7 Oct 2003 11:38:36 -0700 (PDT) From: Nate Lawson <nate@root.org> To: Thomas Quinot <thomas@FreeBSD.ORG> Cc: freebsd-scsi@freebsd.org Subject: Re: da(4): defend against calling sysctl_ctx_free on unininitalized sysctl_ctx Message-ID: <20031007113642.X6781@root.org> In-Reply-To: <20031007152921.GA66688@melusine.cuivre.fr.eu.org> References: <20031007152921.GA66688@melusine.cuivre.fr.eu.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 7 Oct 2003, Thomas Quinot wrote: > The following change resolves a recently observed panic on probe of > various USB mass storage devices. It is similar to the one I committed > in scsi_cd.c rev 1.86. Please review! > > Thanks, > Thomas. > > Index: scsi_da.c > =================================================================== > RCS file: /home/ncvs/src/sys/cam/scsi/scsi_da.c,v > retrieving revision 1.159 > diff -u -r1.159 scsi_da.c > --- scsi_da.c 4 Sep 2003 01:01:20 -0000 1.159 > +++ scsi_da.c 7 Oct 2003 14:48:26 -0000 > @@ -89,7 +89,8 @@ > DA_FLAG_NEED_OTAG = 0x020, > DA_FLAG_WENT_IDLE = 0x040, > DA_FLAG_RETRY_UA = 0x080, > - DA_FLAG_OPEN = 0x100 > + DA_FLAG_OPEN = 0x100, > + DA_FLAG_SCTX_INIT = 0x200 > } da_flags; > > typedef enum { > @@ -838,7 +839,8 @@ > /* > * If we can't free the sysctl tree, oh well... > */ > - if (sysctl_ctx_free(&softc->sysctl_ctx) != 0) { > + if ((softc->flags & DA_FLAG_SCTX_INIT) != 0 > + && sysctl_ctx_free(&softc->sysctl_ctx) != 0) { > xpt_print_path(periph->path); > printf("can't remove sysctl context\n"); > } > @@ -925,6 +927,7 @@ > > mtx_lock(&Giant); > sysctl_ctx_init(&softc->sysctl_ctx); > + softc->flags |= DA_FLAG_SCTX_INIT; > softc->sysctl_tree = SYSCTL_ADD_NODE(&softc->sysctl_ctx, > SYSCTL_STATIC_CHILDREN(_kern_cam_da), OID_AUTO, tmpstr2, > CTLFLAG_RD, 0, tmpstr); I'm ok with committing this, thanks for running it by me. Perhaps there's a better way to signal whether the sysctl has been initialized though. Perhaps a check for SYSCTL_CHILDREN != NULL or something? I've fought with sysctl already this week and I'm not sure how to do that. -Nate
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031007113642.X6781>