ofpbuf: Fix setting of 'msg' in ofpbuf_clone_with_headroom()
authorJarno Rajahalme <jarno@ovn.org>
Mon, 7 Mar 2016 19:00:44 +0000 (11:00 -0800)
committerJarno Rajahalme <jarno@ovn.org>
Mon, 7 Mar 2016 19:00:44 +0000 (11:00 -0800)
Commit 38876d31 fixed setting 'msg' when resizing an ofpbuf, but
failed to fix the same issue in ofpbuf_clone_with_headroom().  Without
this fix the newly cloned ofpbuf's 'msg', if non-NULL, will point to
the buffer of the original ofpbuf.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
lib/ofpbuf.c

index eab523e..1a090ee 100644 (file)
@@ -185,7 +185,11 @@ ofpbuf_clone_with_headroom(const struct ofpbuf *b, size_t headroom)
 
         new_buffer->header = (char *) new_buffer->data + header_offset;
     }
-    new_buffer->msg = b->msg;
+    if (b->msg) {
+        ptrdiff_t msg_offset = (char *) b->msg - (char *) b->data;
+
+        new_buffer->msg = (char *) new_buffer->data + msg_offset;
+    }
 
     return new_buffer;
 }