rootwrap: Fix KillFilter matching
The match() method in the KillFilter is a bit buggy. Since most/many run through this logic in their way to being matched, it creates subtle issues elsewhere, specifically during linux_net bridge creation. This fixes two issues. 1. userargs gets elements directly popped off of it. If the KillFilter does not match the command its checking, the later filter that does is missing one argument. 2. Type error on pid when checking /proc, this was causing issues on instance tear down / kill -HUP'ing dnsmasq. Fixes bug 921784 Change-Id: I058ff2276e3154e8c1f6cc7077fa485db60e5827
This commit is contained in:
@@ -100,19 +100,20 @@ class KillFilter(CommandFilter):
|
||||
"""
|
||||
|
||||
def match(self, userargs):
|
||||
if len(userargs) == 3:
|
||||
signal = userargs.pop(1)
|
||||
args = list(userargs)
|
||||
if len(args) == 3:
|
||||
signal = args.pop(1)
|
||||
if signal not in self.args[0]:
|
||||
# Requested signal not in accepted list
|
||||
return False
|
||||
else:
|
||||
if len(userargs) != 2:
|
||||
if len(args) != 2:
|
||||
# Incorrect number of arguments
|
||||
return False
|
||||
if '' not in self.args[0]:
|
||||
# No signal, but list doesn't include empty string
|
||||
return False
|
||||
pid = userargs[1]
|
||||
pid = int(args[1])
|
||||
try:
|
||||
command = os.readlink("/proc/%d/exe" % pid)
|
||||
if command not in self.args[1]:
|
||||
|
Reference in New Issue
Block a user