Author: rmacklem
Date: Wed Aug 12 16:27:51 2009
New Revision: 196149
URL: http://svn.freebsd.org/changeset/base/196149

Log:
  Add a check for a NULL mbuf ptr at the beginning of xdrmbuf_inline()
  so that it returns failure instead of crashing when "m->m_len" is
  executed and m == NULL. The mbuf ptr can be NULL when a call to
  xdrmbuf_getbytes() gets the bytes it needs, but they are at the end
  of a short RPC reply. When this happens, xdrmbuf_getbytes() returns
  success, but advances the mbuf ptr (xdrs->x_private) to m_next, which
  is NULL. If this is followed by a call to xdrmbuf_getlong(), it calls
  xdrmbuf_inline(), which would cause a crash by accessing "m->m_len".
  
  Tested by:    pho, serenity at exscape dot org
  Approved by:  re (rwatson), kib (mentor)

Modified:
  head/sys/xdr/xdr_mbuf.c

Modified: head/sys/xdr/xdr_mbuf.c
==============================================================================
--- head/sys/xdr/xdr_mbuf.c     Wed Aug 12 14:40:21 2009        (r196148)
+++ head/sys/xdr/xdr_mbuf.c     Wed Aug 12 16:27:51 2009        (r196149)
@@ -282,6 +282,8 @@ xdrmbuf_inline(XDR *xdrs, u_int len)
        size_t available;
        char *p;
 
+       if (!m)
+               return (0);
        if (xdrs->x_op == XDR_ENCODE) {
                available = M_TRAILINGSPACE(m) + (m->m_len - xdrs->x_handy);
        } else {
_______________________________________________
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