Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6593497

Linux: Hotspot JVM assumes that the process owner has read access to '/proc/self/maps'.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P3 P3
    • None
    • 6.1_sp10, 5.0u9
    • hotspot
    • None
    • generic, x86
    • linux_redhat_3.0, linux_redhat_4.0

      1. Install Web Server 7.0 U1 as *non-root* from /java/re/sjsws/7.0u1/promoted/fcs/b13/bundles/linux
      2. Start https-<config> instance as *root* (https-<config>/bin/startserv)
      You will see the below warning during the startup:
      warning: CORE3283: stderr: Java HotSpot(TM) Server VM warning: Can't detect initial thread stack location - find_vma failed

      My evaluation:
      --------------
      strace output shows:
      ------------------------------------
      [pid 3276] open("/proc/self/maps", O_RDONLY) = -1 EACCES (Permission denied)
      [pid 3276] write(2, "Java HotSpot(TM) Server VM warni"..., 36) = 36
      [pid 3283] <... poll resumed> [{fd=14, events=POLLIN|POLLPRI, revents=POLLIN}], 1, 5000) = 1
      [pid 3276] write(2, "Can\'t detect initial thread stac"..., 61 <unfinished ...>
      [pid 3283] read(14, <unfinished ...>
      [pid 3276] <... write resumed> ) = 61
      [pid 3283] <... read resumed> "Java HotSpot(TM) Server VM warni"..., 4096) = 97
      [pid 3276] getrlimit(RLIMIT_NOFILE, <unfinished ...>
      [pid 3283] write(11, "warning", 7 <unfinished ...>
      [pid 3276] <... getrlimit resumed> {rlim_cur=1024, rlim_max=1024}) = 0
      warning[pid 3283] <... write resumed> ) = 7
      [pid 3276] setrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024} <unfinished ...>
      [pid 3283] write(11, ": CORE3283: stderr: Java HotSpot"..., 117 <unfinished ...>
      [pid 3276] <... setrlimit resumed> ) = 0
      : CORE3283: stderr: Java HotSpot(TM) Server VM warning: Can't detect initial thread stack location - find_vma failed
      ------------------------------------

      The above strace output indicates that the attempt to open /proc/self/maps fails.
      This happens when the *login user* is root and *webserver user* is non-root.

      See below. This is another run. Don't try to relate the pids above.

      [root@dhcp-usca17-121-3 bin]# ps -ef | grep web
      root 3688 1 0 06:08 ? 00:00:00 webservd-wdog -d /opt/meduri/work/ws7u1/050207/iplanet/ias/server/work/B1/Linux2.4_DBG.OBJ/https-test/config -r /opt/meduri/work/ws7u1/050207/iplanet/ias/server/work/B1/Linux2.4_DBG.OBJ -t /tmp/https-test-2726adae -u meduri

      root 3689 3688 2 06:08 ? 00:00:00 webservd -d /opt/meduri/work/ws7u1/050207/iplanet/ias/server/work/B1/Linux2.4_DBG.OBJ/https-test/config -r /opt/meduri/work/ws7u1/050207/iplanet/ias/server/work/B1/Linux2.4_DBG.OBJ -t /tmp/https-test-2726adae -u meduri

      meduri 3691 3689 51 06:08 ? 00:00:09 webservd -d /opt/meduri/work/ws7u1/050207/iplanet/ias/server/work/B1/Linux2.4_DBG.OBJ/https-test/config -r /opt/meduri/work/ws7u1/050207/iplanet/ias/server/work/B1/Linux2.4_DBG.OBJ -t /tmp/https-test-2726adae -u meduri

      This tells
        root owns 3688
        root owns 3689
        meduri owns process 3691

      [root@dhcp-usca17-121-3 bin]# ls -l /proc/3691/maps
      -r-------- 1 root root 0 Aug 15 06:09 /proc/3691/maps

      The above shows /proc/self/maps for 3691 is owned by root.

      JVM assumes that the process owner has 'read' access to '/proc/self/maps' and an attempt to read causes this warning.

            xlu Xiaobin Lu (Inactive)
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: