[Bug 196110] New: [patch] procstat shows wrong stack nx information in ELF auxv mode

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Thu Dec 18 20:57:36 UTC 2014


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196110

            Bug ID: 196110
           Summary: [patch] procstat shows wrong stack nx information in
                    ELF auxv mode
           Product: Base System
           Version: 11.0-CURRENT
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs at FreeBSD.org
          Reporter: code.jpe at gmail.com

Created attachment 150736
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=150736&action=edit
Patch for procstat_auxv.c

The ELF auxiliary vector displayed by `procstat -x` contains
information about whether or not the stack for that process is
executable or not.

This information is currently reversed, showing executable
when nxstack is enabled. It can be reproduced quite easily:

# sysctl kern.elf64.nxstack
kern.elf64.nxstack: 1
# procstat -x $$ | grep AT_STACKPROT
 1471 csh              AT_STACKPROT     EXECUTABLE

After disabling nxstack, new processes show nonexecutable.

# sysctl kern.elf64.nxstack=0
kern.elf64.nxstack: 1 -> 0
# sh -c 'procstat -x $$ | grep AT_STACKPROT'
 1477 sh               AT_STACKPROT     NONEXECUTABLE


Looking at the procstat code, the displayed string labels are
reversed for the check. The bitwise and will return !0 if the
executable bit is set.

      if ((auxv[i].a_un.a_val & VM_PROT_EXECUTE) != 0)
        PRINT(AT_STACKPROT, %s, "NONEXECUTABLE");
      else
        PRINT(AT_STACKPROT, %s, "EXECUTABLE");
      break;

Attached is a simple patch to switch the labels.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list