[apparmor] [patch] Handle ldd $? == 1 in get_reqs()

John Johansen john.johansen at canonical.com
Fri Dec 30 22:05:52 UTC 2016


On 12/30/2016 01:13 PM, Christian Boltz wrote:
> Hello,
> 
> ldd exits with $? == 1 if a file is 'not a dynamic executable'.
> This is correct behaviour of ldd, so we should handle it instead of
> raising an exception ;-)
> 
> Also extend fake_ldd and add a test to test-aa.py to cover this.
> 
> 
> I propose this patch for trunk, 2.10 and 2.9.
> 
> Note that 2.10 and 2.9 don't have tests for get_reqs() nor fake_ldd,
> so those branches will only get the aa.py changes.
> 
> 
Acked-by: John Johansen <john.johansen at canonical.com>

> 
> [ 01-ldd-ret-1.diff ]
> 
> === modified file ./utils/apparmor/aa.py
> --- utils/apparmor/aa.py        2016-10-14 20:31:20.282043000 +0200
> +++ utils/apparmor/aa.py        2016-12-30 22:05:14.686659297 +0100
> @@ -363,9 +363,9 @@
>          raise AppArmorException('Can\'t find ldd')
>  
>      ret, ldd_out = get_output([ldd, file])
> -    if ret == 0:
> +    if ret == 0 or ret == 1:
>          for line in ldd_out:
> -            if 'not a dynamic executable' in line:
> +            if 'not a dynamic executable' in line:  # comes with ret == 1
>                  break
>              if 'cannot read header' in line:
>                  break
> === modified file ./utils/test/fake_ldd
> --- utils/test/fake_ldd 2016-10-01 20:33:23.421684000 +0200
> +++ utils/test/fake_ldd 2016-12-30 21:59:18.940461775 +0100
> @@ -44,6 +44,10 @@
>      print('        linux-vdso.so.1 (0x00007ffde132b000)')
>  
>  
> +elif sys.argv[1] == '/AATest/sbin/ldconfig':
> +    print('        not a dynamic executable')
> +    sys.exit(1)  # ldd exits with $? == 1 in this case
> +
>  elif sys.argv[1].startswith('/tmp/aa-test-'):  # test file generated by test-aa.py
>      print('        not a dynamic executable')
>  
> === modified file ./utils/test/test-aa.py
> --- utils/test/test-aa.py       2016-10-01 21:00:58.949770000 +0200
> +++ utils/test/test-aa.py       2016-12-30 22:01:06.867913164 +0100
> @@ -94,6 +94,7 @@
>      tests = [
>          ('/AATest/bin/bash',    ['/AATest/lib64/libreadline.so.6', '/AATest/lib64/libtinfo.so.6', '/AATest/lib64/libdl.so.2', '/AATest/lib64/libc.so.6', '/AATest/lib64/ld-linux-x86-64.so.2']),
>          ('/tmp/aa-test-foo',    []),
> +        ('/AATest/sbin/ldconfig', []),  # comes with $? == 1
>      ]
>  
>      def _run_test(self, params, expected):
> 
> 
> Regards,
> 
> Christian Boltz
> 
> 
> 




More information about the AppArmor mailing list