Kernel warns of executable stack

Chris Packham Chris.Packham at alliedtelesis.co.nz
Thu Apr 23 01:13:59 UTC 2020


Hi,

I'm just in the process of updating our products to Linux v5.6 and one
of them produces a new warning message from the kernel about busybox
(v1.31.1)

  kernel: process '/bin/busybox' started with executable stack

The target in question is a mips64 (octeon3). We have other targets
(mips32, armv7, ppc32, ppc64) which don't complain.

Some searching led me to 

https://lore.kernel.org/lkml/20191208171918.GC19716@avx2/

Which suggests I should be filing a bug report with the vendor so here
I am.

Here's some readelf output from the binary

$ readelf -l output/mips64/busybox/new/install/bin/busybox                                                                                                                              
                                                                                                                                                                                                                                             
Elf file type is EXEC (Executable file)                                                                                                                                                                                                      
Entry point 0x120006c80                                                                                                                                                                                                                      
There are 8 program headers, starting at offset 64                                                                                                                                                                                           
                                                                                                                                                                                                                                             
Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000120000040 0x0000000120000040
                 0x00000000000001c0 0x00000000000001c0  R      0x8
  INTERP         0x00000000000a890c 0x00000001200a890c 0x00000001200a890c
                 0x000000000000000f 0x000000000000000f  R      0x1
      [Requesting program interpreter: /lib64/ld.so.1]
  ABIFLAGS       0x0000000000000200 0x0000000120000200 0x0000000120000200
                 0x0000000000000018 0x0000000000000018  R      0x8
  LOAD           0x0000000000000000 0x0000000120000000 0x0000000120000000
                 0x00000000000a8940 0x00000000000a8940  R E    0x10000
  LOAD           0x00000000000a9000 0x00000001200b9000 0x00000001200b9000
                 0x0000000000002ff0 0x0000000000003810  RW     0x10000
  DYNAMIC        0x0000000000002dd8 0x0000000120002dd8 0x0000000120002dd8
                 0x00000000000001e0 0x00000000000001e0  R      0x8
  NOTE           0x00000000000a8920 0x00000001200a8920 0x00000001200a8920
                 0x0000000000000020 0x0000000000000020  R      0x4
  NULL           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000         0x8

 Section to Segment mapping:

  Segment Sections...
   00
   01     .interp
   02     .MIPS.abiflags
   03     .MIPS.abiflags .MIPS.options .dynamic .hash .dynsym .dynstr .gnu.version .gnu.version_r .init .text .MIPS.stubs .fini .rodata .interp .eh_frame .note.ABI-tag
   04     .ctors .dtors .data.rel.ro .data .rld_map .got .sdata .sbss .bss
   05     .dynamic
   06     .note.ABI-tag
   07

And for comparison here's a mips32 one

$ readelf -l output/mips32r2/busybox/new/install/bin/busybox

Elf file type is EXEC (Executable file)
Entry point 0x403840
There are 9 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x00400034 0x00400034 0x00120 0x00120 R   0x4
  INTERP         0x000154 0x00400154 0x00400154 0x0000d 0x0000d R   0x1
      [Requesting program interpreter: /lib/ld.so.1]
  ABIFLAGS       0x000188 0x00400188 0x00400188 0x00018 0x00018 R   0x8
  REGINFO        0x0001a0 0x004001a0 0x004001a0 0x00018 0x00018 R   0x4
  LOAD           0x000000 0x00400000 0x00400000 0x8949c 0x8949c R E 0x10000
  LOAD           0x08949c 0x0049949c 0x0049949c 0x01138 0x01824 RW  0x10000
  DYNAMIC        0x0001b8 0x004001b8 0x004001b8 0x000f0 0x000f0 R   0x4
  NOTE           0x000164 0x00400164 0x00400164 0x00020 0x00020 R   0x4
  NULL           0x000000 0x00000000 0x00000000 0x00000 0x00000     0x4

 Section to Segment mapping:
  Segment Sections...
   00
   01     .interp
   02     .MIPS.abiflags
   03     .reginfo
   04     .interp .note.ABI-tag .MIPS.abiflags .reginfo .dynamic .hash .dynsym .dynstr .gnu.version .gnu.version_r .init .text .MIPS.stubs .fini .rodata .eh_frame
   05     .ctors .dtors .data.rel.ro .data .rld_map .got .sdata .sbss .bss
   06     .dynamic
   07     .note.ABI-tag
   08

There's nothing that really sticks out to me as different.

Can anyone shed some light on this?

Regards,
Chris


More information about the busybox mailing list