semodule -i and load_policy coredumps on version 3.0 - not latest GIT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm getting core dumps from inserting modules, I can repeatedly run semodule 
with the same module and have it crash some times and not others.  But it 
crashes more often if I have 2 slightly different modules of the same name and 
alternate between inserting them.

while semodule -i pol/toadd.pp && sleep 8 && semodule -i pol2/toadd.pp && 
sleep 8 ; do date ; done

The above shell command is pretty good at causing SEGVs.

This happens regularly with libsepol version 3.0 (which is in Debian/
Unstable), so far I have not reproduced it with the latest git version of 
libsepol.  While I'm not certain the bug is fixed in the latest git version, I 
think it's very likely to be fixed (I'll have to run tests for another couple 
of days to be convinced).  Have libsepol developers knowingly fixed such a bug?

Here's coredumpctl output from semodule (at the time libsepol wasn't compiled 
with debugging symbols):

Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/sbin/semodule -i toadd.pp'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
120     ../sysdeps/x86_64/multiarch/../strlen.S: No such file or directory.
(gdb) bt
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x00007ff2128cf756 in __vfprintf_internal (s=s@entry=0x7ffecc31daa0, 
    format=format@entry=0x7ff212af88f9 "Error: Unknown keyword %s\n", 
    ap=ap@entry=0x7ffecc31de40, mode_flags=mode_flags@entry=2)
    at vfprintf-internal.c:1688
#2  0x00007ff2128e11f6 in __vsnprintf_internal (
    string=0x7ffecc31dc20 "Error: Unknown keyword ", maxlen=<optimized out>, 
    format=0x7ff212af88f9 "Error: Unknown keyword %s\n", args=0x7ffecc31de40, 
    mode_flags=2) at vsnprintf.c:114

Here's one from load_policy which I believe is related.  Running semodule -i 
repeatedly on the same file doesn't seem to cause a problem (I've had a loop of 
that run for hours without a SEGV) but it happened quickly when alternately 
loading 2 slightly different files.

  Command Line: /sbin/load_policy
    Executable: /usr/sbin/load_policy
       Boot ID: 8727799a8e0b44f1885f1b4c681efea9
    Machine ID: 384a085cdf4a437cae153168e34245f4
      Hostname: play
       Storage: /var/lib/systemd/coredump/core.load_policy.
0.8727799a8e0b44f188>
       Message: Process 70655 (load_policy) of user 0 dumped core.
                
                Stack trace of thread 70655:
                #0  0x00007f0716a6685d ebitmap_destroy (libsepol.so.1 + 
0x1185d)
                #1  0x00007f0716a635eb constraint_expr_destroy (libsepol.so.1 
+>
                #2  0x00007f0716aa7d71 class_destroy (libsepol.so.1 + 0x52d71)
                #3  0x00007f0716a73893 hashtab_map (libsepol.so.1 + 0x1e893)
                #4  0x00007f0716aa86b6 symtabs_destroy (libsepol.so.1 + 
0x536b6)
                #5  0x00007f0716aa822b policydb_destroy (libsepol.so.1 + 
0x5322>
                #6  0x00007f0716ab091a policydb_to_image (libsepol.so.1 + 
0x5b9>
                #7  0x00007f0716ab0e08 sepol_policydb_to_image (libsepol.so.1 
+>
                #8  0x00007f0716a3eadc selinux_mkload_policy (libselinux.so.1 
+>
                #9  0x00005560e76d12bf n/a (load_policy + 0x12bf)
                #10 0x00007f071688de0b __libc_start_main (libc.so.6 + 0x26e0b)
                #11 0x00005560e76d134a n/a (load_policy + 0x134a)

Here's one from semodule -i:

  Command Line: semodule -i pol2/toadd.pp
    Executable: /usr/sbin/semodule
       Boot ID: 8727799a8e0b44f1885f1b4c681efea9
    Machine ID: 384a085cdf4a437cae153168e34245f4
      Hostname: play
       Storage: /var/lib/systemd/coredump/core.semodule.
0.8727799a8e0b44f1885f1>
       Message: Process 92165 (semodule) of user 0 dumped core.
                
                Stack trace of thread 92165:
                #0  0x00007ff72cde6d9d __cil_build_ast_node_helper 
(libsepol.so>
                #1  0x00007ff72ce08721 cil_tree_walk_core (libsepol.so.1 + 
0xaf>
                #2  0x00007ff72ce08884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #3  0x00007ff72ce08793 cil_tree_walk_core (libsepol.so.1 + 
0xaf>
                #4  0x00007ff72ce08884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #5  0x00007ff72cde8bdf cil_build_ast (libsepol.so.1 + 0x8fbdf)
                #6  0x00007ff72cdc9c25 cil_compile_nopdb (libsepol.so.1 + 
0x70c>
                #7  0x00007ff72cd2d9b9 n/a (libsemanage.so.1 + 0x169b9)
                #8  0x00007ff72cd32e2e semanage_commit (libsemanage.so.1 + 
0x1b>
                #9  0x000055caa80921f4 n/a (semodule + 0x31f4)


  Command Line: semodule -i pol/toadd.pp
    Executable: /usr/sbin/semodule
       Boot ID: 8727799a8e0b44f1885f1b4c681efea9
    Machine ID: 384a085cdf4a437cae153168e34245f4
      Hostname: play
       Storage: /var/lib/systemd/coredump/core.semodule.
0.8727799a8e0b44f1885f1b4c681efea9.97315.1586589967000000000000.lz4
       Message: Process 97315 (semodule) of user 0 dumped core.
                
                Stack trace of thread 97315:
                #0  0x00007fb79a99897e cil_list_destroy (libsepol.so.1 + 
0x9797e)
                #1  0x00007fb79a9a5339 cil_reset_classperms (libsepol.so.1 + 
0xa4339)
                #2  0x00007fb79a9a53c1 cil_reset_classperms_list (libsepol.so.
1 + 0xa43c1)
                #3  0x00007fb79a9a574d cil_reset_avrule (libsepol.so.1 + 
0xa474d)
                #4  0x00007fb79a9a5ed5 __cil_reset_node (libsepol.so.1 + 
0xa4ed5)
                #5  0x00007fb79a9b0721 cil_tree_walk_core (libsepol.so.1 + 
0xaf721)
                #6  0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #7  0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #8  0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #9  0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #10 0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #11 0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #12 0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #13 0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #14 0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #15 0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #16 0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #17 0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #18 0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #19 0x00007fb79a9b0793 cil_tree_walk_core (libsepol.so.1 + 
0xaf793)
                #20 0x00007fb79a9b0884 cil_tree_walk (libsepol.so.1 + 0xaf884)
                #21 0x00007fb79a9a6137 cil_reset_ast (libsepol.so.1 + 0xa5137)
                #22 0x00007fb79a9ae84f cil_resolve_ast (libsepol.so.1 + 
0xad84f)
                #23 0x00007fb79a971c9b cil_compile_nopdb (libsepol.so.1 + 
0x70c9b)
                #24 0x00007fb79a8d59b9 n/a (libsemanage.so.1 + 0x169b9)
                #25 0x00007fb79a8dae2e semanage_commit (libsemanage.so.1 + 
0x1be2e)
                #26 0x0000565277c421f4 n/a (semodule + 0x31f4)
                #27 0x00007fb79a722e0b __libc_start_main (libc.so.6 + 0x26e0b)
                #28 0x0000565277c4271a n/a (semodule + 0x371a)


  Command Line: semodule -i pol/toadd.pp
    Executable: /usr/sbin/semodule
       Boot ID: 587ecc120f8d44d38475a9fa1e067f66
    Machine ID: 384a085cdf4a437cae153168e34245f4
      Hostname: play
       Storage: /var/lib/systemd/coredump/core.semodule.
0.587ecc120f8d44d38475a>
       Message: Process 17359 (semodule) of user 0 dumped core.
                
                Stack trace of thread 17359:
                #0  0x00007f4aa083c956 cil_list_destroy (libsepol.so.1 + 
0x9795>
                #1  0x00007f4aa0827e4e cil_destroy_classperms (libsepol.so.1 + 
>
                #2  0x00007f4aa0828082 cil_destroy_classperms_list 
(libsepol.so>
                #3  0x00007f4aa082a923 cil_destroy_avrule (libsepol.so.1 + 
0x85>
                #4  0x00007f4aa0816438 cil_destroy_data (libsepol.so.1 + 
0x7143>
                #5  0x00007f4aa08546a4 cil_tree_node_destroy (libsepol.so.1 + 
0>
                #6  0x00007f4aa085455c cil_tree_children_destroy (libsepol.so.
1>
                #7  0x00007f4aa0854491 cil_tree_subtree_destroy (libsepol.so.1 
>
                #8  0x00007f4aa085445a cil_tree_destroy (libsepol.so.1 + 
0xaf45>
                #9  0x00007f4aa0815842 cil_db_destroy (libsepol.so.1 + 
0x70842)
                #10 0x00007f4aa0779b47 n/a (libsemanage.so.1 + 0x16b47)
                #11 0x00007f4aa077ee2e semanage_commit (libsemanage.so.1 + 
0x1b>
                #12 0x0000561cbbe3c1f4 n/a (semodule + 0x31f4)
                #13 0x00007f4aa05c6e0b __libc_start_main (libc.so.6 + 0x26e0b)
                #14 0x0000561cbbe3c71a n/a (semodule + 0x371a)

Here's one of the smaller entries in my collection of valgrind outputs from 
semodule having problems.  They all appear to be uninitialised memory.

Memcheck, a memory error detector
Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
Command: semodule -i pol/toadd.pp

Conditional jump or move depends on uninitialised value(s)
   at 0x48FA768: cil_tree_walk_core (cil_tree.c:283)
   by 0x48FA883: cil_tree_walk (cil_tree.c:316)
   by 0x48FA792: cil_tree_walk_core (cil_tree.c:284)
   by 0x48FA883: cil_tree_walk (cil_tree.c:316)
   by 0x48F8510: cil_resolve_ast (cil_resolve_ast.c:3928)
   by 0x48BBC9A: cil_compile@@LIBSEPOL_1.1 (cil.c:571)
   by 0x49489B8: ??? (in /usr/lib/x86_64-linux-gnu/libsemanage.so.1)
   by 0x494DE2D: semanage_commit (in /usr/lib/x86_64-linux-gnu/libsemanage.so.
1)
   by 0x10B1F3: ??? (in /usr/sbin/semodule)
   by 0x499AE0A: (below main) (libc-start.c:308)

Conditional jump or move depends on uninitialised value(s)
   at 0x48FA4F3: cil_tree_children_destroy (cil_tree.c:190)
   by 0x48FA490: cil_tree_subtree_destroy (cil_tree.c:172)
   by 0x48FA459: cil_tree_destroy (cil_tree.c:165)
   by 0x48BB841: cil_db_destroy (cil.c:470)
   by 0x4948B46: ??? (in /usr/lib/x86_64-linux-gnu/libsemanage.so.1)
   by 0x494DE2D: semanage_commit (in /usr/lib/x86_64-linux-gnu/libsemanage.so.
1)
   by 0x10B1F3: ??? (in /usr/sbin/semodule)
   by 0x499AE0A: (below main) (libc-start.c:308)


HEAP SUMMARY:
    in use at exit: 5,595 bytes in 114 blocks
  total heap usage: 14,200,981 allocs, 14,200,867 frees, 2,058,178,500 bytes 
allocated

LEAK SUMMARY:
   definitely lost: 0 bytes in 0 blocks
   indirectly lost: 0 bytes in 0 blocks
     possibly lost: 0 bytes in 0 blocks
   still reachable: 5,595 bytes in 114 blocks
        suppressed: 0 bytes in 0 blocks
Rerun with --leak-check=full to see details of leaked memory

For lists of detected and suppressed errors, rerun with: -s
ERROR SUMMARY: 54 errors from 2 contexts (suppressed: 0 from 0)


-- 
My Main Blog         http://etbe.coker.com.au/
My Documents Blog    http://doc.coker.com.au/






[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux