diff --git a/jdk/src/solaris/classes/java/io/UnixFileSystem.java b/jdk/src/solaris/classes/java/io/UnixFileSystem.java
index 63a516e..7307173 100644
--- a/jdk/src/solaris/classes/java/io/UnixFileSystem.java
+++ b/jdk/src/solaris/classes/java/io/UnixFileSystem.java
@@ -34,7 +34,6 @@
     private final char slash;
     private final char colon;
     private final String javaHome;
-    private final String userDir;
 
     public UnixFileSystem() {
         slash = AccessController.doPrivileged(
@@ -43,8 +42,6 @@
             new GetPropertyAction("path.separator")).charAt(0);
         javaHome = AccessController.doPrivileged(
             new GetPropertyAction("java.home"));
-        userDir = AccessController.doPrivileged(
-            new GetPropertyAction("user.dir"));
     }
 
 
@@ -138,11 +135,7 @@
 
     public String resolve(File f) {
         if (isAbsolute(f)) return f.getPath();
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertyAccess("user.dir");
-        }
-        return resolve(userDir, f.getPath());
+        return resolve(System.getProperty("user.dir"), f.getPath());
     }
 
     // Caches for canonicalization results to improve startup performance.
diff --git a/jdk/src/windows/classes/java/io/WinNTFileSystem.java b/jdk/src/windows/classes/java/io/WinNTFileSystem.java
index ca395f2..b8844c0 100644
--- a/jdk/src/windows/classes/java/io/WinNTFileSystem.java
+++ b/jdk/src/windows/classes/java/io/WinNTFileSystem.java
@@ -53,7 +53,6 @@
     private final char slash;
     private final char altSlash;
     private final char semicolon;
-    private final String userDir;
 
     // Whether to enable alternative data streams (ADS) by suppressing
     // checking the path for invalid characters, in particular ":".
@@ -75,8 +74,6 @@
         semicolon = AccessController.doPrivileged(
             new GetPropertyAction("path.separator")).charAt(0);
         altSlash = (this.slash == '\\') ? '/' : '\\';
-        userDir = AccessController.doPrivileged(
-            new GetPropertyAction("user.dir"));
     }
 
     private boolean isSlash(char c) {
@@ -403,11 +400,7 @@
     private String getUserPath() {
         /* For both compatibility and security,
            we must look this up every time */
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertyAccess("user.dir");
-        }
-        return normalize(userDir);
+        return normalize(System.getProperty("user.dir"));
     }
 
     private String getDrive(String path) {
diff --git a/jdk/test/java/io/File/UserDirChangedTest.java b/jdk/test/java/io/File/UserDirChangedTest.java
deleted file mode 100644
index 9eccb76..0000000
--- a/jdk/test/java/io/File/UserDirChangedTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
-   @bug 8194154
-   @summary Test changing property user.dir on impacting getCanonicalPath
-   @run main/othervm UserDirChangedTest
- */
-
-import java.io.File;
-
-public class UserDirChangedTest {
-    public static void main(String[] args) throws Exception {
-        String keyUserDir = "user.dir";
-        String userDirNew = "/home/a/b/c/";
-        String fileName = "./a";
-
-        String userDir = System.getProperty(keyUserDir);
-        File file = new File(fileName);
-        String canFilePath = file.getCanonicalPath();
-
-        // now reset user.dir, this will cause crash on linux without bug 8194154 fixed.
-        System.setProperty(keyUserDir,  userDirNew);
-        String newCanFilePath = file.getCanonicalPath();
-        System.out.format("%24s %48s%n", "Canonical Path = ", canFilePath);
-        System.out.format("%24s %48s%n", "new Canonical Path = ", newCanFilePath);
-        if (!canFilePath.equals(newCanFilePath)) {
-            throw new RuntimeException("Changing property user.dir should have no effect on getCanonicalPath");
-        }
-    }
-}
