Skip to content

Commit

Permalink
Skip linux-bridge filtering if no "bridge" section
Browse files Browse the repository at this point in the history
We have found that at some envs the "bridge" section from linux-bridge
is not present in case the bridge is down, this change ignore the
filtering in this is the case to preveng a segmentation fault.

Signed-off-by: Quique Llorente <[email protected]>
  • Loading branch information
qinqon committed Feb 1, 2021
1 parent e0daac1 commit 2d3b0bd
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 3 deletions.
30 changes: 27 additions & 3 deletions pkg/state/filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,16 @@ func FilterOut(currentState shared.State) (shared.State, error) {
}

func filterOutRoutes(kind string, state map[string]interface{}, interfacesFilterGlob glob.Glob) {
routes := state["routes"].(map[string]interface{})
routesRaw, hasRoutes := state["routes"]
if !hasRoutes {
return
}

routes, ok := routesRaw.(map[string]interface{})
if !ok {
return
}

routesByKind := routes[kind].([]interface{})

if routesByKind == nil {
Expand Down Expand Up @@ -58,9 +67,24 @@ func filterOutDynamicAttributes(iface map[string]interface{}) {
return
}

bridge := iface["bridge"].(map[string]interface{})
bridgeRaw, hasBridge := iface["bridge"]
if !hasBridge {
return
}
bridge, ok := bridgeRaw.(map[string]interface{})
if !ok {
return
}

optionsRaw, hasOptions := bridge["options"]
if !hasOptions {
return
}
options, ok := optionsRaw.(map[string]interface{})
if !ok {
return
}

options := bridge["options"].(map[string]interface{})
delete(options, "gc-timer")
delete(options, "hello-timer")
}
Expand Down
40 changes: 40 additions & 0 deletions pkg/state/filter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,4 +307,44 @@ routes:
Expect(returnedState).To(MatchYAML(filteredState))
})
})
Context("when there is a linux bridge without 'bridge' options because is down", func() {
BeforeEach(func() {
state = nmstate.NewState(`
interfaces:
- name: br1
type: linux-bridge
state: down
ipv4:
enabled: false
ipv6:
enabled: false
lldp:
enabled: false
mac-address: A2:EE:84:7B:42:4C
mtu: 1500
`)

filteredState = nmstate.NewState(`
interfaces:
- name: br1
type: linux-bridge
state: down
ipv4:
enabled: false
ipv6:
enabled: false
lldp:
enabled: false
mac-address: A2:EE:84:7B:42:4C
mtu: 1500
`)
interfacesFilterGlob = glob.MustCompile("")
})
It("should keep the bridge as it is", func() {
returnedState, err := filterOut(state, interfacesFilterGlob)
Expect(err).ToNot(HaveOccurred())
Expect(returnedState).To(MatchYAML(filteredState))
})
})

})

0 comments on commit 2d3b0bd

Please sign in to comment.