1. 31 7月, 2018 1 次提交
  2. 22 5月, 2018 1 次提交
  3. 18 5月, 2018 2 次提交
  4. 15 5月, 2018 3 次提交
  5. 08 5月, 2018 2 次提交
    • T
      seccomp: Don't special case audited processes when logging · 326bee02
      Tyler Hicks 提交于
      Seccomp logging for "handled" actions such as RET_TRAP, RET_TRACE, or
      RET_ERRNO can be very noisy for processes that are being audited. This
      patch modifies the seccomp logging behavior to treat processes that are
      being inspected via the audit subsystem the same as processes that
      aren't under inspection. Handled actions will no longer be logged just
      because the process is being inspected. Since v4.14, applications have
      the ability to request logging of handled actions by using the
      SECCOMP_FILTER_FLAG_LOG flag when loading seccomp filters.
      
      With this patch, the logic for deciding if an action will be logged is:
      
        if action == RET_ALLOW:
          do not log
        else if action not in actions_logged:
          do not log
        else if action == RET_KILL:
          log
        else if action == RET_LOG:
          log
        else if filter-requests-logging:
          log
        else:
          do not log
      Reported-by: NSteve Grubb <sgrubb@redhat.com>
      Signed-off-by: NTyler Hicks <tyhicks@canonical.com>
      Acked-by: NKees Cook <keescook@chromium.org>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      326bee02
    • T
      seccomp: Audit attempts to modify the actions_logged sysctl · ea6eca77
      Tyler Hicks 提交于
      The decision to log a seccomp action will always be subject to the
      value of the kernel.seccomp.actions_logged sysctl, even for processes
      that are being inspected via the audit subsystem, in an upcoming patch.
      Therefore, we need to emit an audit record on attempts at writing to the
      actions_logged sysctl when auditing is enabled.
      
      This patch updates the write handler for the actions_logged sysctl to
      emit an audit record on attempts to write to the sysctl. Successful
      writes to the sysctl will result in a record that includes a normalized
      list of logged actions in the "actions" field and a "res" field equal to
      1. Unsuccessful writes to the sysctl will result in a record that
      doesn't include the "actions" field and has a "res" field equal to 0.
      
      Not all unsuccessful writes to the sysctl are audited. For example, an
      audit record will not be emitted if an unprivileged process attempts to
      open the sysctl file for reading since that access control check is not
      part of the sysctl's write handler.
      
      Below are some example audit records when writing various strings to the
      actions_logged sysctl.
      
      Writing "not-a-real-action", when the kernel.seccomp.actions_logged
      sysctl previously was "kill_process kill_thread trap errno trace log",
      emits this audit record:
      
       type=CONFIG_CHANGE msg=audit(1525392371.454:120): op=seccomp-logging
       actions=? old-actions=kill_process,kill_thread,trap,errno,trace,log
       res=0
      
      If you then write "kill_process kill_thread errno trace log", this audit
      record is emitted:
      
       type=CONFIG_CHANGE msg=audit(1525392401.645:126): op=seccomp-logging
       actions=kill_process,kill_thread,errno,trace,log
       old-actions=kill_process,kill_thread,trap,errno,trace,log res=1
      
      If you then write "log log errno trace kill_process kill_thread", which
      is unordered and contains the log action twice, it results in the same
      actions value as the previous record:
      
       type=CONFIG_CHANGE msg=audit(1525392436.354:132): op=seccomp-logging
       actions=kill_process,kill_thread,errno,trace,log
       old-actions=kill_process,kill_thread,errno,trace,log res=1
      
      If you then write an empty string to the sysctl, this audit record is
      emitted:
      
       type=CONFIG_CHANGE msg=audit(1525392494.413:138): op=seccomp-logging
       actions=(none) old-actions=kill_process,kill_thread,errno,trace,log
       res=1
      
      No audit records are generated when reading the actions_logged sysctl.
      Suggested-by: NSteve Grubb <sgrubb@redhat.com>
      Signed-off-by: NTyler Hicks <tyhicks@canonical.com>
      Acked-by: NKees Cook <keescook@chromium.org>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      ea6eca77
  6. 24 4月, 2018 1 次提交
  7. 16 2月, 2018 2 次提交
  8. 11 11月, 2017 1 次提交
  9. 10 10月, 2017 1 次提交
    • S
      audit: Record fanotify access control decisions · de8cd83e
      Steve Grubb 提交于
      The fanotify interface allows user space daemons to make access
      control decisions. Under common criteria requirements, we need to
      optionally record decisions based on policy. This patch adds a bit mask,
      FAN_AUDIT, that a user space daemon can 'or' into the response decision
      which will tell the kernel that it made a decision and record it.
      
      It would be used something like this in user space code:
      
        response.response = FAN_DENY | FAN_AUDIT;
        write(fd, &response, sizeof(struct fanotify_response));
      
      When the syscall ends, the audit system will record the decision as a
      AUDIT_FANOTIFY auxiliary record to denote that the reason this event
      occurred is the result of an access control decision from fanotify
      rather than DAC or MAC policy.
      
      A sample event looks like this:
      
      type=PATH msg=audit(1504310584.332:290): item=0 name="./evil-ls"
      inode=1319561 dev=fc:03 mode=0100755 ouid=1000 ogid=1000 rdev=00:00
      obj=unconfined_u:object_r:user_home_t:s0 nametype=NORMAL
      type=CWD msg=audit(1504310584.332:290): cwd="/home/sgrubb"
      type=SYSCALL msg=audit(1504310584.332:290): arch=c000003e syscall=2
      success=no exit=-1 a0=32cb3fca90 a1=0 a2=43 a3=8 items=1 ppid=901
      pid=959 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000
      fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=3 comm="bash"
      exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:
      s0-s0:c0.c1023 key=(null)
      type=FANOTIFY msg=audit(1504310584.332:290): resp=2
      
      Prior to using the audit flag, the developer needs to call
      fanotify_init or'ing in FAN_ENABLE_AUDIT to ensure that the kernel
      supports auditing. The calling process must also have the CAP_AUDIT_WRITE
      capability.
      Signed-off-by: Nsgrubb <sgrubb@redhat.com>
      Reviewed-by: NAmir Goldstein <amir73il@gmail.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      de8cd83e
  10. 05 9月, 2017 2 次提交
    • G
      audit: update the function comments · 196a5085
      Geliang Tang 提交于
      Update the function comments to match the code.
      Signed-off-by: NGeliang Tang <geliangtang@gmail.com>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      196a5085
    • M
      audit: Reduce overhead using a coarse clock · e832bf48
      Mel Gorman 提交于
      Commit 2115bb25 ("audit: Use timespec64 to represent audit timestamps")
      noted that audit timestamps were not y2038 safe and used a 64-bit
      timestamp. In itself, this makes sense but the conversion was from
      CURRENT_TIME to ktime_get_real_ts64() which is a heavier call to record
      an accurate timestamp which is required in some, but not all, cases. The
      impact is that when auditd is running without any rules that all syscalls
      have higher overhead. This is visible in the sysbench-thread benchmark as
      a 11.5% performance hit. That benchmark is dumb as rocks but it's also
      visible in redis as an 8-10% hit on all operations which is of greater
      concern. It is somewhat stupid of audit to track syscalls without any
      rules related to syscalls but that is how it behaves.
      
      The overhead can be directly measured with perf comparing 4.9 with 4.12
      
      4.9
           7.76%  sysbench         [kernel.vmlinux]    [k] __schedule
           7.62%  sysbench         [kernel.vmlinux]    [k] _raw_spin_lock
           7.37%  sysbench         libpthread-2.22.so  [.] __lll_lock_elision
           7.29%  sysbench         [kernel.vmlinux]    [.] syscall_return_via_sysret
           6.59%  sysbench         [kernel.vmlinux]    [k] native_sched_clock
           5.21%  sysbench         libc-2.22.so        [.] __sched_yield
           4.38%  sysbench         [kernel.vmlinux]    [k] entry_SYSCALL_64
           4.28%  sysbench         [kernel.vmlinux]    [k] do_syscall_64
           3.49%  sysbench         libpthread-2.22.so  [.] __lll_unlock_elision
           3.13%  sysbench         [kernel.vmlinux]    [k] __audit_syscall_exit
           2.87%  sysbench         [kernel.vmlinux]    [k] update_curr
           2.73%  sysbench         [kernel.vmlinux]    [k] pick_next_task_fair
           2.31%  sysbench         [kernel.vmlinux]    [k] syscall_trace_enter
           2.20%  sysbench         [kernel.vmlinux]    [k] __audit_syscall_entry
      .....
           0.00%  swapper          [kernel.vmlinux]    [k] read_tsc
      
      4.12
           7.84%  sysbench         [kernel.vmlinux]    [k] __schedule
           7.05%  sysbench         [kernel.vmlinux]    [k] _raw_spin_lock
           6.57%  sysbench         libpthread-2.22.so  [.] __lll_lock_elision
           6.50%  sysbench         [kernel.vmlinux]    [.] syscall_return_via_sysret
           5.95%  sysbench         [kernel.vmlinux]    [k] read_tsc
           5.71%  sysbench         [kernel.vmlinux]    [k] native_sched_clock
           4.78%  sysbench         libc-2.22.so        [.] __sched_yield
           4.30%  sysbench         [kernel.vmlinux]    [k] entry_SYSCALL_64
           3.94%  sysbench         [kernel.vmlinux]    [k] do_syscall_64
           3.37%  sysbench         libpthread-2.22.so  [.] __lll_unlock_elision
           3.32%  sysbench         [kernel.vmlinux]    [k] __audit_syscall_exit
           2.91%  sysbench         [kernel.vmlinux]    [k] __getnstimeofday64
      
      Note the additional overhead from read_tsc which goes from 0% to 5.95%.
      This is on a single-socket E3-1230 but similar overheads have been measured
      on an older machine which the patch also eliminates.
      
      The patch in question has no explanation as to why a fully-accurate timestamp
      is required and is likely an oversight.  Using a coarser, but monotically
      increasing, timestamp the overhead can be eliminated.  While it can be
      worked around by configuring or disabling audit, it's tricky enough to
      detect that a kernel fix is justified. With this patch, we see the following;
      
      sysbenchthread
                                    4.9.0                 4.12.0                 4.12.0
                                  vanilla                vanilla            coarse-v1r1
      Amean     1         1.49 (   0.00%)        1.66 ( -11.42%)        1.51 (  -1.34%)
      Amean     3         1.48 (   0.00%)        1.65 ( -11.45%)        1.50 (  -0.96%)
      Amean     5         1.49 (   0.00%)        1.67 ( -12.31%)        1.51 (  -1.83%)
      Amean     7         1.49 (   0.00%)        1.66 ( -11.72%)        1.50 (  -0.67%)
      Amean     12        1.48 (   0.00%)        1.65 ( -11.57%)        1.52 (  -2.89%)
      Amean     16        1.49 (   0.00%)        1.65 ( -11.13%)        1.51 (  -1.73%)
      
      The benchmark is reporting the time required for different thread counts to
      lock/unlock a private mutex which, while dense, demonstrates the syscall
      overhead. This is showing that 4.12 took a 11-12% hit but the overhead is
      almost eliminated by the patch. While the variance is not reported here,
      it's well within the noise with the patch applied.
      Signed-off-by: NMel Gorman <mgorman@techsingularity.net>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NDeepa Dinamani <deepa.kernel@gmail.com>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      e832bf48
  11. 04 9月, 2017 1 次提交
  12. 31 5月, 2017 1 次提交
    • R
      audit: add ambient capabilities to CAPSET and BPRM_FCAPS records · 7786f6b6
      Richard Guy Briggs 提交于
      Capabilities were augmented to include ambient capabilities in v4.3
      commit 58319057 ("capabilities: ambient capabilities").
      
      Add ambient capabilities to the audit BPRM_FCAPS and CAPSET records.
      
      The record contains fields "old_pp", "old_pi", "old_pe", "new_pp",
      "new_pi", "new_pe" so in keeping with the previous record
      normalizations, change the "new_*" variants to simply drop the "new_"
      prefix.
      
      A sample of the replaced BPRM_FCAPS record:
      RAW: type=BPRM_FCAPS msg=audit(1491468034.252:237): fver=2
      fp=0000000000200000 fi=0000000000000000 fe=1 old_pp=0000000000000000
      old_pi=0000000000000000 old_pe=0000000000000000 old_pa=0000000000000000
      pp=0000000000200000 pi=0000000000000000 pe=0000000000200000
      pa=0000000000000000
      
      INTERPRET: type=BPRM_FCAPS msg=audit(04/06/2017 04:40:34.252:237):
      fver=2 fp=sys_admin fi=none fe=chown old_pp=none old_pi=none
      old_pe=none old_pa=none pp=sys_admin pi=none pe=sys_admin pa=none
      
      A sample of the replaced CAPSET record:
      RAW: type=CAPSET msg=audit(1491469502.371:242): pid=833
      cap_pi=0000003fffffffff cap_pp=0000003fffffffff cap_pe=0000003fffffffff
      cap_pa=0000000000000000
      
      INTERPRET: type=CAPSET msg=audit(04/06/2017 05:05:02.371:242) : pid=833
      cap_pi=chown,dac_override,dac_read_search,fowner,fsetid,kill,
      setgid,setuid,setpcap,linux_immutable,net_bind_service,net_broadcast,
      net_admin,net_raw,ipc_lock,ipc_owner,sys_module,sys_rawio,sys_chroot,
      sys_ptrace,sys_pacct,sys_admin,sys_boot,sys_nice,sys_resource,sys_time,
      sys_tty_config,mknod,lease,audit_write,audit_control,setfcap,
      mac_override,mac_admin,syslog,wake_alarm,block_suspend,audit_read
      cap_pp=chown,dac_override,dac_read_search,fowner,fsetid,kill,setgid,
      setuid,setpcap,linux_immutable,net_bind_service,net_broadcast,
      net_admin,net_raw,ipc_lock,ipc_owner,sys_module,sys_rawio,sys_chroot,
      sys_ptrace,sys_pacct,sys_admin,sys_boot,sys_nice,sys_resource,
      sys_time,sys_tty_config,mknod,lease,audit_write,audit_control,setfcap,
      mac_override,mac_admin,syslog,wake_alarm,block_suspend,audit_read
      cap_pe=chown,dac_override,dac_read_search,fowner,fsetid,kill,setgid,
      setuid,setpcap,linux_immutable,net_bind_service,net_broadcast,
      net_admin,net_raw,ipc_lock,ipc_owner,sys_module,sys_rawio,sys_chroot,
      sys_ptrace,sys_pacct,sys_admin,sys_boot,sys_nice,sys_resource,
      sys_time,sys_tty_config,mknod,lease,audit_write,audit_control,setfcap,
      mac_override,mac_admin,syslog,wake_alarm,block_suspend,audit_read
      cap_pa=none
      
      See: https://github.com/linux-audit/audit-kernel/issues/40Signed-off-by: NRichard Guy Briggs <rgb@redhat.com>
      Acked-by: NSerge Hallyn <serge@hallyn.com>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      7786f6b6
  13. 02 5月, 2017 1 次提交
  14. 10 4月, 2017 2 次提交
    • J
      fsnotify: Free fsnotify_mark_connector when there is no mark attached · 08991e83
      Jan Kara 提交于
      Currently we free fsnotify_mark_connector structure only when inode /
      vfsmount is getting freed. This can however impose noticeable memory
      overhead when marks get attached to inodes only temporarily. So free the
      connector structure once the last mark is detached from the object.
      Since notification infrastructure can be working with the connector
      under the protection of fsnotify_mark_srcu, we have to be careful and
      free the fsnotify_mark_connector only after SRCU period passes.
      Reviewed-by: NMiklos Szeredi <mszeredi@redhat.com>
      Reviewed-by: NAmir Goldstein <amir73il@gmail.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      08991e83
    • J
      fsnotify: Move mark list head from object into dedicated structure · 9dd813c1
      Jan Kara 提交于
      Currently notification marks are attached to object (inode or vfsmnt) by
      a hlist_head in the object. The list is also protected by a spinlock in
      the object. So while there is any mark attached to the list of marks,
      the object must be pinned in memory (and thus e.g. last iput() deleting
      inode cannot happen). Also for list iteration in fsnotify() to work, we
      must hold fsnotify_mark_srcu lock so that mark itself and
      mark->obj_list.next cannot get freed. Thus we are required to wait for
      response to fanotify events from userspace process with
      fsnotify_mark_srcu lock held. That causes issues when userspace process
      is buggy and does not reply to some event - basically the whole
      notification subsystem gets eventually stuck.
      
      So to be able to drop fsnotify_mark_srcu lock while waiting for
      response, we have to pin the mark in memory and make sure it stays in
      the object list (as removing the mark waiting for response could lead to
      lost notification events for groups later in the list). However we don't
      want inode reclaim to block on such mark as that would lead to system
      just locking up elsewhere.
      
      This commit is the first in the series that paves way towards solving
      these conflicting lifetime needs. Instead of anchoring the list of marks
      directly in the object, we anchor it in a dedicated structure
      (fsnotify_mark_connector) and just point to that structure from the
      object. The following commits will also add spinlock protecting the list
      and object pointer to the structure.
      Reviewed-by: NMiklos Szeredi <mszeredi@redhat.com>
      Reviewed-by: NAmir Goldstein <amir73il@gmail.com>
      Signed-off-by: NJan Kara <jack@suse.cz>
      9dd813c1
  15. 28 3月, 2017 1 次提交
  16. 21 3月, 2017 1 次提交
    • P
      audit: fix auditd/kernel connection state tracking · 5b52330b
      Paul Moore 提交于
      What started as a rather straightforward race condition reported by
      Dmitry using the syzkaller fuzzer ended up revealing some major
      problems with how the audit subsystem managed its netlink sockets and
      its connection with the userspace audit daemon.  Fixing this properly
      had quite the cascading effect and what we are left with is this rather
      large and complicated patch.  My initial goal was to try and decompose
      this patch into multiple smaller patches, but the way these changes
      are intertwined makes it difficult to split these changes into
      meaningful pieces that don't break or somehow make things worse for
      the intermediate states.
      
      The patch makes a number of changes, but the most significant are
      highlighted below:
      
      * The auditd tracking variables, e.g. audit_sock, are now gone and
      replaced by a RCU/spin_lock protected variable auditd_conn which is
      a structure containing all of the auditd tracking information.
      
      * We no longer track the auditd sock directly, instead we track it
      via the network namespace in which it resides and we use the audit
      socket associated with that namespace.  In spirit, this is what the
      code was trying to do prior to this patch (at least I think that is
      what the original authors intended), but it was done rather poorly
      and added a layer of obfuscation that only masked the underlying
      problems.
      
      * Big backlog queue cleanup, again.  In v4.10 we made some pretty big
      changes to how the audit backlog queues work, here we haven't changed
      the queue design so much as cleaned up the implementation.  Brought
      about by the locking changes, we've simplified kauditd_thread() quite
      a bit by consolidating the queue handling into a new helper function,
      kauditd_send_queue(), which allows us to eliminate a lot of very
      similar code and makes the looping logic in kauditd_thread() clearer.
      
      * All netlink messages sent to auditd are now sent via
      auditd_send_unicast_skb().  Other than just making sense, this makes
      the lock handling easier.
      
      * Change the audit_log_start() sleep behavior so that we never sleep
      on auditd events (unchanged) or if the caller is holding the
      audit_cmd_mutex (changed).  Previously we didn't sleep if the caller
      was auditd or if the message type fell between a certain range; the
      type check was a poor effort of doing what the cmd_mutex check now
      does.  Richard Guy Briggs originally proposed not sleeping the
      cmd_mutex owner several years ago but his patch wasn't acceptable
      at the time.  At least the idea lives on here.
      
      * A problem with the lost record counter has been resolved.  Steve
      Grubb and I both happened to notice this problem and according to
      some quick testing by Steve, this problem goes back quite some time.
      It's largely a harmless problem, although it may have left some
      careful sysadmins quite puzzled.
      
      Cc: <stable@vger.kernel.org> # 4.10.x-
      Reported-by: NDmitry Vyukov <dvyukov@google.com>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      5b52330b
  17. 15 2月, 2017 1 次提交
  18. 14 2月, 2017 1 次提交
  19. 15 12月, 2016 1 次提交
  20. 30 11月, 2016 1 次提交
  21. 21 11月, 2016 1 次提交
  22. 15 11月, 2016 1 次提交
  23. 31 8月, 2016 1 次提交
  24. 21 7月, 2016 1 次提交
    • P
      audit: fix a double fetch in audit_log_single_execve_arg() · 43761473
      Paul Moore 提交于
      There is a double fetch problem in audit_log_single_execve_arg()
      where we first check the execve(2) argumnets for any "bad" characters
      which would require hex encoding and then re-fetch the arguments for
      logging in the audit record[1].  Of course this leaves a window of
      opportunity for an unsavory application to munge with the data.
      
      This patch reworks things by only fetching the argument data once[2]
      into a buffer where it is scanned and logged into the audit
      records(s).  In addition to fixing the double fetch, this patch
      improves on the original code in a few other ways: better handling
      of large arguments which require encoding, stricter record length
      checking, and some performance improvements (completely unverified,
      but we got rid of some strlen() calls, that's got to be a good
      thing).
      
      As part of the development of this patch, I've also created a basic
      regression test for the audit-testsuite, the test can be tracked on
      GitHub at the following link:
      
       * https://github.com/linux-audit/audit-testsuite/issues/25
      
      [1] If you pay careful attention, there is actually a triple fetch
      problem due to a strnlen_user() call at the top of the function.
      
      [2] This is a tiny white lie, we do make a call to strnlen_user()
      prior to fetching the argument data.  I don't like it, but due to the
      way the audit record is structured we really have no choice unless we
      copy the entire argument at once (which would require a rather
      wasteful allocation).  The good news is that with this patch the
      kernel no longer relies on this strnlen_user() value for anything
      beyond recording it in the log, we also update it with a trustworthy
      value whenever possible.
      Reported-by: NPengfei Wang <wpengfeinudt@gmail.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NPaul Moore <paul@paul-moore.com>
      43761473
  25. 15 7月, 2016 1 次提交
  26. 29 6月, 2016 2 次提交
  27. 17 6月, 2016 1 次提交
  28. 27 4月, 2016 1 次提交
  29. 23 3月, 2016 1 次提交
  30. 25 12月, 2015 1 次提交
  31. 07 8月, 2015 2 次提交
    • R
      audit: implement audit by executable · 34d99af5
      Richard Guy Briggs 提交于
      This adds the ability audit the actions of a not-yet-running process.
      
      This patch implements the ability to filter on the executable path.  Instead of
      just hard coding the ino and dev of the executable we care about at the moment
      the rule is inserted into the kernel, use the new audit_fsnotify
      infrastructure to manage this dynamically.  This means that if the filename
      does not yet exist but the containing directory does, or if the inode in
      question is unlinked and creat'd (aka updated) the rule will just continue to
      work.  If the containing directory is moved or deleted or the filesystem is
      unmounted, the rule is deleted automatically.  A future enhancement would be to
      have the rule survive across directory disruptions.
      
      This is a heavily modified version of a patch originally submitted by Eric
      Paris with some ideas from Peter Moody.
      
      Cc: Peter Moody <peter@hda3.com>
      Cc: Eric Paris <eparis@redhat.com>
      Signed-off-by: NRichard Guy Briggs <rgb@redhat.com>
      [PM: minor whitespace clean to satisfy ./scripts/checkpatch]
      Signed-off-by: NPaul Moore <pmoore@redhat.com>
      34d99af5
    • R
      audit: use macros for unset inode and device values · 84cb777e
      Richard Guy Briggs 提交于
      Clean up a number of places were casted magic numbers are used to represent
      unset inode and device numbers in preparation for the audit by executable path
      patch set.
      Signed-off-by: NRichard Guy Briggs <rgb@redhat.com>
      [PM: enclosed the _UNSET macros in parentheses for ./scripts/checkpatch]
      Signed-off-by: NPaul Moore <pmoore@redhat.com>
      84cb777e