** Description changed:

+ [Impact]
+ 
+ AppArmor policy developers cannot use aa-logprof without it exiting with
+ a traceback on certain denial messages.
+ 
+ [Test Case]
+ 
+ $ echo 'type=AVC msg=audit(1463403689.381:267599): apparmor="ALLOWED" \
+ operation="file_perm" profile="foo" pid=13215 comm="apache2" \
+ laddr=::ffff:192.168.1.100 lport=80 faddr=::ffff:192.168.1.100 fport=45658 \
+ family="inet6" sock_type="stream" protocol=6 requested_mask="send" \
+ denied_mask="send"' > /tmp/log
+ $ mkdir -p /tmp/profiles && printf "profile foo {\n}" > /tmp/profiles/foo
+ $ aa-logprof -f /tmp/log -d /tmp/profiles
+ 
+ Expected output of the last command is:
+ 
+ Reading log entries from /tmp/log.
+ Updating AppArmor profiles in /tmp/profiles.
+ 
+ [Regression Potential]
+ 
+ There is little potential for regression. This "hotfix" could result in
+ some slight confusion because the problematic denial messages will
+ simply be ignored but it allows aa-logprof to do its intended job
+ without unexpectedly exiting.
+ 
+ [Original Report]
+ 
  Ref #1243932.  Same title but appears to be different cause.
  
  Ubuntu 16.04.  Error thrown on 'sudo aa-logprof'
  
  Python 3.5.1+: /usr/bin/python3
  Mon May 16 20:13:30 2016
  
  A problem occurred in a Python script.  Here is the sequence of
  function calls leading up to the error, in the order they occurred.
  
-  /usr/sbin/aa-logprof in <module>()
-    42 
-    43 if profiledir:
-    44     apparmor.profile_dir = apparmor.get_full_path(profiledir)
-    45     if not os.path.isdir(apparmor.profile_dir):
-    46         raise apparmor.AppArmorException("%s is not a 
directory."%profiledir)
-    47 
-    48 apparmor.loadincludes()
-    49 
-    50 apparmor.do_logprof_pass(logmark)
-    51 
+  /usr/sbin/aa-logprof in <module>()
+    42
+    43 if profiledir:
+    44     apparmor.profile_dir = apparmor.get_full_path(profiledir)
+    45     if not os.path.isdir(apparmor.profile_dir):
+    46         raise apparmor.AppArmorException("%s is not a 
directory."%profiledir)
+    47
+    48 apparmor.loadincludes()
+    49
+    50 apparmor.do_logprof_pass(logmark)
+    51
  apparmor = <module 'apparmor.aa' from 
'/usr/lib/python3/dist-packages/apparmor/aa.py'>
  apparmor.do_logprof_pass = <function do_logprof_pass>
  logmark = ''
  
-  /usr/lib/python3/dist-packages/apparmor/aa.py in do_logprof_pass(logmark='', 
passno=0, pid={13215: [['unknown_hat', 13215, '/usr/sbin/apache2', 
'null-www.xxxxxxxxxx.co.uk', 'PERMITTING', 'null-www.xxxxxxxxxx.co.uk'], 
['path', 13215, 'null-complain-profile', 'null-complain-profile', 'HINT', 
'PERMITTING', {'::r', 'r'}, '/proc/13215/attr/current', '']], 13697: [['path', 
13697, 'null-complain-profile', 'null-complain-profile', 'HINT', 'PERMITTING', 
{'::a', '::w', 'a', 'w'}, '/proc/13697/attr/current', '']]})
-  2184     ##    repo_cfg = read_config('repository.conf')
-  2185     ##    if not repo_cfg['repository'].get('enabled', False) or 
repo_cfg['repository]['enabled'] not in ['yes', 'no']:
-  2186     ##    UI_ask_to_enable_repo()
-  2187 
-  2188     log_reader = apparmor.logparser.ReadLog(pid, logfile, 
existing_profiles, profile_dir, log)
-  2189     log = log_reader.read_log(logmark)
-  2190     #read_log(logmark)
-  2191 
-  2192     for root in log:
-  2193         handle_children('', '', root)
+  /usr/lib/python3/dist-packages/apparmor/aa.py in do_logprof_pass(logmark='', 
passno=0, pid={13215: [['unknown_hat', 13215, '/usr/sbin/apache2', 
'null-www.xxxxxxxxxx.co.uk', 'PERMITTING', 'null-www.xxxxxxxxxx.co.uk'], 
['path', 13215, 'null-complain-profile', 'null-complain-profile', 'HINT', 
'PERMITTING', {'::r', 'r'}, '/proc/13215/attr/current', '']], 13697: [['path', 
13697, 'null-complain-profile', 'null-complain-profile', 'HINT', 'PERMITTING', 
{'::a', '::w', 'a', 'w'}, '/proc/13697/attr/current', '']]})
+  2184     ##    repo_cfg = read_config('repository.conf')
+  2185     ##    if not repo_cfg['repository'].get('enabled', False) or 
repo_cfg['repository]['enabled'] not in ['yes', 'no']:
+  2186     ##    UI_ask_to_enable_repo()
+  2187
+  2188     log_reader = apparmor.logparser.ReadLog(pid, logfile, 
existing_profiles, profile_dir, log)
+  2189     log = log_reader.read_log(logmark)
+  2190     #read_log(logmark)
+  2191
+  2192     for root in log:
+  2193         handle_children('', '', root)
  global log = [[['path', 13697, 'null-complain-profile', 
'null-complain-profile', 'HINT', 'PERMITTING', {'::a', '::w', 'a', 'w'}, 
'/proc/13697/attr/current', '']], [['unknown_hat', 13215, '/usr/sbin/apache2', 
'null-www.po4management.co.uk', 'PERMITTING', 'null-www.xxxxxxxxxx.co.uk'], 
['path', 13215, 'null-complain-profile', 'null-complain-profile', 'HINT', 
'PERMITTING', {'::r', 'r'}, '/proc/13215/attr/current', '']]]
  log_reader = <apparmor.logparser.ReadLog object>
  log_reader.read_log = <bound method ReadLog.read_log of 
<apparmor.logparser.ReadLog object>>
  logmark = ''
  
-  /usr/lib/python3/dist-packages/apparmor/logparser.py in 
read_log(self=<apparmor.logparser.ReadLog object>, logmark='')
-   402                     self.add_event_to_tree(event)
-   403                 except AppArmorException as e:
-   404                     ex_msg = ('%(msg)s\n\nThis error was caused by the 
log line:\n%(logline)s' %
-   405                             {'msg': e.value, 'logline': line})
-   406                     # when py3 only: Drop the original 
AppArmorException by passing None as the parent exception
-   407                     raise AppArmorBug(ex_msg)  # py3-only: from None
-   408 
-   409         self.LOG.close()
-   410         self.logmark = ''
-   411         return self.log
+  /usr/lib/python3/dist-packages/apparmor/logparser.py in 
read_log(self=<apparmor.logparser.ReadLog object>, logmark='')
+   402                     self.add_event_to_tree(event)
+   403                 except AppArmorException as e:
+   404                     ex_msg = ('%(msg)s\n\nThis error was caused by the 
log line:\n%(logline)s' %
+   405                             {'msg': e.value, 'logline': line})
+   406                     # when py3 only: Drop the original 
AppArmorException by passing None as the parent exception
+   407                     raise AppArmorBug(ex_msg)  # py3-only: from None
+   408
+   409         self.LOG.close()
+   410         self.logmark = ''
+   411         return self.log
  global AppArmorBug = <class 'apparmor.common.AppArmorBug'>
  ex_msg = 'Log contains unknown mode senw\n\nThis error was c...otocol=6 
requested_mask="send" denied_mask="send"'
  AppArmorBug: Log contains unknown mode senw
  
  This error was caused by the log line:
  type=AVC msg=audit(1463403689.381:267599): apparmor="ALLOWED" 
operation="file_perm" profile="/usr/sbin/apache2//null-www.xxxxxxxxxx.co.uk" 
pid=13215 comm="apache2" laddr=::ffff:192.168.1.100 lport=80 
faddr=::ffff:192.168.1.100 fport=45658 family="inet6" sock_type="stream" 
protocol=6 requested_mask="send" denied_mask="send"
-     __cause__ = None
-     __class__ = <class 'apparmor.common.AppArmorBug'>
-     __context__ = AppArmorException('Log contains unknown mode senw',)
-     __delattr__ = <method-wrapper '__delattr__' of AppArmorBug object>
-     __dict__ = {}
-     __dir__ = <built-in method __dir__ of AppArmorBug object>
-     __doc__ = 'This class represents AppArmor exceptions "that should never 
happen"'
-     __eq__ = <method-wrapper '__eq__' of AppArmorBug object>
-     __format__ = <built-in method __format__ of AppArmorBug object>
-     __ge__ = <method-wrapper '__ge__' of AppArmorBug object>
-     __getattribute__ = <method-wrapper '__getattribute__' of AppArmorBug 
object>
-     __gt__ = <method-wrapper '__gt__' of AppArmorBug object>
-     __hash__ = <method-wrapper '__hash__' of AppArmorBug object>
-     __init__ = <method-wrapper '__init__' of AppArmorBug object>
-     __le__ = <method-wrapper '__le__' of AppArmorBug object>
-     __lt__ = <method-wrapper '__lt__' of AppArmorBug object>
-     __module__ = 'apparmor.common'
-     __ne__ = <method-wrapper '__ne__' of AppArmorBug object>
-     __new__ = <built-in method __new__ of type object>
-     __reduce__ = <built-in method __reduce__ of AppArmorBug object>
-     __reduce_ex__ = <built-in method __reduce_ex__ of AppArmorBug object>
-     __repr__ = <method-wrapper '__repr__' of AppArmorBug object>
-     __setattr__ = <method-wrapper '__setattr__' of AppArmorBug object>
-     __setstate__ = <built-in method __setstate__ of AppArmorBug object>
-     __sizeof__ = <built-in method __sizeof__ of AppArmorBug object>
-     __str__ = <method-wrapper '__str__' of AppArmorBug object>
-     __subclasshook__ = <built-in method __subclasshook__ of type object>
-     __suppress_context__ = False
-     __traceback__ = <traceback object>
-     __weakref__ = None
-     args = ('Log contains unknown mode senw\n\nThis error was c...otocol=6 
requested_mask="send" denied_mask="send"',)
-     with_traceback = <built-in method with_traceback of AppArmorBug object>
+     __cause__ = None
+     __class__ = <class 'apparmor.common.AppArmorBug'>
+     __context__ = AppArmorException('Log contains unknown mode senw',)
+     __delattr__ = <method-wrapper '__delattr__' of AppArmorBug object>
+     __dict__ = {}
+     __dir__ = <built-in method __dir__ of AppArmorBug object>
+     __doc__ = 'This class represents AppArmor exceptions "that should never 
happen"'
+     __eq__ = <method-wrapper '__eq__' of AppArmorBug object>
+     __format__ = <built-in method __format__ of AppArmorBug object>
+     __ge__ = <method-wrapper '__ge__' of AppArmorBug object>
+     __getattribute__ = <method-wrapper '__getattribute__' of AppArmorBug 
object>
+     __gt__ = <method-wrapper '__gt__' of AppArmorBug object>
+     __hash__ = <method-wrapper '__hash__' of AppArmorBug object>
+     __init__ = <method-wrapper '__init__' of AppArmorBug object>
+     __le__ = <method-wrapper '__le__' of AppArmorBug object>
+     __lt__ = <method-wrapper '__lt__' of AppArmorBug object>
+     __module__ = 'apparmor.common'
+     __ne__ = <method-wrapper '__ne__' of AppArmorBug object>
+     __new__ = <built-in method __new__ of type object>
+     __reduce__ = <built-in method __reduce__ of AppArmorBug object>
+     __reduce_ex__ = <built-in method __reduce_ex__ of AppArmorBug object>
+     __repr__ = <method-wrapper '__repr__' of AppArmorBug object>
+     __setattr__ = <method-wrapper '__setattr__' of AppArmorBug object>
+     __setstate__ = <built-in method __setstate__ of AppArmorBug object>
+     __sizeof__ = <built-in method __sizeof__ of AppArmorBug object>
+     __str__ = <method-wrapper '__str__' of AppArmorBug object>
+     __subclasshook__ = <built-in method __subclasshook__ of type object>
+     __suppress_context__ = False
+     __traceback__ = <traceback object>
+     __weakref__ = None
+     args = ('Log contains unknown mode senw\n\nThis error was c...otocol=6 
requested_mask="send" denied_mask="send"',)
+     with_traceback = <built-in method with_traceback of AppArmorBug object>
  
  The above is a description of an error in a Python program.  Here is
  the original traceback:
  
  Traceback (most recent call last):
-   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 402, in 
read_log
-     self.add_event_to_tree(event)
-   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 206, in 
add_event_to_tree
-     e = self.parse_event_for_tree(e)
-   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 303, in 
parse_event_for_tree
-     raise AppArmorException(_('Log contains unknown mode %s') % rmask)
+   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 402, in 
read_log
+     self.add_event_to_tree(event)
+   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 206, in 
add_event_to_tree
+     e = self.parse_event_for_tree(e)
+   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 303, in 
parse_event_for_tree
+     raise AppArmorException(_('Log contains unknown mode %s') % rmask)
  apparmor.common.AppArmorException: 'Log contains unknown mode senw'
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
-   File "/usr/sbin/aa-logprof", line 50, in <module>
-     apparmor.do_logprof_pass(logmark)
-   File "/usr/lib/python3/dist-packages/apparmor/aa.py", line 2189, in 
do_logprof_pass
-     log = log_reader.read_log(logmark)
-   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 407, in 
read_log
-     raise AppArmorBug(ex_msg)  # py3-only: from None
+   File "/usr/sbin/aa-logprof", line 50, in <module>
+     apparmor.do_logprof_pass(logmark)
+   File "/usr/lib/python3/dist-packages/apparmor/aa.py", line 2189, in 
do_logprof_pass
+     log = log_reader.read_log(logmark)
+   File "/usr/lib/python3/dist-packages/apparmor/logparser.py", line 407, in 
read_log
+     raise AppArmorBug(ex_msg)  # py3-only: from None
  apparmor.common.AppArmorBug: Log contains unknown mode senw
  
  This error was caused by the log line:
  type=AVC msg=audit(1463403689.381:267599): apparmor="ALLOWED" 
operation="file_perm" profile="/usr/sbin/apache2//null-www.xxxxxxxxxx.co.uk" 
pid=13215 comm="apache2" laddr=::ffff:192.168.1.100 lport=80 
faddr=::ffff:192.168.1.100 fport=45658 family="inet6" sock_type="stream" 
protocol=6 requested_mask="send" denied_mask="send"

** Changed in: apparmor (Ubuntu)
   Importance: Undecided => Medium

** Changed in: apparmor (Ubuntu Xenial)
   Importance: Undecided => Medium

** Changed in: apparmor (Ubuntu Xenial)
     Assignee: (unassigned) => Tyler Hicks (tyhicks)

** Changed in: apparmor (Ubuntu)
     Assignee: (unassigned) => Tyler Hicks (tyhicks)

** Changed in: apparmor (Ubuntu Xenial)
       Status: Confirmed => In Progress

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1582374

Title:
  Log contains unknown mode senw

To manage notifications about this bug go to:
https://bugs.launchpad.net/apparmor/+bug/1582374/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to