On Fri, Jan 06, 2017 at 01:10:14PM -0800, Jarno Rajahalme wrote: > > > On Jan 5, 2017, at 9:06 PM, Ben Pfaff <b...@ovn.org> wrote: > > > > On Thu, Jan 05, 2017 at 05:45:29PM -0800, Jarno Rajahalme wrote: > >> > >>> On Jan 5, 2017, at 4:48 PM, Ben Pfaff <b...@ovn.org> wrote: > >>> > >>> On Thu, Jan 05, 2017 at 04:03:17PM -0800, Jarno Rajahalme wrote: > >>>> > >>>>> On Jan 4, 2017, at 11:03 PM, Ben Pfaff <b...@ovn.org> wrote: > >>>>> > >>>>> On Wed, Jan 04, 2017 at 07:21:44PM -0800, Jarno Rajahalme wrote: > >>>>>> > >>>>>>> On Dec 21, 2016, at 2:36 PM, Ben Pfaff <b...@ovn.org> wrote: > >>>>>>> > >>>>>>> On Wed, Dec 07, 2016 at 04:49:00PM -0800, Jarno Rajahalme wrote: > >>>>>>> I'd be more comfortable if nx_stack_pop() had assertions to check for > >>>>>>> underflow. > >>>>>> > >>>>>> I don’t think OVS should assert fail if controller issues one pop > >>>>>> too many? Do you mean that current users of nx_stack_pop() do not > >>>>>> check for NULL return? I had a look and think that setting “*bytes” > >>>>>> to zero when returning NULL should be enough for all users. > >>>>> > >>>>> It appears to me that if stack->size is greater than 0 but less than the > >>>>> number of bytes indicated by its last byte, then it will corrupt the > >>>>> ofpbuf size and that this will later cause some kind of failure that > >>>>> will be harder to debug than an assertion failure. > >>>>> > >>>> > >>>> OK, now i got it. This is just to guard against (future) bugs in OVS > >>>> itself. > >>> > >>> Yes. > >>> > >>>>>>> In ofputil_decode_packet_in_private(), it's probably worth checking > >>>>>>> the > >>>>>>> format of the stack we pull from the payload, since a badly formatted > >>>>>>> stack can segfault us (if we leave out assertions) or assert-fail us > >>>>>>> (if > >>>>>>> we include them). > >>>>>>> > >>>>>> > >>>>>> What do you mean with badly formatted stack? Zero-sized property? IMO > >>>>>> even that would be properly pushed and popped from the stack, storing > >>>>>> only the length (of zero) in the stack. > >>>>> > >>>>> I mean that if the property contains, for example, a single byte with > >>>>> value 0xff, then it's badly formatted because we can pop off a length > >>>>> (255) but then popping off that number of bytes will underflow. > >>>> > >>>> I did not change the encoding of the stack as properties, so each > >>>> value in the stack is still encoded as a separate property, where the > >>>> (aligned) value length is used as the property length. > >>> > >>> I guess I forgot that. > >>> > >>> Thanks, that's fine then. > >>> > >>>> ofpprop_pull() does the length checking for the properties and the > >>>> current code in ofputil_decode_packet_in_private() assert fails on any > >>>> error, which is not good, as a controller bug would crash OVS? > >>> > >>> That's bad. Maybe the fix is as simple as this, though. > >>> > >>> diff --git a/lib/ofp-util.c b/lib/ofp-util.c > >>> index 156d8d2..421b9d7 100644 > >>> --- a/lib/ofp-util.c > >>> +++ b/lib/ofp-util.c > >>> @@ -1,5 +1,5 @@ > >>> /* > >>> - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 > >>> Nicira, Inc. > >>> + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, > >>> 2017 Nicira, Inc. > >>> * > >>> * Licensed under the Apache License, Version 2.0 (the "License"); > >>> * you may not use this file except in compliance with the License. > >>> @@ -4061,7 +4061,9 @@ ofputil_decode_packet_in_private(const struct > >>> ofp_header *oh, bool loose, > >>> uint64_t type; > >>> > >>> error = ofpprop_pull(&continuation, &payload, &type); > >>> - ovs_assert(!error); > >>> + if (error) { > >>> + break; > >>> + } > >>> > >>> switch (type) { > >>> case NXCPT_BRIDGE: > >>> @@ -4124,7 +4126,7 @@ ofputil_decode_packet_in_private(const struct > >>> ofp_header *oh, bool loose, > >>> ofputil_packet_in_private_destroy(pin); > >>> } > >>> > >>> - return 0; > >>> + return error; > >>> } > >>> > >>> /* Frees data in 'pin' that is dynamically allocated by > >>> > >> > >> I folded this in to v3. > > > > This bug is in 2.6, isn't it? If so then we should fix it in a separate > > patch, for backporting purposes. > > Right, I’ll separate it out. What is the most proper way to attribute it to > you? "Suggested-by”, or something else?
That's fine. _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev