svn commit: r349243 - head/sys/cam

Shawn Webb shawn.webb at hardenedbsd.org
Thu Jun 20 23:15:30 UTC 2019


+1 for M_ZERO.

-- 
Shawn Webb
Cofounder / Security Engineer
HardenedBSD

Tor-ified Signal:    +1 443-546-8752
Tor+XMPP+OTR:        lattera at is.a.hacker.sx
GPG Key ID:          0xFF2E67A277F8E1FA
GPG Key Fingerprint: D206 BB45 15E0 9C49 0CF9  3633 C85B 0AF8 AB23 0FB2

On Thu, Jun 20, 2019 at 04:59:48PM -0600, Scott Long wrote:
> Hi Alexander,
> 
> I???m not a fan of removing the M_ZERO.  I understand your argument that
> lengths are provided elsewhere, but having the buffer be zero???d is defensive
> against future bugs that might leak buffer contents.  GETATTR isn???t typically
> in a performance path, is there any measurable benefit to this?
> 
> Thanks,
> Scott
> 
> 
> > On Jun 20, 2019, at 2:29 PM, Alexander Motin <mav at FreeBSD.org> wrote:
> > 
> > Author: mav
> > Date: Thu Jun 20 20:29:42 2019
> > New Revision: 349243
> > URL: https://svnweb.freebsd.org/changeset/base/349243
> > 
> > Log:
> >  Optimize xpt_getattr().
> > 
> >  Do not allocate temporary buffer for attributes we are going to return
> >  as-is, just make sure to NUL-terminate them.  Do not zero temporary 64KB
> >  buffer for CDAI_TYPE_SCSI_DEVID, XPT tells us how much data it filled
> >  and there are also length fields inside the returned data also.
> > 
> >  MFC after:	2 weeks
> >  Sponsored by:	iXsystems, Inc.
> > 
> > Modified:
> >  head/sys/cam/cam_xpt.c
> > 
> > Modified: head/sys/cam/cam_xpt.c
> > ==============================================================================
> > --- head/sys/cam/cam_xpt.c	Thu Jun 20 20:06:19 2019	(r349242)
> > +++ head/sys/cam/cam_xpt.c	Thu Jun 20 20:29:42 2019	(r349243)
> > @@ -1253,6 +1253,7 @@ xpt_getattr(char *buf, size_t len, const char *attr, s
> > 	cdai.ccb_h.func_code = XPT_DEV_ADVINFO;
> > 	cdai.flags = CDAI_FLAG_NONE;
> > 	cdai.bufsiz = len;
> > +	cdai.buf = buf;
> > 
> > 	if (!strcmp(attr, "GEOM::ident"))
> > 		cdai.buftype = CDAI_TYPE_SERIAL_NUM;
> > @@ -1262,14 +1263,14 @@ xpt_getattr(char *buf, size_t len, const char *attr, s
> > 		 strcmp(attr, "GEOM::lunname") == 0) {
> > 		cdai.buftype = CDAI_TYPE_SCSI_DEVID;
> > 		cdai.bufsiz = CAM_SCSI_DEVID_MAXLEN;
> > +		cdai.buf = malloc(cdai.bufsiz, M_CAMXPT, M_NOWAIT);
> > +		if (cdai.buf == NULL) {
> > +			ret = ENOMEM;
> > +			goto out;
> > +		}
> > 	} else
> > 		goto out;
> > 
> > -	cdai.buf = malloc(cdai.bufsiz, M_CAMXPT, M_NOWAIT|M_ZERO);
> > -	if (cdai.buf == NULL) {
> > -		ret = ENOMEM;
> > -		goto out;
> > -	}
> > 	xpt_action((union ccb *)&cdai); /* can only be synchronous */
> > 	if ((cdai.ccb_h.status & CAM_DEV_QFRZN) != 0)
> > 		cam_release_devq(cdai.ccb_h.path, 0, 0, 0, FALSE);
> > @@ -1334,13 +1335,15 @@ xpt_getattr(char *buf, size_t len, const char *attr, s
> > 				ret = EFAULT;
> > 		}
> > 	} else {
> > -		ret = 0;
> > -		if (strlcpy(buf, cdai.buf, len) >= len)
> > +		if (cdai.provsiz < len) {
> > +			cdai.buf[cdai.provsiz] = 0;
> > +			ret = 0;
> > +		} else
> > 			ret = EFAULT;
> > 	}
> > 
> > out:
> > -	if (cdai.buf != NULL)
> > +	if ((char *)cdai.buf != buf)
> > 		free(cdai.buf, M_CAMXPT);
> > 	return ret;
> > }
> > 
> 
> _______________________________________________
> svn-src-all at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20190620/43d0372a/attachment.sig>


More information about the svn-src-head mailing list