[ovs-git] [openvswitch/ovs] 263f13: ofproto/bond: Fix bond reconfiguration race condit...

GitHub noreply at github.com
Fri Feb 24 22:19:11 UTC 2017


  Branch: refs/heads/branch-2.7
  Home:   https://github.com/openvswitch/ovs
  Commit: 263f13ea9acd3ee32efdb528c92dc541ca604084
      https://github.com/openvswitch/ovs/commit/263f13ea9acd3ee32efdb528c92dc541ca604084
  Author: Andy Zhou <azhou at ovn.org>
  Date:   2017-02-24 (Fri, 24 Feb 2017)

  Changed paths:
    M ofproto/bond.c
    M ofproto/bond.h
    M ofproto/ofproto-dpif-xlate.c

  Log Message:
  -----------
  ofproto/bond: Fix bond reconfiguration race condition.

During the upcall thread bond output translation, bond_may_recirc()
is currently called outside the lock. In case the main thread executes
bond_reconfigure() at the same time, the upcall thread may find bond
state to be inconsistent when calling bond_update_post_recirc_rules().

This patch fixes the race condition by acquiring the write lock
before calling bond_may_recirc(). The APIs are refactored slightly.

The race condition can result in the following stack trace. Copied
from 'Reported-at':

    Thread 23 handler69:
    Invalid write of size 8
  update_recirc_rules (bond.c:385)
  bond_update_post_recirc_rules__ (bond.c:952)
  bond_update_post_recirc_rules (bond.c:960)
  output_normal (ofproto-dpif-xlate.c:2102)
  xlate_normal (ofproto-dpif-xlate.c:2858)
  xlate_output_action (ofproto-dpif-xlate.c:4407)
  do_xlate_actions (ofproto-dpif-xlate.c:5335)
  xlate_actions (ofproto-dpif-xlate.c:6198)
  upcall_xlate (ofproto-dpif-upcall.c:1129)
  process_upcall (ofproto-dpif-upcall.c:1271)
  recv_upcalls (ofproto-dpif-upcall.c:822)
  udpif_upcall_handler (ofproto-dpif-upcall.c:740)
    Address 0x18630490 is 1,904 bytes inside a block of size 12,288 free'd
  free (vg_replace_malloc.c:529)
  bond_entry_reset (bond.c:1635)
  bond_reconfigure (bond.c:457)
  bundle_set (ofproto-dpif.c:2896)
  ofproto_bundle_register (ofproto.c:1343)
  port_configure (bridge.c:1159)
  bridge_reconfigure (bridge.c:785)
  bridge_run (bridge.c:3099)
  main (ovs-vswitchd.c:111)
    Block was alloc'd at
  malloc (vg_replace_malloc.c:298)
  xmalloc (util.c:110)
  bond_entry_reset (bond.c:1629)
  bond_reconfigure (bond.c:457)
  bond_create (bond.c:245)
  bundle_set (ofproto-dpif.c:2900)
  ofproto_bundle_register (ofproto.c:1343)
  port_configure (bridge.c:1159)
  bridge_reconfigure (bridge.c:785)
  bridge_run (bridge.c:3099)
  main (ovs-vswitchd.c:111)

Reported-by: Huanle Han <hanxueluo at gmail.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-February/328969.html
CC: Huanle Han <hanxueluo at gmail.com>
Signed-off-by: Andy Zhou <azhou at ovn.org>
Acked-by: Jarno Rajahalme <jarno at ovn.org>
Acked-by: Huanle Han <hanxueluo at gmail.com>


  Commit: c8190a75f66c417f703c47cc8996ac8e85e9144f
      https://github.com/openvswitch/ovs/commit/c8190a75f66c417f703c47cc8996ac8e85e9144f
  Author: Andy Zhou <azhou at ovn.org>
  Date:   2017-02-24 (Fri, 24 Feb 2017)

  Changed paths:
    M ofproto/bond.c

  Log Message:
  -----------
  ofproto/bond: Fix bond post recirc rule leak.

When bond is removed or when its configuration changes,
the post recirculation rules that are installed by current
bond configuration, if any, should be also be removed.

Reported-by: Huanle Han <hanxueluo at gmail.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2017-February/328969.html
CC: Huanle Han <hanxueluo at gmail.com>
Signed-off-by: Andy Zhou <azhou at ovn.org>
Acked-by: Jarno Rajahalme <jarno at ovn.org>
Acked-by: Huanle Han <hanxueluo at gmail.com>


  Commit: 9c5c60338c00cec592c42229fa6ff68cd890e427
      https://github.com/openvswitch/ovs/commit/9c5c60338c00cec592c42229fa6ff68cd890e427
  Author: Huanle Han <hanxueluo at gmail.com>
  Date:   2017-02-24 (Fri, 24 Feb 2017)

  Changed paths:
    M ofproto/ofproto-dpif.c

  Log Message:
  -----------
  ofproto/bond: fix interal flow leak of tcp-balance bond

ofproto_dpif_delete_internal_flow() never deletes any flows
because out_port and out_group mismatch.

Signed-off-by: Huanle Han <hanxueluo at gmail.com>
Signed-off-by: Andy Zhou <azhou at ovn.org>


Compare: https://github.com/openvswitch/ovs/compare/c298ef781c2d...9c5c60338c00


More information about the git mailing list