pktbuf: Always initialize '*bufferp' even when 'pb == NULL'.
authorBen Pfaff <blp@nicira.com>
Sat, 17 Jan 2015 17:21:04 +0000 (09:21 -0800)
committerBen Pfaff <blp@nicira.com>
Mon, 19 Jan 2015 18:09:33 +0000 (10:09 -0800)
Otherwise if a service connection (which does not have buffers) attempts
to use buffers, '*bufferp' will be uninitialized, which can cause a
segfault in the caller.

Found using OFtest configured to use service (active rather than passive)
connections.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Thomas Graf <tgraf@noironetworks.com>
ofproto/pktbuf.c

index 38ec348..43b17c7 100644 (file)
@@ -184,7 +184,8 @@ pktbuf_retrieve(struct pktbuf *pb, uint32_t id, struct ofpbuf **bufferp,
     if (!pb) {
         VLOG_WARN_RL(&rl, "attempt to send buffered packet via connection "
                      "without buffers");
-        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
+        error = OFPERR_OFPBRC_BUFFER_UNKNOWN;
+        goto error;
     }
 
     p = &pb->packets[id & PKTBUF_MASK];