On Mon, Mar 25, 2013 at 12:20 PM, Pravin Shelar <pshe...@nicira.com> wrote:
> On Mon, Mar 25, 2013 at 9:39 AM, Jesse Gross <je...@nicira.com> wrote:
>> On Thu, Mar 21, 2013 at 8:08 PM, Pravin Shelar <pshe...@nicira.com> wrote:
>>> On Wed, Mar 20, 2013 at 4:44 PM, Jesse Gross <je...@nicira.com> wrote:
>>>> Allocation of the Netlink notification skb can potentially fail
>>>> after changing vport configuration.  In general, we try to avoid
>>>> this by undoing any change we made but that is difficult for existing
>>>> objects.  This avoids the problem by preallocating the buffer (which
>>>> is fixed size).
>>>>
>>>> Signed-off-by: Jesse Gross <je...@nicira.com>
>>>> ---
>>>>  datapath/datapath.c |   23 +++++++++++++++--------
>>>>  1 file changed, 15 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/datapath/datapath.c b/datapath/datapath.c
>>>> index b5eb232..88f5371 100644
>>>> --- a/datapath/datapath.c
>>>> +++ b/datapath/datapath.c
>>>> @@ -2005,10 +2005,16 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, 
>>>> struct genl_info *info)
>>>>             nla_get_u32(a[OVS_VPORT_ATTR_TYPE]) != vport->ops->type)
>>>>                 err = -EINVAL;
>>>>
>>>> +       reply = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
>>>> +       if (!reply) {
>>>> +               err = -ENOMEM;
>>>> +               goto exit_unlock;
>>>> +       }
>>>> +
>>>>         if (!err && a[OVS_VPORT_ATTR_OPTIONS])
>>>>                 err = ovs_vport_set_options(vport, 
>>>> a[OVS_VPORT_ATTR_OPTIONS]);
>>>>         if (err)
>>>> -               goto exit_unlock;
>>>> +               goto exit_free;
>>>>
>>>>         if (a[OVS_VPORT_ATTR_STATS])
>>>>                 ovs_vport_set_stats(vport, 
>>>> nla_data(a[OVS_VPORT_ATTR_STATS]));
>>>> @@ -2016,17 +2022,18 @@ static int ovs_vport_cmd_set(struct sk_buff *skb, 
>>>> struct genl_info *info)
>>>>         if (a[OVS_VPORT_ATTR_UPCALL_PID])
>>>>                 vport->upcall_portid = 
>>>> nla_get_u32(a[OVS_VPORT_ATTR_UPCALL_PID]);
>>>>
>>>> -       reply = ovs_vport_cmd_build_info(vport, info->snd_portid,
>>>> -                                        info->snd_seq, OVS_VPORT_CMD_NEW);
>>>> -       if (IS_ERR(reply)) {
>>>> -               netlink_set_err(GENL_SOCK(sock_net(skb->sk)), 0,
>>>> -                               ovs_dp_vport_multicast_group.id, 
>>>> PTR_ERR(reply));
>>>> -               goto exit_unlock;
>>>> -       }
>>>> +       err = ovs_vport_cmd_fill_info(vport, reply, info->snd_portid,
>>>> +                                     info->snd_seq, 0, OVS_VPORT_CMD_NEW);
>>>> +       BUG_ON(err < 0);
>>>>
>>> I am not sure about BUG_ON() ?
>>> ovs_vport_cmd_build_info() does not have this assert.
>>
>> I went back and forth on this some as well.  We currently have
>> something similar for flows (which we allocate based on the expected
>> size).  The default message size should be plenty large for ports but
>> it certainly is a little riskier.
>
> ok,
>
> Acked-by: Pravin B Shelar <pshe...@nicira.com>

Thanks, I added an assert to ovs_vport_cmd_build_info() for
consistency and then pushed to master.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to