From 62698c77ecf6297b245a5c1857197f895f218ced Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 18 Oct 2011 14:00:57 -0700 Subject: [PATCH] ofp-util: Avoid misaligned memory access in ofputil_encode_packet_in(). Reported-by: Murphy McCauley --- AUTHORS | 1 + lib/ofp-util.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/AUTHORS b/AUTHORS index 3229f3466..4c743b5b9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -84,6 +84,7 @@ Krishna Miriyala krishna@nicira.com Luiz Henrique Ozaki luiz.ozaki@gmail.com Michael Hu mhu@nicira.com Michael Mao mmao@nicira.com +Murphy McCauley murphy.mccauley@gmail.com Mikael Doverhag mdoverhag@nicira.com Niklas Andersson nandersson@nicira.com Pankaj Thakkar thakkar@nicira.com diff --git a/lib/ofp-util.c b/lib/ofp-util.c index b46219a78..09301962a 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -1449,7 +1449,7 @@ ofputil_encode_packet_in(const struct ofputil_packet_in *pin, struct ofpbuf *rw_packet) { int total_len = pin->packet->size; - struct ofp_packet_in *opi; + struct ofp_packet_in opi; if (rw_packet) { if (pin->send_len < rw_packet->size) { @@ -1462,13 +1462,14 @@ ofputil_encode_packet_in(const struct ofputil_packet_in *pin, } /* Add OFPT_PACKET_IN. */ - opi = ofpbuf_push_zeros(rw_packet, offsetof(struct ofp_packet_in, data)); - opi->header.version = OFP_VERSION; - opi->header.type = OFPT_PACKET_IN; - opi->total_len = htons(total_len); - opi->in_port = htons(pin->in_port); - opi->reason = pin->reason; - opi->buffer_id = htonl(pin->buffer_id); + memset(&opi, 0, sizeof opi); + opi.header.version = OFP_VERSION; + opi.header.type = OFPT_PACKET_IN; + opi.total_len = htons(total_len); + opi.in_port = htons(pin->in_port); + opi.reason = pin->reason; + opi.buffer_id = htonl(pin->buffer_id); + ofpbuf_push(rw_packet, &opi, offsetof(struct ofp_packet_in, data)); update_openflow_length(rw_packet); return rw_packet; -- 2.43.0