Author: ian
Date: Tue Mar 17 21:00:31 2015
New Revision: 280193
URL: https://svnweb.freebsd.org/changeset/base/280193

Log:
  The minimum sbuf buffer size is 2 bytes (a byte plus a nulterm), assert that.
  
  Values smaller than two lead to strange asserts that have nothing to do
  with the actual problem (in the case of size=0), or to writing beyond the
  end of the allocated buffer in sbuf_finish() (in the case of size=1).

Modified:
  head/sys/kern/subr_sbuf.c

Modified: head/sys/kern/subr_sbuf.c
==============================================================================
--- head/sys/kern/subr_sbuf.c   Tue Mar 17 20:56:24 2015        (r280192)
+++ head/sys/kern/subr_sbuf.c   Tue Mar 17 21:00:31 2015        (r280193)
@@ -78,6 +78,7 @@ static MALLOC_DEFINE(M_SBUF, "sbuf", "st
 #define        SBUF_SETFLAG(s, f)      do { (s)->s_flags |= (f); } while (0)
 #define        SBUF_CLEARFLAG(s, f)    do { (s)->s_flags &= ~(f); } while (0)
 
+#define        SBUF_MINSIZE             2              /* Min is 1 byte + 
nulterm. */
 #define        SBUF_MINEXTENDSIZE      16              /* Should be power of 
2. */
 
 #ifdef PAGE_SIZE
@@ -192,8 +193,9 @@ sbuf_newbuf(struct sbuf *s, char *buf, i
        s->s_buf = buf;
 
        if ((s->s_flags & SBUF_AUTOEXTEND) == 0) {
-               KASSERT(s->s_size >= 0,
-                   ("attempt to create a too small sbuf"));
+               KASSERT(s->s_size >= SBUF_MINSIZE,
+                   ("attempt to create an sbuf smaller than %d bytes",
+                   SBUF_MINSIZE));
        }
 
        if (s->s_buf != NULL)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to